应该何时使用OpenMP库?

时间:2011-04-08 19:20:49

标签: c++ openmp

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

Visual C ++已经有Windows的线程API,UNIX有POSIX线程。我没有说明为什么需要它,或者在哪种情况下适用于OpenMP。

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

2 个答案:

答案 0 :(得分:8)

系统线程API(例如POSIX线程)要求您手动完成大量工作(设置线程,在线程之间拆分工作,在完成时同步,拆除线程等) 。很多代码膨胀,模糊了你真正想要做的事情。而且容易出错。又乏味。与平台有关。

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

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

我建议您阅读Wikipedia article以获取一些好的例子。

答案 1 :(得分:3)

例如,当您尝试使用可移植代码时。 OpenMP适用于Windows和Unix系统。 而且,它大部分时间比操作线程更容易使用。