[[
openmp
]]
Applied Mechanics Lab. WIKI
トレース:
文書の表示
以前のリビジョン
最近の変更
サイトマップ
ログイン
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
====== OpenMPについて ====== * 使い方は以下の文献を参考に * [[http://download.intel.com/jp/business/japan/pdf/527J-002.pdf|インテル® Fortran コンパイラー OpenMP* 活用ガイド]]が分かりやすい. * OpenMPによる並列プログラミングと数値計算法牛島省(著)を参考に. * !$ use omp_lib を最初に宣言.**!$とuseの間にはスペースが必要.** <code fortran> progaram hoge !$ use omp_lib !$ use another_module implicit none ... end program hoge </code> * 並列化したいところを!$OMP parallelと!$OMP end parallelではさむ.はさまれたところは複数のCPUで計算される. * !$OMP doと!$OMP singleが分かれば大体のことはできる. * 「!$につづけてスペース+命令文」とすると,openmpとしてコンパイルしたときだけその命令が実行される. * コンパイルの仕方は gfortran -openmp, ifort -opemmp, frt -KOMP. ===== 注意点 ===== * !$の後にOMPが続く場合は!$OMPと続けて書く.!$の後にOMPが続かない場合はスペースを入れる. <code fortran> program hoge !$ use omp_lib !$OMP parallel default(none) private(j) !$ j=omp_get_num_threads() !$ write(*,*) j !$ j=omp_get_thread_num() !$ write(*,*) j !$ !$OMP end parallel end program hoge </code> * defaultの後は(none)が無難?FIXME * doループの制御変数はいわゆる定義済み変数になるので共有属性節((sharedとかprivateとかfirstprivateとか))に記述する必要はない.書くとすればprivateかfirstprivateのいずれか. <code fortran> program hoge !$ use omp_lib implicit none integer i,j,k !$OMP parallel default(none) private(j) !$OMP do do i=1,4 !$ j=omp_get_thread_num() !$ write(*,*) i,j end do !$OMP end do !$OMP end parallel end program hoge </code> * !$OMPのついた文を改行するときは改行した文にも!$OMPが必要 <code fortran> program hoge !$ use omp_lib implicit none integer i,j,k k=-1 !$OMP parallel default(none) private(i,j)& !$OMP & shared(k) !$ i=omp_get_thread_num() !$ j=omp_get_num_threads() !$ write(*,*) i,j,k !$OMP end parallel end program hoge </code>
openmp.1245803356.txt.gz
· 最終更新: 2009/06/24 09:29 by
10.249.202.217
文書の表示
以前のリビジョン
[unknown link type]
文書の先頭へ