差分

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

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

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
openmp [2009/06/24 09:18]
10.249.202.217
openmp [2009/12/24 22:29]
isakari
ライン 2: ライン 2:
  
   * 使い方は以下の文献を参考に   * 使い方は以下の文献を参考に
-    * [[インテル® Fortran コンパイラー OpenMP* 活用ガイド|download.intel.com/​jp/​business/​japan/​pdf/​527J-002.pdf]が分かりやすい. +    * [[http://​download.intel.com/​jp/​business/​japan/​pdf/​527J-002.pdf|インテル® Fortran コンパイラー OpenMP* 活用ガイド]]が分かりやすい. 
-    * OpenMPによる並列プログラミングと数値計算法牛島省(著)を参考に +    * OpenMPによる並列プログラミングと数値計算法牛島省(著)も良い
-  * !$ use omp_lib を最初に宣言 +
-<code fortran>​ +
-progaram hoge+
  
 +===== コンパイル方法 =====
 +  * gfortran -openmp file.f90
 +  * ifort -openmp file.f90
 +  * frt -KOMP -Am file.f90 ​ (thinの場合)
  
 +
 +===== 基本的なこと =====
 +
 +  * !$ 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.
  
  ===== 注意点 =====  ===== 注意点 =====
ライン 56: ライン 73:
 end program hoge end program hoge
 </​code>​ </​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>​
 +
 + ===== threadprivate =====
 +moduleなどで、グローバル変数を定義している場合に、thread間ではその変数を共有しないで欲しいときに。
 +<code fortran>
 +module common
 +  implicit none
 +  real(8) a,b,c
 +!$OMP threadprivate(a,​b,​c)
 +end module common
 +</​code>​
 +
openmp.txt · 最終更新: 2011/02/21 15:58 by saito
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