为什么以下代码不允许我通过函数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
的值?
答案 0 :(得分:2)
您尚未向编译器提供足够的信息来确定*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])
也适用于此特定示例。