前言:
前两篇文章有介绍到,如何提升双重for循环的执行效率,也对不同的情况做了对比,今天来分享一种新的方式,比前两种方式都要好用的方法,利用windows自带的openmp库来进行并行计算。
原理:
使用openmp速度快的原理是,可以调动cpu的多核同时进行并行计算,cpu的利用率接近100%,这个是妥妥的用硬件来换时间的用法。
验证步骤:
分别来验证四种情况下的for循环的执行效率。
第一种情况:执行100000次,640*512次循环(循环体内每次加8来进行),查看耗时
第二种情况:执行100000次,640*512次循环(循环体内每次减8来进行),查看耗时
第三种情况:执行100000次,640*512次循环(循环体内直接每次加1执行),查看耗时
第四种情况,执行100000次,640*512次循环(采用openmp并行的方式),查看耗时
验证结果:
第一种情况耗时:1274858 us
第二种情况耗时:1315351 us
第三种情况耗时:9658787 us
第四种情况耗时:1170410 us
从以上耗时统计上来看,采用openmp进行并行计算的方式,耗时最短,只需要1.17秒就可以完成100000次的640*512的循环。
在开发中如何使用openmp
- 如果是vs开发的话,直接在“属性->C/C++->语言”中,配置OpenMp支持的选项勾选为“是(/openmp)”即可,在使用的时候,在需要进行并行计算的for循环的外边添加 #pragma omp parallel for即可,非常简单。
- 如果是使用QT开发,稍微有点不一样,这个是要配置.pro文件,配置项如下:
QMAKE_CXXFLAGS += /openmp
QMAKE_LFLAGS += -fopenmp
这两项配置完毕后,同样,在需要进行并行计算的for循环体外添加
#pragma omp parallel for即可。
总结:
对于双重for循环效率的提升,后续我还会继续探索新的方式,有好的建议或方法的友友们也可以留言,共同探讨,共同进步。