Я пытаюсь использовать вложенную функцию OpenACC для активного динамического параллелизма моей карты gpu. У меня Tesla 40c, а мой компилятор OpenACC - это версия PGI 15.7.Вложенные директивы в OpenACC
Мой код настолько прост. Когда я пытаюсь скомпилировать следующий код компилятора возвращает мне эти сообщения
PGCC-S-0155-Illegal context for pragma: acc parallel loop (test.cpp: 158)
PGCC/x86 Linux 15.7-0: compilation completed with severe errors
Моя структура кода:
#pragma acc parallel loop
for(i = 0; i < N; i++)
{
// <<computation>>
int ss = A[tid].start;
int ee = A[tid].end;
#pragma acc parallel loop
for(j = ss; j< (ee + ss); j++)
{
// <<computation>>
}
Я также пытался изменить свой код, чтобы использовать обычные директивы. Но я не мог собрать снова
#pragma acc routine workers
foo(...)
{
#pragma acc parallel loop
for(j = ss; j< (ee + ss); j++)
{
// <<computation>>
}
}
#pragma acc parallel loop
for(i = 0; i < N; i++)
{
// <<computation>>
int ss = A[tid].start;
int ee = A[tid].end;
foo(...);
}
Я попытался, конечно, только с рутиной (далее, рабочая, банда) без внутренней параллельной петли директивы. Это был компилятор, но динамический параллелизм не был активирован.
37, Generating acc routine worker
Generating Tesla code
42, #pragma acc loop vector, worker /* threadIdx.x threadIdx.y */
Loop is parallelizable
Как я могу использовать динамический параллелизм в OpenACC?
Не' #pragma согласно рутине workers' неправильного синтаксису? – talonmies