以前のリビジョンの文書です


OpenMPについて

  • 使い方は以下の文献を参考に
  • !$ use omp_lib を最初に宣言.!$とuseの間にはスペースが必要.
progaram hoge
  !$ use omp_lib
  !$ use another_module
  implicit none
...
end program hoge
  • 並列化したいところを!$OMP parallelと!$OMP end parallelではさむ.はさまれたところは複数のCPUで計算される.
  • !$OMP doと!$OMP singleが分かれば大体のことはできる.
  • 「!$につづけてスペース+命令文」とすると,openmpとしてコンパイルしたときだけその命令が実行される.
  • コンパイルの仕方は gfortran -openmp, ifort -opemmp, frt -KOMP.

注意点

  • !$の後にOMPが続く場合は!$OMPと続けて書く.!$の後にOMPが続かない場合はスペースを入れる.
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
  • defaultの後は(none)が無難?FIXME
  • doループの制御変数はいわゆる定義済み変数になるので共有属性節1)に記述する必要はない.書くとすればprivateかfirstprivateのいずれか.
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
  • !$OMPのついた文を改行するときは改行した文にも!$OMPが必要
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
1) sharedとかprivateとかfirstprivateとか
openmp.1245803304.txt.gz · 最終更新: 2009/06/24 09:28 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