[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[plamo:27749] Plamo-4.21 Intelコンパイラーのinstallと並列計算



尾形です。

クワッドコアなCPUが入手可能な時期になって来ましたので並列
計算プログラムの作成が可能なIntelのC/C++及びFortranを
Plamo-4.21にinstallして見ました。

(1-1)install
現在はPlamo標準installの状態だけで簡単にinstall出来ます。
install時にlicenseファイルの絶対pathを入力するとたいてい
うまく出来ます。
非商用版licenseの例
/opt/intel/licenses/NCOM_L_CMP_CPP_XXXX-YYYYYYYY.lic

licenseは商用版(有料)と無料の非商用版(NCOM)があります。
以下の非商用版licenseの使用条件に該当するのであれば
http://www.intel.com/cd/software/products/ijkk/jpn/download/download/index.htm
非商用版のlicenseは即時入手可能です。
http://www3.intel.com/cd/software/products/asmo-na/eng/download/download/index.htm
非商用版のlicenseは当初は無期限update可能期間のlicense
でしたが現在は商用版と同じ1年間のupdate可能期間のlicense
ファイルとなっています。

(1-2)C/C++,Fortranの使用
C/C++の場合tcshでは
% source /opt/intel/cc/9.1.044/bin/iccvars.csh
あるいはは.tcshrcに忍ばせておくだけで使用出来ます。
(bash用にはiccvars.shがあります)
バージョンの確認
% icc -V
マニュアルもこの状態で見れます。
% man icc
Fortranの場合も同様に
% source /opt/intel/cc/9.1.039/bin/ifortvars.csh
% ifort -V
% man ifort

(2-1)並列計算プログラムの作成
並列計算のプログラムは主にMPIとOpenMPの処理方法が用いられ
ています。MPIを用いる場合にはLinuxではmpichなどを用いて
並列計算に特化したプログラムを作成する必要があります。
OpenMPでは通常プログラムにディレクティブ(特殊コメント行)
を挿入する だけで並列計算が行える特徴があります。逆にその
分並列 計算の効率を上げるのが難しくなりますが極めて簡単に
並列計算プログラムが作成出来ます。

DualCore又はクワッドコア(又はDualCoreのSMP)の場合には並列
効率が90%程度で1.8倍、3.0倍程度、95%では1.9倍、3.5倍程度
の計算速度が期待出来ます。(並列効果は(3)参照)

MPI(Message Passing Interface)
http://www.mpi-forum.org/
http://www-unix.mcs.anl.gov/mpi/mpich2/
OpenMP(The MP in OpenMP stands for Multi Processing)
http://www.openmp.org/drupal/

IntelのOpenMPの解説書として以下のものがあります。簡単な
並列化はループの計算と計算の順番が関係ないブロックの
並列化でかなりの効率が得られますので5.1と5.2章の8ページ
だけで期待以上のことが出来ると思います。
http://download.intel.co.jp/jp/business/japan/pdf/526J-002.pdf C/C++
http://download.intel.co.jp/jp/business/japan/pdf/527J-002.pdf Fortran
改定版なので直っていると思いましたがFortranにはまだミス
プリがありますのでC/C++を比較参照して下さい。

OpenMPの場合通常はクラスター(ネットワークで接続)構成の
利用は出来ませんが、IntelではClusterOpenMPの販売を行って
います。ちょっと前まで100万円以上していたものを$1249に
したようです。この手の購入には現在は円高なのでIntelの
直販から$で購入した方が安いと思います。

ただしクラスター構成では並列効果が90%以上ないとあまり
期待する速度が得られません。効率を上げるにはプログラムを
並列化に適したように作る必要がありますので、始めから作成
するのであればプログラムは難しくなりますが無料のmpichなど
を利用するとかなりな効率のものが出来ます。

(2-2)コンパイルと実行
OpenMP並列計算のコンパイラーオプションは -openmp と -parallel
がありますが、-parallel は自動並列化オプションとなっています。

スレッドの実行状態の表示は
OpenMPの場合スレッドで並列計算が行われますので実行状態は
% ps urm
などでスレッドの%CPUにより積算の各CPU使用率がわかります。
ただし各CPUの使用率が高い場合でも必ずしも並列効率が高く
なっているとは限りません。単に同じ計算を各スレッドが実行
して各CPUの使用率が高くなっていることが多くあります。
特に -parallel オプションを使用するとこの状態になります
ので -openmp オプションのみでのコンパイルの方が良いかも。

PC本体の実行状態の表示には
% top -i
では上から3行目のCpu(s):で全体のCPU使用率がわかります。
DualCoreな場合1CPU使用の最大値は50%として表示されます。
クワッド又はDualCoreのSMPの場合25%が1CPUの最大となります。
こちらも全CPUの使用率が上がってもかならずしも並列効率が高く
なっているとは限りませんので喜ぶのは実際の実行時間を見て
からということになります。
このときプロセスの%CPUはスレッドの使用率は表示されず
masterプロセスのCPU使用率として最大100%の表示となります。

(3)並列効果
概略の並列効果を計算するにはアムダール則を用いて求めます。
並列効率=1/((1-p)+p/N)
p: 並列化率(0.0-1.0)
N:CPUcoreの数

Amdahl's law
Number of CPU
(%) 2 4 6 8 10
99.0 1.98 3.88 5.71 7.48 9.17
98.0 1.96 3.77 5.45 7.02 8.47
97.0 1.94 3.67 5.22 6.61 7.87
96.0 1.92 3.57 5.00 6.25 7.35
95.0 1.90 3.48 4.80 5.93 6.90
94.0 1.89 3.39 4.62 5.63 6.49
93.0 1.87 3.31 4.44 5.37 6.13
92.0 1.85 3.23 4.29 5.13 5.81
91.0 1.83 3.15 4.14 4.91 5.52
90.0 1.82 3.08 4.00 4.71 5.26
89.0 1.80 3.01 3.87 4.52 5.03
88.0 1.79 2.94 3.75 4.35 4.81
87.0 1.77 2.88 3.64 4.19 4.61
86.0 1.75 2.82 3.53 4.04 4.42
85.0 1.74 2.76 3.43 3.90 4.26
84.0 1.72 2.70 3.33 3.77 4.10
83.0 1.71 2.65 3.24 3.65 3.95
82.0 1.69 2.60 3.16 3.54 3.82
81.0 1.68 2.55 3.08 3.43 3.69
80.0 1.67 2.50 3.00 3.33 3.57
79.0 1.65 2.45 2.93 3.24 3.46
78.0 1.64 2.41 2.86 3.15 3.36
77.0 1.63 2.37 2.79 3.07 3.26
76.0 1.61 2.33 2.73 2.99 3.16
75.0 1.60 2.29 2.67 2.91 3.08
74.0 1.59 2.25 2.61 2.84 2.99
73.0 1.57 2.21 2.55 2.77 2.92
72.0 1.56 2.17 2.50 2.70 2.84
71.0 1.55 2.14 2.45 2.64 2.77
70.0 1.54 2.11 2.40 2.58 2.70

では。


[検索ページ] [メール一覧]
Plamo ML 公開システム