在 OpenACC 中正确使用 device_type
Correct use of device_type in OpenACC
我有一个 for
循环,如果目标硬件是 NVIDIA,我想将它与 OpenACC 并行化,或者当目标硬件是 AMD 时,它是串行的 运行。我尝试了以下方法:
#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
您使用的 "device_type" 正确,但我们 (PGI) 仍然缺少一些 OpenACC 功能,包括通过 "device_type" 子句定义多个循环计划。当前限制列在 PGI 发行说明的第 4.4 节中:http://www.pgroup.com/doc/pgirn-x64.pdf
我有一个 for
循环,如果目标硬件是 NVIDIA,我想将它与 OpenACC 并行化,或者当目标硬件是 AMD 时,它是串行的 运行。我尝试了以下方法:
#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
您使用的 "device_type" 正确,但我们 (PGI) 仍然缺少一些 OpenACC 功能,包括通过 "device_type" 子句定义多个循环计划。当前限制列在 PGI 发行说明的第 4.4 节中:http://www.pgroup.com/doc/pgirn-x64.pdf