我已經使用OpenMP編寫了一個並行程序。它使用兩個線程,因爲我的筆記本電腦是雙核心的,線程做了很多矩陣操作,所以它們是CPU綁定的。線程間沒有數據共享。程序的單個實例運行得非常快。但是當我同時運行同一程序的多個實例時,性能下降。這是一個陰謀:並行程序:如何找到瓶頸(CPU綁定線程)
單個實例(兩個線程)的運行時間爲0.78秒。兩個實例(總共四個線程)的運行時間是2.06,是0.78的兩倍多。之後,運行時間與實例數(線程數)成比例地增加。
下面是其中一個實例的時間配置文件時,多個平行運行:
有人能提出見解,有什麼可以怎麼回事?該配置文件顯示,OpenMP佔用了50%的時間。那是什麼意思?
沒有任何代碼只能從水晶球猜測。 –
您觀察到的是兩個不同進程之間的上下文切換,每個進程都使用兩個cpus上的兩個線程運行。這種縮放與您的應用程序中的瓶頸無關。 – Bort
Yout通常不能說明矩陣操作是CPU綁定的。實際上很少。如果做得對,矩陣乘法是受CPU限制的(就像LU和Cholesky因式分解一樣),但其他很多不是。 –