使用clFFT在第二维上进行1D FFT

时间:2018-01-12 00:37:38

标签: opencl

我正在尝试使用clFFT库在2D数组的外部维度上执行复杂的1D FFT。

使用NxM的数组,其中M是内部维度(在内存中是连续的),我想将FFT取为N.我认为我可以通过将步幅设置为M来实现这一点。但是,当M为2时,对于m = 0,FFT是预期的,但对于m = 1,这是未知的。任何想法都将不胜感激。

以下是我对计划设置的看法:

  cl_context context;
  dev->get_gr_opencl_interface()->get_platform().opencl_context(context);

  size_t fft_length_size_t[] = {fft_length}; // N
  err = clfftCreateDefaultPlan(&m_plan_handle, context, CLFFT_1D, fft_length_size_t);
  if(err != CL_SUCCESS)
  {
    std::cout << "clFFT clfftCreateDefaultPlan Failed." << std::endl;
  }


  size_t fft_stride_size_t[] = {fft_stride}; // M

  err = clfftSetPlanPrecision(m_plan_handle, CLFFT_SINGLE);
  err |= clfftSetLayout(m_plan_handle, CLFFT_COMPLEX_INTERLEAVED, CLFFT_COMPLEX_INTERLEAVED);
  err |= clfftSetResultLocation(m_plan_handle, CLFFT_OUTOFPLACE);
  err |= clfftSetPlanBatchSize(m_plan_handle, batch_size); // Currently 1
  err |= clfftSetPlanInStride(m_plan_handle, CLFFT_1D, fft_stride_size_t);
  err |= clfftSetPlanOutStride(m_plan_handle, CLFFT_1D, fft_stride_size_t);

  if(err != CL_SUCCESS)
  {
    std::cout << "clFFT Plan Configuration Failed." << std::endl;

1 个答案:

答案 0 :(得分:0)

感谢tingxing dong在clmath论坛上回答:

https://groups.google.com/forum/#!topic/clmath/hWppfghKvN4

<强>摘要

  

您每次为每个1D执行多个1D。或者你做了1D批量生产   与许多1D同时。

     

这两种情况都需要仔细抵消输入缓冲区   和输出缓冲区,以确保它指向正确的地址。

当我将步幅(clfftSetPlanInStride和clfftSetPlanOutStride),批量大小(clfftSetPlanBatchSize)设置为M,并将距离(clfftSetPlanDistance)设置为1时,它可以正常工作。