1D FFT on second dimension with clFFT



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

使用一个 NxM 数组,其中 M 是内部维度(在内存中连续(,我想将 FFT 超过 N。我想我可以通过将步幅设置为 M 来实现这一点。然而,当 M 为 2 时,FFT 在 m=0 时符合预期,但对于 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;

感谢 clmath 论坛上的董廷兴回答:

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

总结

您可以一次对每个 1D 执行多个 1D。 或你做批处理 1D 同时具有许多1D。

这两种情况,您都需要小心地偏移输入缓冲区 和输出缓冲区,以确保它指向正确的地址。

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

最新更新