【问题标题】:parameters for use_device() openACCuse_device() openACC 的参数
【发布时间】:2018-03-03 00:02:41
【问题描述】:

是否允许传递对象而不是指向以下指令的指针

pragma acc host_data use_device(myobject)

这里是代码,Pn 是对象,Pn.P 是指向存储数据的数组的指针

#pragma acc data pcopyin( rank,N )
{
#pragma acc host_data use_device( Pn )
    {


        cufftPlan1d( &plan, 1000 , CUFFT_Z2Z, 1 );

        cufftExecZ2Z( plan, (cufftDoubleComplex*)Pn.P, (cufftDoubleComplex *)Pn.P, CUFFT_FORWARD );

     
    }
}

运行给出 Seg Fault

【问题讨论】:

    标签: gpu openacc cufft


    【解决方案1】:

    尝试“host_data use_device(Pn.P)”,以便使用“P”的设备地址。

    当您将“Pn.P”作为参数传递时,您正在访问主机上的“Pn”以获取“P”的地址。因此,通过将“Pn”放在 host_data 区域中,代码正在使用设备地址,这反过来会导致 segv。

    【讨论】:

    • 我实际试过了,编译器不喜欢它,它给出了以下错误error: expected a ")" #pragma acc host_data use_device(Pn.P)
    • 您能否发布一个复制者或将一个发送到 PGI 客户服务 (trs@pgroup.com) 并让他们转发给我?
    • 当然,今天会做
    【解决方案2】:

    使用 PGI 18.1 版本解决了这个问题

    【讨论】:

      猜你喜欢
      • 2021-01-01
      • 2021-02-16
      • 2021-03-18
      • 2016-10-02
      • 2012-10-04
      • 1970-01-01
      • 1970-01-01
      • 2018-08-04
      • 1970-01-01
      相关资源
      最近更新 更多