代码之家  ›  专栏  ›  技术社区  ›  Stepan Yakovenko

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

  •  -1
  • Stepan Yakovenko  · 技术社区  · 7 年前

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

    enter image description here

    这里我看到CPU没有完全加载(只有50%的使用率)。单个线程的负载是相等的,而且远不是100%。这是为什么,我该怎么解决?DFT可以很容易地多元化吗?它是在OpenCV库中实现的吗?是否有特殊的生成标志来启用它(哪个)?

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

    enter image description here

    0 回复  |  直到 7 年前
        1
  •  0
  •   Stepan Yakovenko    7 年前

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