使用OpenACC设置设备内存中变量的值
Using OpenACC to set the value of a variable in device memory
为什么下面的代码不允许我通过函数intfun
将var
设置为10
?
#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
的值?
您没有向编译器提供足够的信息来确定*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])
也可以工作。
相关文章:
- 当vector是tje全局变量时,c++中vector的内存管理
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 多个"常量引用"变量可以共享同一个内存吗?
- 为什么内存屏障依赖于变量?
- 在内存不足之前,我可以声明多少个 const 变量?
- C++具有模板成员变量的类. 和参数内存输出
- 为什么同一个变量的内存地址不同?
- 分配具有 2D 向量大小的变量的内存
- C++强制变量到一个固定的内存位置
- 循环中的变量被设置为下一个数组的元素始终具有相同的内存地址?
- 释放指向保留嵌套变量内存地址的结构的指针
- C++非虚拟类成员变量内存布局?
- 在多个继承的情况下,C 编译器如何处理成员变量内存偏移
- C 全局对象变量内存释放
- C++健全性检查失败:几个变量/内存位置被更改为垃圾,即使我从未访问过它们
- gsoap 和 qt 转换变量内存句柄
- C++指针变量内存泄漏澄清
- 声明变量(内存中的精确位置)
- C++中的全局变量内存分配
- C++将常量引用分配给实例变量(内存问题?)