Параметры для use_device() openACC

Разрешено ли передавать объекты вместо указателя на следующую директиву

прагма в соответствии с 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

2 ответа

Попробуйте "host_data use_device( Pn.P)", чтобы использовать адрес устройства "P".

Когда вы передаете "Pn.P" в качестве аргумента, вы получаете доступ к "Pn" на хосте, чтобы получить адрес "P". Следовательно, помещая "Pn" в область host_data, код использует адрес устройства, который, в свою очередь, вызывает segv.

Использование версии PGI 18.1 решает эту проблему

Другие вопросы по тегам