cv::dft transform 是多线程的吗?

Is cv::dft transform multithreaded?

我需要提高 cv::dft 在多线程环境中的性能。我在 Core-i5 Intel 处理器上对 Windows 10 进行了简单测试:

这里我看到 CPU 没有完全加载(只有 50% 的使用率)。各个线程的负载均等,也远未达到 100%。为什么会这样,我该如何解决? DFT可以轻松复数吗?它是在 OpenCV 库中实现的吗?是否有特殊的构建标志来启用它(哪个)?

更新:运行 linux 上的这段代码给出了一些不同的结果,但也低于 100% 的利用率:

首先,cv::dft 的行为取决于 OpenCV 构建标志,例如,如果您设置 WITH_IPP,那么它将使用 Intel Primitives 来加速计算。 FFT 受内存限制,如果您只是启动更多线程,您很可能不会从这种并行性中获得显着好处,因为线程将等待彼此完成内存访问,我在 Linux 上都观察到了这一点和 Windows。为了获得更高的性能,您应该使用 FFTW3,它具有一些用于多线程模式的复杂算法(应该是带有特殊标志的 ./configure-d)。我观察到 8 个线程的速度提高了 7 倍。但 FFTW 只支付了商业友好许可证,为您的软件强加 GNU 许可证。我还没有找到任何其他可以以智能方式处理 FFT 并行性的开源组件。