並列化とか以前から興味があったのでOpenMPを使ってみることにしました。
Windowsでやってみたのですが、ネット調べた情報がlinux環境のものが多く、コンパイルも成功しないのでubuntuに変更
とりあえず動いたのですが、うちのパソコンはそもそも2コアあまりよくわかりません。
並列化したプログラムのほうが遅くなりました。相当タスクのあるプログラムでないと並列化の初期化等のほうが時間がかかるようです。
ということで4コアのRaspberry Pi2でタスクをより多くして、やってみることにしました。
ubuntu MATEを起動した時点でコンパイラもopenMP環境(gccに付属)も入っています
"gcc -fopenmp ファイル名" で並列化の記述があれば完成です。
並列化のコードでプラグマというもの以外使わなければ
"gcc ファイル名" で並列化しない普通の実行ファイルになります。
コピペできるソース載せたいのですがgooブログでうまくできないのですみません。
上のほうが並列化の実行例、下の方は並列化していない実行例
こんな量の計算、ちょっとしたコンピュータシステムでもほんの一部分あるかないかです。
スレッドの数などを指定したりもできるのですがプログラムを書いてみると、
問題があるようで想定通りに全然行かなかったので(なぜかコア最大だけ遅くなる)、
簡単なプログラムの方を掲載します。
もっと速いパソコンで動かしたらたぶんまた遅くなります。
<参考文献>
C言語によるOpenMP入門
時間の計測を行う
Windowsでやってみたのですが、ネット調べた情報がlinux環境のものが多く、コンパイルも成功しないのでubuntuに変更
とりあえず動いたのですが、うちのパソコンはそもそも2コアあまりよくわかりません。
並列化したプログラムのほうが遅くなりました。相当タスクのあるプログラムでないと並列化の初期化等のほうが時間がかかるようです。
ということで4コアのRaspberry Pi2でタスクをより多くして、やってみることにしました。
ubuntu MATEを起動した時点でコンパイラもopenMP環境(gccに付属)も入っています
"gcc -fopenmp ファイル名" で並列化の記述があれば完成です。
並列化のコードでプラグマというもの以外使わなければ
"gcc ファイル名" で並列化しない普通の実行ファイルになります。
コピペできるソース載せたいのですがgooブログでうまくできないのですみません。
上のほうが並列化の実行例、下の方は並列化していない実行例
こんな量の計算、ちょっとしたコンピュータシステムでもほんの一部分あるかないかです。
スレッドの数などを指定したりもできるのですがプログラムを書いてみると、
問題があるようで想定通りに全然行かなかったので(なぜかコア最大だけ遅くなる)、
簡単なプログラムの方を掲載します。
もっと速いパソコンで動かしたらたぶんまた遅くなります。
<参考文献>
C言語によるOpenMP入門
時間の計測を行う