并行程序:如何找到瓶颈(CPU绑定线程)

时间:2014-05-20 20:18:37

标签: c++ multithreading parallel-processing openmp

我使用OpenMP编写了一个并行程序。它使用两个线程,因为我的笔记本电脑是双核心,并且线程执行大量矩阵操作,因此它们受CPU限制。线程之间没有数据共享。该程序的单个实例运行得非常快。但是,当我同时运行同一程序的多个实例时,性能会下降。这是一个情节:running time vs number of parallel instances

单个实例(两个线程)的运行时间为0.78秒。两个实例(总共四个线程)的运行时间是2.06,这是0.78的两倍多。之后,运行时间与实例数(线程数)成比例增加。

以下是多个并行运行的实例之一的时序配置文件:

profile

有人可以提供有关可能发生的事情的见解吗?该配置文件显示OpenMP正在消耗50%的时间。这是什么意思?

1 个答案:

答案 0 :(得分:3)

与@Bort所说的类似,你使应用程序成为多线程(两个线程),因为你有两个核心。

这意味着当只有一个程序实例正在运行时(理想情况下)它可以使用整个CPU。

但是,如果正在运行两个应用程序实例,则没有更多可用资源。他们每人需要两倍的时间。对于更多实例也是如此。

如果不增加每个实例的可用内核数量(即每个实例保持2个,而不是缩小百分比),则无法解决此问题。