Boost」など、さまざまなカンファレンスを企画・運営しています。BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。3パフォーマンス測定法まとめ参考資料OpenMPのメモリモデル前項で少し触れましたが、OpenMPは共有メモリ方式を採用しています。共有メモリ方式は、逐次処理をしている間は普通のプログラミングをしていれば特に考慮する必要がありませんでしたが、並列処理を行う際には注意をせねばなりません。複数のスレッドで一つのメモリにある変数を読み書きするからです。複数のスレッドが並列的処理をする場合、何も規定がないと並列プログラミングが困難になってしまいます。そこで、共有メモリをどのように扱うかを表すメモリモデルが定められています。OpenMPのメモリモデルはrelaxed-consistencyです。relaxed-consistencyは、メモリへのリードとライトの実行順序を必ずしも守らないメモリモデルです。何のためにリードやライトの実行順序を守らないのかというと、主な理由はパフォーマンスを上げるためです。普段意識することはありませんが、コンパイラは命令の実行順序を変えて最適化しています。実行順序を変えないようにすると、このような最適化が行えなくなりますし、厳格に実行順序を保障するためのオーバーヘッドが生じることになります。OpenMPのメモリモデルはrelaxed-consistencyですので、実行順序に依存する処理をプログラミングしてはなりません。ライト処理には細心の注意を払わねばなりません。OpenMPの並列処理モデルOpenMPは従来のスレッドプログラミングによる並列化を抽象化した技術ですので、どのようにプログラムが並列化されているのかを理解する必要があります。仕様書によるとOpenMPはfork-joinモデルを採用しています。fork-joinモデルをコードで表現すると次のようになります。以降サンプルコードをもとに解説しますので、まず下記のコードを見てください。fork/joinモデルで並行的に合計値を算出します。任意の数の数値の合計値を求めて表示します。tsk.sum);}このサンプルは、配列に格納された任意の数値を合計するものです。注目するべき点はfork関数です。fork関数内で、処理する範囲を二分割し、個別に算出して合計することを再帰的に行っています。fork-joinモデルとは、問題を分割して解決するタイプの並列化技法なのです。このことからいくつかのOpenMPの特徴が分かります。第1に、問題を分割できなければ実現不可能だということが分かります。fork-joinモデルは、問題を分割して解決する方式ですので、そもそも問題が分割できない場合にはどうすることもできません。任意の数の数値が互いに干渉し合う場合、数値を並列的に正しく計算することはできません。この場合は、各数値がどのように計算されるのかをよく調べ、どのような基準で処理を分割できるのかを考える必要があるでしょう。第2に、逐次プログラミングでは必要のなかった余分な処理が必ずいることが分かります。これがコア数と同じ処理効率を達成できない理由です。先ほどのサンプルでは、_beginthreadex関数の呼び出し、WaitForMultipleObjects関数の呼び出し、CloseHandle関数の呼び出しなどのコードがそれに該当します。第3に、処理する内容が少ないと処理速度が落ちるということです。単純でデータ量が少ないプログラムを並列処理化すると、先ほど述べた余分な処理があるので処理速度が遅くなります。以上でfork-joinモデルに関する解説は終わりです。これはあくまでも概念を理解するためのサンプルであり、実際にコンパイラが出力するコードは、より高度に最適化されている点に注意して下さい。2;の部分)通常は動的にCPUのコア数を算出して適切な粒度を決定します。並列処理ではCPUのキャッシュラインの調節が重要です。CPUのキャッシュラインを意識しないと、並列処理のパフォーマンスが悪くなります。コンパイラはCPUのキャッシュラインを意識したコードを出力します。その他にも色々な工夫をコンパイラは行っています。次のページパフォーマンス測定法123PREVNEXTこの記事は参考になりましたか?0参考になった印刷用を表示ポスト基礎から学ぶOpenMP連載記事一覧OpenMPにおける変数の扱いと並列リダクションOpenMPのメモリモデルとfork-joinモデルOpenMPの実行時ライブラリと並列ループもっと読むこの記事の著者インドリ(インドリ)分析・設計・実装なんでもありのフリーエンジニア。ブログ「無差別に技術をついばむ鳥(http://indori.blog32.fc2.com/)」の作者です。アドバイザーをしたり、システム開発したり、情報処理技術を研究したりと色々しています。NEW1DMM.comの施策から見る、事業をむしばむ「技術負債」への処方箋──リファクタリングの「言語化」でインシデントを予防2企業の7割超が「2025年の崖」を理解していないことが明らかに。NEW1DMM.comの施策から見る、事業をむしばむ「技術負債」への処方箋──リファクタリングの「言語化」でインシデントを予防2企業の7割超が「2025年の崖」を理解していないことが明らかに。NEW1DMM.comの施策から見る、事業をむしばむ「技術負債」への処方箋──リファクタリングの「言語化」でインシデントを予防2企業の7割超が「2025年の崖」を理解していないことが明らかに。12:00法務担当者、6割超が今後業務で「生成AIを使用したい」と回答。12:00オルツ、日本語RAGでは軽量型LLMとして世界最高の精度と推論速度を達成した「LHTM-OPT2」をリリース新着記事一覧を見るイベント今後の予定を見るCodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。イラストの無断転載を禁じます。記載されているロゴ、システム名、製品名は各社及び商標権者の登録商標あるいは商標です。