OpenMP

マルチプロセッサによる並列処理が簡単に記述できるOpenMP。標準で対応しているコンパイラが多いもかかわらず使用したことがありませんでした。ラズパイで配列などの単純な計算に使いたいと思いテストしてみました。

しかしこれ以前扱ったことがあるかも・・と検索してみたら、OpenMPIのことでした。

Message Passing Interface / OCaml


間違えやすいですね。

下記、とても詳しいドキュメントがあります。
https://www.cc.u-tokyo.ac.jp/events/lectures/03/kosyu-openmp_c.pdf

mp1.c

コンパイルオプション

cc -o mp1 mp1.c -fopenmp -O3

プラグマ(コンパイラへの指示内容を記述)でプログラムの実行結果が変化します。4つのコアがあれば4回表示されます。
下に、実行結果比較があります。(nmp1 というのは、OpenMP部分をコメントして通常どおりコンパイルしたもの)

mp2.c

実行時間を計測してみました。
(その他 mp1と同様)

実行結果

差異を確認できました。

結果は毎回かわりますが、このあたりのスレッドのコントロールも細かくできそうです。
もう少し勉強してみたいです。