3

假设我有一个 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) 

如果数据以列主要顺序存储,这将如何影响计划的创建

4

1 回答 1

3

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

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

这里x指的是第一维,y指的是第二维,指的z是第三维。在您的情况下,您可以按原样使用它们而不会出现任何问题。

正向和反向的所有参数都相同,除了typeCUFFT_R2C变为CUFFT_C2R

如果你要使用cufftplanMany,你需要做这样的事情。

int dims[] = {z, y, x}; // reversed order
cufftPlanMany(&plan, 3, dims, NULL, 1, 0, NULL, 1, 0, type, batch);

cufftPlanMany如果您正在执行批处理操作,或者如果您使用非连续数据,则很有用。

于 2013-10-08T14:42:59.057 回答