關於並行計算(單CPU多核並行,單節點多CPU並行,多節點並行)的效率快慢問題?
01-15
並行計算中計算效率的快慢是否會受到不同核、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)求解器時,有什麼經驗和心得?
※哪種函數式語言更適合多核的並行和並發編程?