在3d fft的情况下,哪种正确的袖口计划配置方式?

时间:2013-10-08 13:48:20

标签: cuda nvidia

假设我有一个3维(x = 256 + 2,y = 256,z = 128)数组,我想用cuFFT计算FFT(正向和反向)。我有一个fftw兼容的数据布局,让我们说填充是在x方向,如上面的大小(+2)所示。我的计划应该如何?

//forward 
cufftPlan3d(&plan, z, y, x, CUFFT_R2C) 

//or
cufftPlan3d(&plan, x, y, z, CUFFT_R2C) 

并反过来?

//Inverse 
cufftPlan3d(&plan, x, y, z, CUFFT_C2R) 

//or
cufftPlan3d(&plan, z, y, x, CUFFT_C2R) 

如果数据存储在专栏中,那么这将如何影响计划创建

1 个答案:

答案 0 :(得分:3)

如果您使用cufftPlan3d,正确的方法是使用

cufftplan3d(&plan, x, y, z, type);

此处x表示第一维,y表示第二维,z表示第三维。 在您的情况下,您可以毫无问题地使用它们。

正向和反向的所有参数都相同,type除外,CUFFT_R2C更改为CUFFT_C2R

如果您要使用cufftplanMany,则需要执行以下操作。

int dims[] = {z, y, x}; // reversed order
cufftPlanMany(&plan, 3, dims, NULL, 1, 0, NULL, 1, 0, type, batch);
如果您正在进行批量操作,或者使用非连续数据,

cufftPlanMany非常有用。