2016-04-21 36 views
2

我有一個非常簡單的代碼片段:使用OpenACC循環,每個線程是否獲得標量的私有副本?

$acc data copy(a(:),b(:)) 
$acc kernels 
$acc loop vector 
do i=1,1000 
    x = a(i) 
    b(i) = sqrt(x) 
enddo 
$acc end kernels 
$acc end data 

和當然,我可以x容易地分配,但是這是一個例子,x是我的問題,這是點:在這裏所做的每一個線程得到它自己的副本x自動,還是我應該聲明它是私人的,以防止各種線程破壞它?

回答

3

在OpenACC中,默認情況下標量是第一私有的,所以通常不需要將它們放在「私有」子句中。只有當你真正需要使用「private」子句時,纔是數組或者標量「逃避」了計算區域,比如通過引用傳遞給設備例程,或者它的值在計算區域之外使用。

+0

非常感謝!順便說一句,你知道關於OpenACC的任何好文檔嗎? –

+1

http://www.openacc.org/是最好的開始。主頁底部有一個「資源」部分,其中有幾個有用的鏈接。 「OpenACC編程和最佳實踐指南」是一個很好的開始。 –

相關問題