gpt4 book ai didi

c++ - Fftw3 库和计划重用

转载 作者:行者123 更新时间:2023-11-28 05:46:11 25 4
gpt4 key购买 nike

我将在我非常确定的任务中使用 fftw3 库。

我有一个帧大小可变的重负载数据包流,它是这样产生的:

while(thereIsStillData){
copyDataToInputArray();
createFFTWPlan();
performExecution();
destroyPlan();
}

由于创建计划相当昂贵,我想将我的代码修改成这样:

while(thereIsStillData){
if(inputArraySizeDiffers()) destroyOldAndCreateNewPlan();
copyDataToInputArray(); // e.g. `memcpy` or `std::copy`;
performExecution();
}

我可以这样做吗?我的意思是,计划是否包含一些基于数据的重要信息,例如为一个大小为 N 的数组创建的计划, 执行时将为相同大小的其他数组给出不正确的结果 N .

最佳答案

fftw_execute() 函数不会修改提供给它的计划,并且可以使用同一计划多次调用。但是请注意,该计划包含指向输入和输出数组的指针,因此如果 copyDataToInputArray() 涉及创建不同的输入(或输出)数组,那么您以后不能在 中使用旧计划fftw_execute() 转换新数据。

但是,FFTW 确实有一组“New-array Execute Functions”可以在这里提供帮助,假设新数组满足一些与旧数组相关的额外相似性标准(有关详细信息,请参阅链接文档)。

文档建议:

If you are tempted to use the new-array execute interface because you want to transform a known bunch of arrays of the same size, you should probably go use the advanced interface instead

但那是在谈论同时转换所有在内存中并以规则方式排列的多个数组。

另外请注意,如果您的可变帧大小不是太多可变的——也就是说,如果它始终是相对较少的选择之一——那么您可以考虑保留一个单独的在内存中为每个帧大小进行规划,而不是每次一帧的大小与前一帧的大小不同时都重新计算计划。

关于c++ - Fftw3 库和计划重用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36157465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com