1個あたりの演算速度の向上は鈍化傾向にあるため、複数のプロセッサに処理を分散させる並列計算が今後ますます重要になると考えられます。この記事では並列化プログラミングについて説明します。スポンサーリンク並列計算機のタイプ並列計算機におけるメモリ方式には大きくわけて、(a)共有メモリ型、(b)分散メモリ型の二種類の方式を挙げることができますが、これらのメモリ方式概念図を以下に示します。共有メモリはメモリ全体をプロセッサで共有する方式です。プロセッサはバスで結合されたメモリにアクセス出来るためアクセス速度は高速ですが、共有できるメモリのサイズには限界があります。分散メモリ方式は、メモリが分散しており、各プロセッサは自分に結合したメモリにバスを介してアクセスし、他のメモリ空間へはバス以外の通信手段を用いてデータの送受信を行います。この通信速度は一般的にバスと比較して圧倒的に遅いです。主要な並列化の手段として、以下の3つが挙げられます。MPIこのうち、自動並列化とOpenMPは共有メモリ型計算機に適しており、MPIは分散メモリ型計算機に適しています。自動並列化はプログラム改変が不要ですが、並列化しても問題無いとコンパイラが判断できた部分だけしか並列化されないため、OpenMPやMPIに比べて並列化による効果が得られ難いことが一般的です。OpenMPやMPIでは、並列化の対象となるループや部分プログラムをプログラマに指定させることにより、コンパイラだけでは判別できなかった部分の並列化を行うことができます。ここで、MPIによる並列化を行なう場合、通常はプログラムの大きな改変を必要とし、プログラミングに要する労力が大きいです。これに対して、OpenMPは共有メモリを利用する性質上、プログラムの大きな改変を必要としないため、比較的に容易にプログラミングできます。gfortranを用いることで、OpenMPによる並列化プログラミング環境を用意に手に入れることができます。前記事を参考にgfortranをインストールした方は、既にOpenMPが使える環境が整っています。この記事では、プログラミングが比較的容易で、環境も整えやすいOpenMPについて解説します。サンプルプログラムOpenMPを使ったプログラミングについては、以下のサンプルプログラムを用いて説明します。ダウンロードはこちらからお願いします(右クリックメニューから保存)。sample12.f90同様に、時間計測プログラムもダウンロードして下さい。CPUtime_M.f90ダウンロードしたsample12.f90とCPUtime_M.f90は同じフォルダに置いて下さい。sample12_sub_parallelプログラムを順に説明します。1行目は、include文を用いて、時間を計測する外部プログラム追加しています。3-14行目はメインルーチンです。並列化していないサブルーチン(17-28行目)と、並列化したサブルーチン(31-58)を順に呼び出して、計算時間の比較を行っています。これらのサブルーチンでは、二乗の和を計算して、最後に結果を出力しています。以下に並列化サブルーチンについて詳しく説明をします。parallelで並列計算が開始されます。この部分で変数を共有するか(shared)、共有しないか(private)を指定します。このサンプルプログラムではデフォルトをprivateとしています。番号を取得する関数で、OMP_GET_NUM_THREADS()は並列計算に用いたCPUの総数です。この指定部以下で初期化された変数はローカルなメモリに配置されます。これをファーストタッチといいます。並列実行領域では、各プロセッサがローカルなメモリへアクセスすることになり、プログラムの性能が向上します。(nowait)文で行ないます。各CPUにあるデータをひとつにまとめます。barrier文を用いて、各CPUの同期を取ります。このプログラムではprivate変数(px)をshared変数(tx)に加算しています。parallel文で並列計算を終了します。コンパイルと実行コンパイルと実行には、以下のバッチファイルを使って下さい。OpenMP用なので、今までの記事で使っていたバッチファイルとは少しだけ中身が異なります。comp_exe_32_OMPx2.bat例として、64bit用を下記します。pause2行目がコンパイルですが、並列化オプションとしてfopenmpを用いています。4行目のOMP_NUM_THREADSで使用するCPUの数を指定しています。この例では2CPUを使っています。使い方は、sample12.f90をcomp_exe_64(32)_OMPx2.batにドラッグ&ドロップするだけです。こんな画面が出たでしょうか?出ていれば正常終了です。sample12.f90の繰り返し数(nrepeat)やcomp_exe_64(32)_OMPx2.batのCPU数(OMP_NUM_THREADS)を変えて、色々試してみて下さい。Delからタスクマネージャを起動し、論理プロセッサ数の数値から知ることができます。Windows8.1の場合は、以下のような画面です。コメントをキャンセルメールアドレスが公開されることはありません。インド株、タイ株、ロシア株など。自作プログラムを用いて日本株のシステムトレードを実践しています。