简介:
- OpenMp是并已被广泛接受的,用于共享内存并行系统的多处理器程序设计的一套指导性的编译处理方案。
- OpenMP支持的编程语言包括C语言、C++和Fortran;
- OpenMp提供了对并行算法的高层的抽象描述,程序员通过在源代码中加入专用的pragma来指明自己的意图,由此编译器可以自动将程序进行并行化,并在必要之处加入同步互斥以及通信。当选择忽略这些pragma,或者编译器不支持OpenMp时,程序又可退化为通常的程序(一般为串行),代码仍然可以正常运作,只是不能利用多线程来加速程序执行。
openMP并行化for循环(只需三步)
vs等编译器中开启openMP支持
将 Project 的Properties中C/C++里Language的OpenMP Support开启(参数为 /openmp)
包含头文件
#include
<omp.h>
在需要并行化的
for
循环前加入 pragma指令#
pragma omp parallel for
这就三步就够了,是不是非常简单啊,赶快用起来吧。
使用技巧
- 不是给所有的for都加并行化就会变更快,如果for的次数不是很多,就没必要使用并行了,反而会变慢
- 多层for循环的情况
#pragma omp parallel for是放在内层还是外层要视情况而定,绝对不能一概而论。
- 如果内层的计算复杂度很高,比如循环次数多,每次循环计算量也比较大,放在内层可能效果要大大地好于外层。
- 如果内层访问的内存比较多, #pragma omp parallel for放在外层的话,可能导致cache命中率大大降低,计算速度可能会是几十倍的下降。