在写我们自己的光线追踪、路径追踪中,总是需要用到将循环并行运行这样的功能。目前在停停走走中,接触到了两个并行库,故写下这篇博客记录一下,方便以后的使用。
OpenMP
在一开始,我发现了OpenMP,并用他将我代码中追踪的那一部分代码并行化,理想提升应该是4倍(i7 6700k 4C8T)。
OpenMP是由OpenMP Architecture Review Board牵头提出的,并已被广泛接受,用于共享内存并行系统的多处理器程序设计的一套指导性编译处理方案(Compiler Directive)[1] 。OpenMP支持的编程语言包括C、C++和Fortran;而支持OpenMp的编译器包括Sun Compiler,GNU Compiler和Intel Compiler等。OpenMp提供了对并行算法的高层的抽象描述,程序员通过在源代码中加入专用的pragma来指明自己的意图,由此编译器可以自动将程序进行并行化,并在必要之处加入同步互斥以及通信。当选择忽略这些pragma,或者编译器不支持OpenMp时,程序又可退化为通常的程序(一般为串行),代码仍然可以正常运作,只是不能利用多线程来加速程序执行。
OpenMP的简单使用
//项目-属性- C/C++ - 语言 - OpenMP支持(是)
#include <omp.h>
...
#pragma o