余白の書きなぐり

aueweのブログ

並列計算

Pythonで並列計算(Poolとmapを使う)

pythonで並列計算をしたいとき、Poolとmapを使うのが簡単だった。 C言語で並列計算して配列に格納する のと同じような感覚。 mapを使うのがカッコイイ。Haskellみたい。 簡単な例 twiceFuncという名の関数 f(x) = 2x に argList = [1,2,3] の各要素を並列に…

OpenMPで多重forループを並列化して配列に格納する方法

注意点 forループを並列化して配列に値を代入したい。 forループが一重の時は簡単だけど、 多重forループの場合には 内側から #pragma omp parralel forしないとバグる。 以下の正解とまちがいを見れば、よくわかる。 正解 // 内外共に #pragma omp する int…

OpenMPIで乱数を使う

普通の(並列計算でない)プログラムで乱数を使用する際に、 プログラムを実行するたびに異なる系列で擬似乱数を発生させるには seed に現在時刻を使用するのが一般的だ。 要するに srand((unsigned) time(NULL)); とすればよい。詳細は以下のページにまとまっ…

OpenMPI で配列をまとめる(2)

前回 とほとんど同じだけど、備忘録として。 やりたいこと プロセス数 allrank を 4 として、 各 myrank の配列 my_array[3] myrank == 0 ... my_array[3] = {0,4,8}; // 前回は{0,1,2}だった myrank == 1 ... my_array[3] = {1,5,9}; // 前回は{3,4,5}だっ…

OpenMPI で配列をまとめる

やりたいこと プロセス数 allrank を 4 として、 各 myrank の配列 my_array[3] myrank == 0 ... my_array[3] = {0,1,2}; myrank == 1 ... my_array[3] = {3,4,5}; myrank == 2 ... my_array[3] = {6,7,8}; myrank == 3 ... my_array[3] = {9,10,11}; をまと…

UbuntuとMintにOpenMPIを導入

次の記事-OpenMPIの使い方について OpenMPIとOpenMPは別物だよ!!! どちらも並列処理のためのフレームワークだけど、 なんでわざわざ混乱を招く名前をつけるのかね。 両者の違いは 「MPIでは各プロセスが占有のメモリ領域を扱うのに対し、 OpenMPではメモ…

C言語で並列処理(OpenMP)

Windows(minGW), Mac, Linux のgcc(version 4.2以降)で動作確認済。 新しいライブラリ等をインストールすることなく、デフォルトのままのgccでコンパイルが通った。 こんなに手軽に並列計算できるなんてすごい。 ソースコード // hoge.c // 並列処理のプログ…