use_device()openACC的参数

时间:2018-02-22 20:34:29

标签: gpu openacc cufft

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

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 );


    }
}

runing给出Seg Fault

2 个答案:

答案 0 :(得分:0)

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

当你通过" Pn.P"作为一个论点,你正在访问" Pn"在主机上获取" P"的地址。因此,通过放置" Pn"在host_data区域中,代码使用设备地址,而设备地址又导致segv。

答案 1 :(得分:0)

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