2017-02-20 8 views
0

У меня есть цикл for, и я хочу распараллелить его с помощью OpenACC, если целевое оборудование - это NVIDIA или запускается серийно, когда целевым аппаратным обеспечением является AMD. Я попытался следующие:Правильное использование device_type в OpenACC

#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» правильно, но мы (ОПИ), все еще не хватает нескольких OpenACC функций, включая определение нескольких графиков цикла через «device_type» пункта , Текущие ограничения перечислены в разделе 4.4 примечаний к выпуску PGI: http://www.pgroup.com/doc/pgirn-x64.pdf

+0

О, потрясающе! Большое спасибо за ответ мой друг! – AstrOne

Смежные вопросы