【发布时间】:2020-08-08 17:28:03
【问题描述】:
我是 OpenACC 的新手。我有一个使用#pragma acc data 指令与结构化数据传输相关的查询。根据网站https://docs.computecanada.ca/wiki/OpenACC_Tutorial_-_Data_movement
data 指令定义了一个代码区域,其中 GPU 数组保留在 GPU 上并在该区域中的所有内核之间共享。
我明白copy 子句的用法。我想知道这个指令是否可以在没有任何子句的情况下使用?
我阅读了 OpenACC 2.7 规范。这部分不清楚子句是否强制。我的理解是,如果在未明确指定任何数据的情况下定义数据区域,则该区域内使用的所有数据将在整个数据区域内隐式保留在 GPU 上。
#pragma acc data
{
#pragma acc kernels
// Kernel 1
#pragma acc kernels
// Kernel 2
}
这意味着,对于上述代码,内核 1 和内核 2 中使用的所有数据将在数据区域的整个持续时间内保留在 GPU 上。
如果我错了,请纠正我。
提前谢谢你。
【问题讨论】:
标签: gpu data-transfer openacc