【问题标题】:what does #pragma acc host_data do?#pragma acc host_data 有什么作用?
【发布时间】:2018-05-07 13:26:36
【问题描述】:

构造是什么(p在gpu上)

#pragma acc host_data use_device(p)
{...}

确实如此? “host_data 构造使设备数据的地址可用 在主机上。”(OpenAcc API)。use_device -“指示编译器使用列表中任何条目的设备地址,例如,在将变量传递给过程时”(OpenAcc编程和最佳实践指南)。这是否意味着,例如,如果我有变量

int A=1;
int B=2;
#pragma acc declare device_resident(A,B)
...

在设备上,我可以从主机写

#pragma acc host_data use_device(A,B)
{ 
  memcpy(&A,&B,sizeof(int));
}

我想这是错误的。请给我解释一下。

【问题讨论】:

    标签: openacc


    【解决方案1】:

    当您需要获取在主机代码中使用的变量的设备地址时,使用 OpenACC“host_data”指令。当您想传入变量的设备地址时,它主要用于与 CUDA 或 CUDA 感知 MPI 的互操作性。

    在您的示例中,这很可能会导致错误,因为将设备地址传递给系统“memcpy”会导致段错误。虽然如果您将“memcpy”更改为“cudaMemcpy”或其他需要传入设备地址的例程,那就没问题了。

    这篇博文可能会有所帮助:https://devblogs.nvidia.com/parallelforall/3-versatile-openacc-interoperability-techniques/

    【讨论】:

      猜你喜欢
      • 2021-02-16
      • 2021-03-18
      • 2020-05-14
      • 1970-01-01
      • 1970-01-01
      • 2010-10-21
      • 1970-01-01
      • 1970-01-01
      • 2020-11-11
      相关资源
      最近更新 更多