關於並行計算(單CPU多核並行,單節點多CPU並行,多節點並行)的效率快慢問題?

並行計算中計算效率的快慢是否會受到不同核、cpu、節點之間數據交換的限制,如果能以Fluent等流體計算軟體舉例就更好了!

1. 單CPU多核並行:比如只開啟一個雙核或者四核CPU用fluent計算流場,計算速度在「理論上」會不會受到多個核心之間數據交換上限的限制?

2.多個CPU並行計算:兩個不同CPU之間的數據交換「理論上」能否影響fluent總體計算速度?

3.多個計算節點的跨節點計算:同上的問題,節點之間的數據交換速度是不是會影響總體計算速度?

4.(有限元軟體中)網格數量固定,不考慮數據交換的速度,是不是核數越多越好?計算節點越多越好?假設網格數量為4個(只是假設),用8個核計算流場是不是會有4個核空置,或者這四個核只做一些邏輯處理的任務而不需參與浮點運算?

我感覺上面四個問題應該是會受到那些影響的,是不是就是cpu上什麼三級緩存啥啥的東西有關呢,只是不確定,向大家請教了~


1.和2差不多,參見2

2.這是共享內存,已經是最好的方式了,但是理論上會搶匯流排,所以依然有影響

3.節點之間通信一般通過網線,這是最大的瓶頸,遠遠慢於同一節點內通信。可以用高速網線,但是特別貴。

4.正常的商業軟體都帶有自動分區功能,你指定它用多少個核心算,它就會自動分成多少個區塊計算。

Fluent所有進程都會參與計算,不存在只處理邏輯的進程。順便科普一下,CFD商業軟體一般都不是有限元,而是有限體積。

核數越多,速度越快;但是10個核的速度一般都達不到1個核的10倍。所以如果你有多個case要算的話,還是要考慮每個case用多少核心最合算的。

我只是並行計算的用戶,不是專家,有錯漏請指正。


首先贊同樓上朱輝的回答。

1,2(openMP),3(MPI) 理論上就會,cpu之間需要交換數據

4 這個情況下,的確分區只能最多分四個。另外四個核用不上。不考慮數據交換的話,的確是核數越多越好。實際情況下,是有極限的,再增加核心數反而會拖慢總體速度。這是一個cpu計算速度和網路通信速度的取捨。

我給你舉個應用例子吧,一般你用某個軟體在某個cluster跑並行。你需要做一個計算速度和核心數的分析。比如同樣跑1000步,多少大的網格,多少個核花多少時間。然後你就知道在這個cluster上,多少大的網格該用多少個核效率最高。

個人只用過一些supercomputer沒具體研究過。


說一下你問的緩存的事,比如酷睿i7 3960X這個型號,6核心+三級緩存:

一級緩存:6x64KB

二級緩存:6x256KB

三級緩存:15MB

也就是說一、二級緩存是每個核心所獨佔得,而三級緩存是共享的。

每個核心要做計算必然要從內存獲取數據,這個過程比較慢。緩存就是一個小空間(很貴)存儲常用數據,從而減少從內存拿數據的時間。

當多節點計算時,不同節點的CPU需要交換數據,這時瓶頸是網路傳輸,即使是最貴的連接硬體速度也是很慢的,此時跟緩存基本沒太大關係。


1. 2. 3.

理論上而言,並行計算中,核之間的數據交換會成為計算速度的瓶頸。

譬如,有限元做並行計算。由於時核之間的數據交換量很小(只有元之間的interface),核交換數據很難成為計算速度的瓶頸。

但是用有限差分就很不一樣了,核之間數據交換量會大大的提升。

個人經驗而言,10%~20%計算時間用於核之間的數據交換是比較優化的。

一方面還有增加計算核的可能性,增快程序運行速度。

二來就是沒有佔用太多的計算時間。

節點之間的數據交換會很慢很慢,能避免盡量避免。

4.

這個問題很有趣。

如果發現你有四個核空位,沒有充分利用計算資源怎麼辦?

重新設計你的計算網格,讓計算更優化,更快。

如果已經到達了最優化,最快,怎麼辦?

閑著的cpu們能讓你run第二個case,也是很好的。


推薦閱讀:

Xeon E5 2xxx 核心數/價格 的問題?
MPP 與 Hadoop是什麼關係?
如何讓我的matlab內存使用率達百分之百?
寫大規模三維並行計算流體力學(CFD)求解器時,有什麼經驗和心得?
哪種函數式語言更適合多核的並行和並發編程?

TAG:軟體 | 計算機 | 計算流體力學CFD | 並行計算 | fluent |