2017-02-20 84 views
0

我有一個for循環,如果目標硬件是NVIDIA,我希望將其與OpenACC並行化,或者在目標硬件是AMD時串行運行它。我試過如下:正確使用OpenACC中的device_type

#pragma acc loop \ 
    device_type(tesla) parallel \ 
    device_type(radeon) seq 
for (int z = 0; z < size_z; ++z) 
{ 
    // do stuff... 
} 

編譯時:pgc++ -std=c++11 -O4 -ta=tesla -Minfo:accel main.cpp

但在並行報告中,我得到:<line_number>, #pragma acc loop seq

看來,編譯器只考慮到該指令的最後一行。任何想法爲什麼發生這種情況?

運行pgc++ --version給出如下:

pgc++ 16.10-0 64-bit target on x86-64 Linux -tp sandybridge

回答

1

您使用「DEVICE_TYPE」正確的,但我們(PGI)還缺幾個OpenACC的功能,包括通過「DEVICE_TYPE」條款定義多個循環時間表。目前的侷限性在PGI版本說明的第4.4節中列出:http://www.pgroup.com/doc/pgirn-x64.pdf

+0

哦太棒了!非常感謝我的朋友的回覆! – AstrOne