我在程序中使用FFTW3在2D数组(大致3k x 3k,复杂数据类型)上做了一些工作。FFTW性能变化
该方案的最激烈的部分基本上做到这一点:
Break the array up into N threads, each thread has the following
loop
{
Fill one of three buffers depending on what I'm doing
FFT forward on that buffer
Do some work
FFT backward on that buffer
Do some work
}
如果在分析我的代码中,我认识到,我花了执行FFTW的时间或者是约5秒,8秒,或12秒(取或半秒,但通常是这3个数字中的1个),具体取决于运行。
对于每个线程我与_align_malloc(x, 16)
分配缓冲区(虽然fftw_malloc
给了我同样的结果),然后在使用FFTW_PATIENT
程序开始创建我6个计划(一个向前,一个向后,为每个缓冲区)只有一次。
为什么我的结果会因运行而异?
“约3k x 3k”尺寸是否一致? 2的功率是最快的,非功率2的速度很大程度上取决于尺寸是否可以分解为小素数。 – 2015-02-06 23:29:57
对不起,我应该指定,我分配的缓冲区在我做FFT的时候实际上是256x256或512x512,我一次只处理更大的矢量。 – RyanP 2015-02-07 00:07:51
任何想法或澄清需要? – RyanP 2015-02-10 20:51:27