我已经使用OpenMP编写了一个并行程序。它使用两个线程,因为我的笔记本电脑是双核心的,线程做了很多矩阵操作,所以它们是CPU绑定的。线程间没有数据共享。程序的单个实例运行得非常快。但是当我同时运行同一程序的多个实例时,性能下降。这是一个阴谋:并行程序:如何找到瓶颈(CPU绑定线程)
单个实例(两个线程)的运行时间为0.78秒。两个实例(总共四个线程)的运行时间是2.06,是0.78的两倍多。之后,运行时间与实例数(线程数)成比例地增加。
下面是其中一个实例的时间配置文件时,多个平行运行:
有人能提出见解,有什么可以怎么回事?该配置文件显示,OpenMP占用了50%的时间。那是什么意思?
没有任何代码只能从水晶球猜测。 –
您观察到的是两个不同进程之间的上下文切换,每个进程都使用两个cpus上的两个线程运行。这种缩放与您的应用程序中的瓶颈无关。 – Bort
Yout通常不能说明矩阵操作是CPU绑定的。实际上很少。如果做得对,矩阵乘法是受CPU限制的(就像LU和Cholesky因式分解一样),但其他很多不是。 –