我不知道是否可以設置每個部分的線程數在OpenMP並行區域,即:在openmp中設置每個節的線程數?
real*8 :: x
real*4 :: y
integer*8 :: ii
integer*4 ** jj
x = 0.0d0
y = 0.0
!$OMP PARALLEL
!$OMP SECTIONS
!$OMP SECTION NUM_THREADS(3)
do ii=1,100000000000
x=x+(cos(sin(tan(ii*1.0d0)))**(x/ii)
end do
!$OMP SECTION NUM_THREADS(1)
do jj=1,10000
x=x+exp(jj*0.001)
end do
!$OMP END SECTIONS
!$OMP END PARALLEL
此代碼不能與ifort 16.0的工作,但我只是不知道是否有別的一個可以做..?
編輯:當我嘗試設置每節的線程數時,出現錯誤(編譯期間)...我想爲每節指定不同數量的線程。
編輯2:錯誤消息= 2×
錯誤#5082:語法錯誤,實測 'NUM_THREADS' 期待的 「< 」END-OF-STATEMENT「>」 一個時;
在兩個!OMP SECTION NUM_THREADS(i)
聲明
赦免倉促令狀..
這是什麼意思*「這段代碼不起作用」*?它什麼也沒說。錯誤的結果?他們看起來像什麼?他們爲什麼錯了?一些錯誤消息?他們看起來像什麼?你的編譯命令是怎樣的?它與標題有什麼共同之處(設置線程數量)? –
@Vladimir F - 感謝您的快速回復 - 我希望我的編輯更清晰 –
這段代碼試圖做什麼?它在'x'上具有競爭條件,而「章節」的要點是並行執行這兩個部分,這看起來也是錯誤的。你不是隻想要一個並行的,那麼兩個omp for循環每個都有一個還原子句? (雖然第一個循環有一個循環依賴,所以不容易並行化!) –