我想做一个二维数组的一维 FFT(比如只沿着列)。我将 vs2010/C# 与 managedcuda 一起使用。
我遇到了一些问题:
如何制作二维 CudaDeviceVariable?我试过了:
int n1 = 10; int n2 = 2; int batch = 1; //SizeT test; CudaDeviceVariable<double>[,] datad; datad = new CudaDeviceVariable<double>[n1, n2];
但datad
不是一个CudaDeviceVariable
。它现在是一个普通的二维数组。所以我无法在设备中分配内存。喜欢:
double[,] data11 = new double[,] {{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 },{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }};
datad.CopyToDevice(data11);//Error??
这是一个错误,因为CopyToDevice
它不是System.Array
. 如果我做datad
一个n1*n2
CudaDeviceVariable
,错误仍然存在,因为CopyToDevice
作为double[]
输入参数,而不是[,].
上述方法适用于一维数组。
2.是否可以对大型一维阵列进行一维 FFT。例如,我从data11
. 然后在 10 个元素中执行 FFT?CudaFFTPlanMany
有一些选项,但我不是 100% 清楚如何使用它们或它们对我有什么用处。
如果我不清楚,请询问更多细节。非常感谢。
编辑:我得到了更多细节,问题仍然存在,但我制作了 1-D 数组data11
,然后分批执行了 2 批大小为 10 的 fft。它给了我想要的结果。语法是:
CudaFFTPlanMany planm;
planm = new CudaFFTPlanMany(1, n, 1,cufftType.D2Z);
干杯