-parallelオプションの指定により、コンパイラがソースコード内のループに対して、並列化が可能か否かの解析を行います。-parallel--ソースファイル内の全てのループを解析し、安全に並列化できるループがあれば並列バイナリを生成します。-parallelと共に指定します。自動並列化の性能向上の見込みのしきい値(確信度)を設定します。とき、ループは、計算量にかかわらず、並列化可能ならば常に自動並列化されます。とき、並列化が可能でかつ並列化による性能向上が見込まれる場合のみ自動並列化されます。-par-report[n]--自動並列化の診断情報を出力します。0の場合、診断情報を出力しません。1の場合、並列化されたループの行番号を出力します。2の場合、並列化されたループ、並列化できなかったループの行番号を出力します。3の場合、2の情報に加えて、並列化できなかったループについて並列化できない理由を出力します。-par-threshold100(デフォルト)の場合は、初期化ループには充分な処理量が無く、性能向上が確実ではないと判断し、並列化しません。-par-threshold0の場合は、性能向上の見込み値には関係なく、安全に並列化できるループは全て並列化します。-openmpオプションの指定により、ソースコード内のOpenMP指示行を有効にします。-openmp--openmp指示行を有効にします。-openmp-report[n]--OpenMP並列化の診断情報を出力します。0の場合、診断情報を出力しません。1の場合、並列化されたループの行番号を出力します。2の場合、1の情報に加えて、MASTER、SINGLE、ORDERED、ATOMIC構造などの診断メッセージを出力します。-openmpと-parallelを同時に指定したとき~~OpenMP指示行の指定されたループは、-openmpによって並列化され、その他のループは、-parallelによって解析されます。[#ke6c26fe]-EICシステムでは、「ファーストタッチ」を採用しています。データは、最初にそのデータにタッチ(書き込みまたは読み込み)したプロセスのローカルメモリに配置されるというものです。配列(配列Aとする)を初期化しているループが並列化されていないと1CPU実行であるために、配列Aはある1つのノードに配置されます。配列Aを処理する並列実行領域では、複数のプロセッサが1つのノードへアクセスすることになります。このような状況ではプログラムの性能向上は望めません。可能なかぎり初期化ループも並列化してください。[#zd84c197]-各ユーザが使用可能なスタックサイズの上限を6GBに設定しています(メモリ使用量の上限ではありません)。関数や手続きの中で宣言されるローカル変数がスタック領域にアロケーションされます。上限を越えてスタックに領域を確保しようとすると、AddressErrorまたは、SegmentationFaultでプログラムは終了します。この場合、データを静的にアロケーションするために、COMMONブロックでデータ(配列)を宣言して下さい。-環境変数KMP_STACKSIZEには自動並列化/OpneMPプログラムのスレーブスレッドが使用できるスタック領域の最大容量を指定します。スレーブスレッドのプライベート変数が対象です。共有変数、マスタースレッドのプライベート変数は対象ではありません。デフォルトでは2GBが設定されています。-単位として、k(キロバイト)、m(メガバイト)、g(ギガバイト)、t(テラバイト)が使えます。[#t936c9e4]コマンド行の末尾にMPIライブラリのリンクを指示してください。-lmpi実行時にはmpiexec_mptコマンドを使ってジョブを起動してください。-MPIのデータ型~FortranプログラムでのMPIのデータ型とそれに対応するFortranでのデータ型は以下の通りです。~|~MPIのデータ型|~Fortranのデータ型|~bit||MPI_DATATYPE_NULL|対応する型はありません|―||MPI_INTEGER|INTEGER|32||MPI_REAL|REAL|32||MPI_DOUBLE_PRECISION|DOUBLE_PRECISION|64||MPI_COMPLEX|COMPLEX|64||MPI_DOUBLE_COMPLEX|DOUBLE_COMPLEX|128||MPI_LOGICAL|LOGICAL|4||MPI_CHARACTER|CHARACTER|1||MPI_INTEGER1|INTEGER(KIND=1)|8||MPI_INTEGER2|INTEGER(KIND=2)|16||MPI_INTEGER4|INTEGER(KIND=4)|32||MPI_INTEGER8|INTEGER(KIND=8)|64||MPI_REAL2|REAL(KIND=2)|16||MPI_REAL8|REAL(KIND=8)|64||MPI_REAL16|REAL(KIND=16)|128||MPI_BYTE|BYTE|1|~CプログラムでのMPIのデータ型とそれに対応するCでのデータの型は以下の通りです。[#ka4a7d3a]並列化を有効にするコンパイルオプションを指定して、リンク時にMPIライブラリをリンクします。-lmpi実行時にはmpiexec_mptコマンドを使ってジョブを起動してください。「[[バッチジョブ(高速計算サーバ)]]」、「[[バッチジョブ(並列計算サーバ)]]」を参照ください。オプションの指定で子スレッドまでの解析が可能です。psrunコマンドと共に自動並列化/OpenMPプログラムを実行すると、OMP_NUM_THREADSで指定した数のスレッドの他に1つの管理スレッドが起動されます。そのため解析結果ファイルも実行スレッド数+1個作られます。オプションを指定してください。ファイルがカレントディレクトリに作られます。a.out.0.4032.eich1.xml(解析結果ファイル名はバイナリ名.スレッド番号.PID.ホスト名.xmlです。)~psprocessコマンドで整形してください。a.out.0.4032.eich1.xml~(*)解析結果ファイルを複数指定して、全スレッドの解析結果を表示するということはできません。オプションを指定し、並列化のために自動並列化オプション指定します。L_jacobi__202__par:himeno_omp.f:216--MPIプログラム~MPIプログラムを解析するときはpsrunコマンドに-fオプションを指定してください。dplaceのオプションは、-s2となります。~~--ハイブリッドプログラム~ハイブリッドプログラムを解析するときは、psrunコマンドに-fオプションと-pオプションを指定してください。~実行時にはomplaceコマンドを指定して下さい。omplaceコマンドのオプションは、psrunを指定しないときと変わりません。-''MFLOPS値を測る''~--Xeon7500番台は浮動小数点演算にSSE命令を採用しています。SSE命令は4つの単精度演算、または2つ倍精度演算を1命令で行います。従って、カウントされる演算数は実際の演算数よりも少なくなります。正確な浮動少数点演算数をカウントしたいときには、コンパイル時にSSE命令を無効にする-no-vecオプションを指定してください。-xSSE4.2と-no-vecが同時に指定されたときには、-no-vecが優先されます。-no-vecオプションは実行性能が落ちる場合がありますので、性能解析が終わりましたら、指定をはずしてください~~--OpenMP/自動並列化プログラム~環境変数PS_HWPC_CONFIGに以下のように設定してください。~psrunコマンドに-pオプションを指定ください。ファイルがカレントディレクトリに作られます。a.out.1.2954.eich1.xmla.out.0.2954.eich1.xml(注)並列数+1個の解析結果ファイルが作られます。1つは管理スレッドを解析した結果です。管理スレッドは仕事をしないので解析結果の数値はほぼゼロとなります。$psprocessa.out.0.2954.eich1.xml解析結果ファイルの内容が表示されます。%CPUutilization......................97.284~(*)全スレッドの統計値を表示するには~psprocessコマンドの-cオプションを使って、解析結果ファイルを1つのファイルにまとめます。まとめたファイルをpsprocessコマンドで整形します。~(統計を求める際には、管理スレッドの解析結果ファイルは対象からはずして下さい。2.36--MPIプログラム~~環境変数PS_HWPC_CONFIGに以下を設定してください。~psrunコマンドに-fオプションを指定してください。~dplaceのオプションは-s2となります。ファイルがカレントディレクトリに作られます。~psprocessコマンドで整形してください。~(*)全プロセスの統計値を表示するにはOpenMP/自動並列化の項目を参照下さい。~--ハイブリッドプログラム~~環境変数PS_HWPC_CONFIGに以下を設定してください。~psrunコマンドに-f-pオプションを指定してください。ファイルがカレントディレクトリに作られます。~psprocessコマンドで整形してください。~(*)全プロセス/スレッドの統計値を表示するにはOpenMP/自動並列化の項目を参照下さい。~~-''perfcatcher(MPIの通信量を測る)''~~perfcatcherを使ってMPI関数の実行回数や、通信時間を知ることができます。~コマンド名はperfcatchです。dplaceのオプションは-s1のままです。"MPI_PROFILING_STATS"というファイルが作成されます。ランク毎、MPI関数毎の通信時間がわかります。........上記はランク0の解析です。~irecvが400回コールされ、通信時間は0.624307秒、~isendが400回コールされ、通信時間は0.006284秒、~waitが800回コールされ、通信時間は、0.0011888秒~。