【发布时间】:2022-01-02 06:25:11
【问题描述】:
我目前正在尝试提高我的多线程 FFTW 实现的性能。在 fftw3 的文档中,我读到为了获得最佳性能,应该使用 fftw_malloc 函数来分配 DFT 的输入和输出数据。
由于我正在处理大小为 256*256*256 的大型 3D 数组,因此我必须在堆上创建它们
const unsigned int RES = 256;
std::complex<double>(*V)[RES][RES];
V = new std::complex<double>[RES][RES][RES];
在初始化之后,我根据
为 3D DFT 变换创建多线程(就地)fftw_plansint N_Threads = omp_get_max_threads();
fftw_init_threads();
fftw_plan_with_nthreads(N_Threads);
fftw_complex *input_V = reinterpret_cast<fftw_complex*>(opr.V);
fftw_plan FORWARD_V = fftw_plan_dft_3d(RES, RES, RES, input_V, input_V, FFTW_FORWARD, FFTW_MEASURE);
fftw_plan BACKWARD_V = fftw_plan_dft_3d(RES, RES, RES, input_V, input_V, FFTW_BACKWARD, FFTW_MEASURE);
我现在的问题是:如何改用fftw_malloc 创建这些计划?
在fftw3 documentation我只能找到
fftw_complex *in;
in = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N);
我理解为一维示例。我是否必须投影我的 3D 数组,或者在这种情况下不可以/不建议使用 fftw_malloc?
【问题讨论】: