首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >共享变量和OpenACC

共享变量和OpenACC
EN

Stack Overflow用户
提问于 2017-03-03 06:33:48
回答 1查看 588关注 0票数 0

在OpenMP中,可以通过以下方式在循环中使用共享变量

代码语言:javascript
复制
#pragma omp parallel for shared(foo) private(bar)

在OpenACC中,我们有一个private子句,但没有shared子句。另一方面,还有copycopyincopyout等数据子句。

有时,我们使用加速器,它们有自己的私有内存,但也可以访问公共内存。

在这种情况下,我们可能希望加速器避免将数据复制到它自己的私有内存中,而是在公共内存中的实例上操作。

我们如何告诉OpenACC不要复制数据呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-04 00:43:39

请注意,默认情况下,数组是共享的。

" create“data子句将在设备上创建数据,但不执行复制。

如果您想使用已经在设备上创建的数据,例如通过调用cudaMalloc或acc_malloc,您可以使用"deviceptr“data子句告诉编译器在设备代码中使用指针的地址,而不是使用主机地址在当前表中查找设备指针。

如果您想关联设备变量和主机变量,可以使用acc_map_data接口调用。

听起来你有更大的内存池,然后你想要重用它。在这种情况下,您可以使用OpenACC data子句、cudaMalloc或acc_malloc创建内存池。如果使用data子句,则调用"acc_deviceptr“来获取设备指针地址。接下来,您可以使用"acc_map_data“将主机指针与设备指针关联起来。请注意,映射的数据可以是较大设备池的子集,您可以映射到偏移量,即"devptr+offset“。

有关使用"acc_map_data“的示例,请参阅:https://github.com/rmfarber/ParallelProgrammingWithOpenACC/blob/master/Chapter05/acc_map.c

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42567288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档