什么时候应该使用OpenMP库

When should the OpenMP library be used?

本文关键字:OpenMP 什么时候      更新时间:2023-10-16

据我所知,OpenMP是在c++代码中实现多线程的标准,也是一个库。

Visual c++已经为Windows提供了线程api, UNIX也有POSIX线程。我不明白为什么需要它,或者在哪种情况下适用于使用OpenMP。

编辑:是否OpenMP也提高了性能,与使用CreateThread或其他POSIX函数相比(假设类似的代码被并行化)?

系统线程api(如POSIX线程)要求您手动执行大量工作(设置线程、在线程之间划分工作、在线程完成时进行同步、关闭线程等)。大量的代码膨胀掩盖了您真正想要做的事情。而且容易出错。和乏味。平台相关。

OpenMP为您完成了所有这些。在我看来,它最适合数据并行性;在许多情况下,它就像在for循环之前放一个#pragma omp指令一样简单,并且该循环将自动多线程。但它也可以用于任务并行性

OpenMP并没有提高性能,因为总是有可能编写至少与OpenMP版本一样出色的手动线程代码。但通常情况下,OpenMP可以让您获得90%以上的理论最佳性能,只需5分钟的编码工作(假设您首先以线程友好的方式编写循环)。

我推荐阅读维基百科的文章来获得一些好的例子。

例如,当您尝试编写可移植代码时。OpenMP在windows和unix系统上都可以工作。而且,在大多数情况下,它比操作线程要容易得多。