Parallel Notes#1-OpenMPテクノロジー

Openmp 次のいくつかの投稿では、マルチコアプロセッサの実用化について説明します。 それでもやはり、マルチコアについて何が言われようとも、プログラムはいくつかのコアを効果的に使用するために「訓練」されなければなりません。 そして、この最初の投稿では、発表と最初の「紹介」メモがあります。



並列プログラミング技術



並列プログラミングにはかなりの数の異なる技術があることをすぐに言わなければなりません。 さらに、これらの技術は、プログラミング言語においても、並列システムの構築へのアーキテクチャ的アプローチのように大きく異なるだけではありません。



たとえば、いくつかのコンピューター(1つと異なるタイプの両方)に基づいて並列ソリューションを構築する技術もあれば、複数のプロセッサーコアを備えた同じマシンで作業する技術もあります。



複数のコンピューターに基づくシステムは、分散コンピューティングのシステムのクラスに属します。 このようなソリューションは長い間使用されており、業界の専門家によく理解されており、それらに関する多くの文献があります。 分散コンピューティングテクノロジーの最も顕著な例は、 MPI (Message Passing Interface)です。 MPIは、並列プログラミングで最も一般的なデータ交換インターフェイス標準であり、多数のコンピュータープラットフォームの実装があります。 MPIは、プログラマーに、マシンアーキテクチャ(共有/分離メモリを備えたユニプロセッサ/マルチプロセッサ)、ブランチの相互配置(1つのプロセッサまたは異なる)に関係なく、並列アプリケーション内のブランチの相互作用のための単一のメカニズムを提供します。



MPIは共有メモリを備えたシステム用に設計されているため、MPIを使用して共有メモリシステムで並列プロセスを編成することはお勧めできません。 冗長で複雑すぎるため、OpenMPなどのソリューションが開発され始めました。 もちろん、1台のマシンでMPIソリューションを作成することを妨げるものはありません。



しかし、1台のマシンで作業するための並列プログラミングシステムが比較的最近開発され始めました。 いいえ、もちろん、これらは根本的に新しいアイデアであるとは考えないでくださいが、プログラマーがOpenMPIntel Thread Building BlocksMicrosoft Parallel Extensionsなどのテクノロジーに注意を払うべきデスクトップ上のマルチコアシステムの出現(またはむしろ近日登場)によってです。その他多数。



並列プログラミングテクノロジが、プログラムを段階的に並列化する機能をサポートすることが非常に重要です。 はい、理想的な並列プログラムはすぐに並列で記述しなければならず、並列化がまったく問題にならない関数型言語ではさらに良いことは明らかです...しかし、プログラマは現実の世界に住んで働いており、新しい関数型の関数Fの代わりに10 MBのコードがあります最良のケースはC ++であり、一般的にはCでもです。そして、このコードは徐々に並列化されるべきです。 この場合、OpenMPテクノロジー(たとえば)は非常に良い選択です。 アプリケーションで最も並列化が必要な場所を選択して、最初にそれらを並列化することができます。 実際には、このように見えます。 プロファイリングツールを使用して、プログラマはプログラム内で最も長く続く「ボトルネック」を検索します。 ツールを使用する理由 サイズが10 MBのあまり知られていないプロジェクトの思考力により、「ボトルネック」を見つけることができないためです。 次に、プログラマーはOpenMPを使用してこれらのボトルネックを並列化します。 その後、目的のアプリケーションパフォーマンスが得られるまで、次のボトルネックなどを検索できます。 パラレルバージョンの開発プロセスを中断し、中間リリースをリリースし、必要に応じてそれに戻ることができます。 そのため、特に、OpenMPテクノロジーは非常に人気があります。



OpenMPとは何ですか?



OpenMP(Open Multi-Processing)は、共有メモリ(SMPシステム)を備えたマルチプロセッサシステムでマルチスレッドアプリケーションをプログラムするように設計されたコンパイラディレクティブ、ライブラリプロシージャ、および環境変数のセットです。



最初のOpenMP標準は、簡単にポータブルなマルチスレッドアプリケーションの作成に焦点を当てたAPIとして1997年に開発されました。 最初はFortran言語に基づいていましたが、後にCおよびC ++言語が含まれました。



OpenMPインターフェースは、最も一般的な並列プログラミング技術の1つになりました。 OpenMPは、多数のプロセッサを備えたスーパーコンピューターシステムのプログラミング時、デスクトップユーザーシステム、またはXbox 360などの両方で正常に使用されます。



OpenMP仕様は、非営利組織OpenMP Architecture Review Board( ARB )によって規制されているコンピューターハードウェアおよびソフトウェアの大手メーカーによって開発されています。



OpenMPは、並列ブランチマージ実行モデルを使用します。 OpenMPプログラムは、初期スレッドと呼ばれる実行の単一スレッドとして開始されます。 スレッドは、並列構造に遭遇すると、それ自体といくつかの追加スレッドで構成されるスレッドの新しいグループを作成し、新しいグループのメインのスレッドになります。 新しいグループのすべてのメンバー(メイングループを含む)は、並列構造内でコードを実行します。 並列構造の最後には、暗黙的な障壁があります。 並列構築後、ユーザーコードの実行はメインスレッドのみを継続します。 他の並列領域は、並列領域にネストできます。並列領域では、初期領域の各ストリームがフローグループのメインストリームになります。 入れ子になった領域には、さらに深い入れ子レベルの領域が含まれる場合があります。



並行して実行されるグループ内のスレッドの数は、いくつかの方法で制御できます。 それらの1つは、OMP_NUM_THREADS環境変数の使用です。 別の方法は、omp_set_num_threads()を呼び出すことです。 別の方法は、num_threads式をparallelディレクティブと組み合わせて使用​​することです。



今後の並列プログラミングに関する注意事項のお知らせ



この記録から、OpenMPテクノロジーと並列アプリケーション開発用ツールの知識に特化した短いシリーズの出版物を開始します。 次のメモで学習します。

•並列プログラムの開発に必要なツール。

•ゼロから並列プログラムを作成する方法。

•OpenMPテクノロジーを使用して既存のプログラムに並列実行を追加する方法。

•OpenMPアプリケーションの開発時に発生する一般的な問題とその診断方法。

•並列プログラムの最適化。



次のレッスンのリリースを待って、コメントに興味のある並列プログラミングのトピックを書き留めてください。 そして、私たちはあなたの希望に応じてさらにメモを作成します。



追加資料



1.サイトIntel Software Networkのコミュニティ「 Parallel Programming 」。

2.記事「 OpenMPテクノロジーについて簡単に 」。



All Articles