我正在尝试使用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;
答案 0 :(得分:0)
感谢tingxing dong在clmath论坛上回答:
https://groups.google.com/forum/#!topic/clmath/hWppfghKvN4
<强>摘要强>
您每次为每个1D执行多个1D。或者你做了1D批量生产 与许多1D同时。
这两种情况都需要仔细抵消输入缓冲区 和输出缓冲区,以确保它指向正确的地址。
当我将步幅(clfftSetPlanInStride和clfftSetPlanOutStride),批量大小(clfftSetPlanBatchSize)设置为M,并将距离(clfftSetPlanDistance)设置为1时,它可以正常工作。