差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

Both sides previous revision Previous revision
Next revision
Previous revision
openmp [2009/06/24 14:31]
10.249.202.217
openmp [2011/02/21 15:58] (現在)
saito
ライン 1: ライン 1:
-====== OpenMPについて ====== +[[fortran: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>​ +
- +
-  * doループが入れ子になっている場合,外側で回すのが一般的らしいFIXME.ただし,MPIとのハイブリッドの場合は外をMPI,内をOpenMPとするのが良いらしいFIXME. +
-<code fortran>​ +
-!$OMP do  +
- do i=1,n +
-   do j=1,m +
-   end do +
- end do +
- !$OMP end do +
-</​code>​+
openmp.1245821515.txt.gz · 最終更新: 2009/06/24 14:31 by 10.249.202.217
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0