私はAbsoft Fortranに精通していませんが、自動並列化に関して素晴らしい仕事をするコンパイラをまだ見つけていないことがわかります。それはとにかく難しい作業です。あなたが自分でそれを行うなら、達成できるものにも近いコードを並列化できるコンパイラを待っていません。私は、OpenMP(またはあなたが選んだ並列化ライブラリ)を使ってコードを並列化することを強くお勧めします。それは困難ではないし、特にあなたのコードの "ボトルネック"をパラレル化する場合には、本当に効果的です。私はprint
ステートメントを追加
program test1
use omp_lib
implicit none
integer :: q, CAPQ, ingrid(1:6), outgrid(1:6)
ingrid=(/1,2,3,4,5,6/)
outgrid=0
CAPQ=6
!$omp parallel do private(q)
do q=1,CAPQ
outgrid(q)=ingrid(q)
print "(2(a,i0))","q=",q," processed by thread ",omp_get_thread_num()
end do
!$omp end parallel do
end program test1
注意実行が実際に並列にDOループを実行していることを確認するために、この特定の例では、コードを容易paralellizedすることができます。コンパイルし、2つの!#omp
ステートメントの有無を指定してサンプルをコンパイルして実行してください。並列化を有効にすると、並列化が無効になっている場合、
q=6 processed by thread 5
q=4 processed by thread 3
q=5 processed by thread 4
q=2 processed by thread 1
q=3 processed by thread 2
q=1 processed by thread 0
などのようになり、スレッドはすべてゼロになるはずです。
上記の例はgfortranにあり、-fopenmpディレクティブでコンパイルする必要があります。 使用するコンパイラによっては、use omp_lib
の文を同様のものに置き換える必要があり、コンパイラ指令もわずかに異なる場合があります。私がオンラインで見つけたAbsoft Pro Fortranユーザーズガイドによれば、コンパイラ指令は-openmpです。ユーザーズガイドには、 "積極的なOpenMP"並列化のオプションも記載されています。
出典
2017-01-19 11:36:57
Pap
コンパイラは、誤った共有が発生するように、128バイト以内に格納されているスレッドとの並列化を避ける必要があります。 – tim18
は、並列化を禁止しないように、回避する方法がありますか? –
OpenMPへの参照を削除しました。OpenMPは自動並列化をカバーしていないため、absoft proが自動並列化のためにOpenMPを使用しているという参照が見つかりません。本当にOpenMPに関係していると思うかどうかを明確にしてください。 – Zulan