Использование OpenACC для установки значения переменной в памяти устройства

Почему следующий код не позволяет мне установить var в 10 через функцию intfun?

#include <iostream>

void intfun(int * variable){
#pragma acc parallel deviceptr(variable) num_gangs(1) num_workers(1)
{
*variable = 10;
}
}

int main(){
int var;

#pragma acc enter data create(var)
#pragma acc host_data use_device(var)
{
intfun(&var);
}
#pragma acc exit data copyout(var)

std::cout << var << std::endl;
}

Компиляция:

pgcpp -acc main.cpp

Исполнение:

PGCC-S-0155-Compiler failed to translate accelerator region (see -Minfo messages): Unknown variable reference (main.cpp: 5)
PGCC/x86 Linux 14.9-0: compilation completed with severe errors

Как я могу получить intfun установить значение параметра int var на устройстве?

-3

Решение

Вы не предоставили компилятору достаточно информации, чтобы охватить использование *variable в intfun,

Кажется, работает следующее:

$ cat main7.cpp
#include <iostream>

void intfun(int * variable){
#pragma acc parallel copy(variable[:1])
{
*variable = 10;
}
}

int main(){
int var;

intfun(&var);

std::cout << var << std::endl;
}
$ pgcpp -acc -Minfo main7.cpp
intfun(int *):
5, Generating copy(variable[:1])
Accelerator kernel generated
Generating Tesla code
$ ./a.out
10
$

где я copy(variable[:1]), copyout(variable[:1]) будет работать так же, для этого конкретного примера.

2

Другие решения


По вопросам рекламы [email protected]