你如何使用CUFFT的批处理模式?

时间:2011-03-08 15:32:04

标签: c++ cuda fft fftw

我试图弄清楚如何使用CUFFT库中提供的批处理模式。

我基本上有一个5300像素宽,3500高的图像。目前这意味着我使用FFTW在这些5300个元素上运行3500个1D FFT。

在批处理模式下运行CUFFT库这是一个很好的候选问题吗?如何设置数据来解决这个问题?

由于

2 个答案:

答案 0 :(得分:3)

是的,您可以使用批处理模式。

要使用批处理模式,应连续存储5300个元素。

这意味着相邻批次之间的距离为5300。 你可以这样:

..........
cufftComplex *host;
cufftComplex *device;
CudaMallocHost((void **)&host,sizeof(cufftComplex)*5300*3500);
CudaMalloc((void **)&devcie,sizeof(cufftComplex)*5300*3500);
//here add the elements,like this:
//host[0-5299] the first batch, host[5300-10599] the second batch ,and up to the 3500th batch.
CudaMemcpy(device,host,sizeof(cufftComplex)*5300*3500,......);
CufftPlan1d(&device,5300,type,3500);
CufftExecC2C(......);
......

有关详细信息,请参阅CUFFT手册。

答案 1 :(得分:2)

是的,这是一个很好的问题。

你应该采取以下方式:

  1. 在gpu上创建一个大小为:sizeof(cufftComplex)* 5300 * 3500的数组(这里我假设你有复杂的输入数据)
  2. 将您的数据复制到gpu
  3. 使用cufftPlan1d()
  4. 创建计划
  5. 使用cufftExecC2C()
  6. 执行计划

    有关更多信息,您必须查看CUFFT手册