使用openmp为循环逻辑提速

使用OpenMP为循环逻辑提速

什么是OpenMP?

OpenMP是由OpenMP Architecture Review Board牵头提出的,并已被广泛接受的,用于共享内存并行系统的多线程程序设计的一套编译指令 (Compiler Directive)。OpenMP支持的编程语言包括C语言、C++和Fortran;而支持OpenMP的编译器包括Sun Compiler,GNU Compiler和Intel Compiler等。OpenMP提供了对并行算法的高层的抽象描述,程序员通过在源代码中加入专用的pragma来指明自己的意图,由此编译器可以自动将程序进行并行化,并在必要之处加入同步互斥以及通信。当选择忽略这些pragma,或者编译器不支持OpenMP 时,程序又可退化为通常的程序(一般为串行),代码仍然可以正常运作,只是不能利用多线程来加速程序执行。

什么时候使用OpenMP?

当循环逻辑较为简单,资源互斥和共享较少时,最适合用openmp。

怎么使用OpenMP进行循环并行加速?

只需要在for循环前加一句#pragma omp parallel for

#pragma omp parallel for
for(int i = 0; i < templates.size(); i++) 
{
	cout << i << endl;
}

这样原本串行执行的循环语句,就会被分配若干个线程同时并行执行。

同时,在编译前,也要开启编译选项。以VSCode的tasks.json为例,需要将arg的"-g"改为"-fopenmp",否则编译的程序还是不会开启加速的。

更多

更多有关OpenMP的用法参见这一篇博客。
https://blog.csdn.net/rangfei/article/details/109021953

你可能感兴趣的:(C++,c++)