如何才能讓軟件在巨型機(jī)上高效率并行計(jì)算?
假設(shè)題主的前提是軟件不做修改或并行編譯優(yōu)化的話,單核程序放在多核上跑,能不能提升性能?這個(gè)要看你的軟件是怎么寫的。
如果你的程序中只有一個(gè)工作線程,那么多核沒有幫助,性能還是由多核中的單核性能決定的。如果你的程序有多個(gè)工作線程,那么操作系統(tǒng)會(huì)將不同的線程調(diào)度到不同的核上運(yùn)行,能提升一定的并發(fā)度。但是通常情況下多個(gè)線程之間還有一些同步處理,這樣不可避免要用鎖,那么線程并行執(zhí)行時(shí)間就由最慢的那個(gè)線程決定。
所以,想要充分發(fā)揮多核的性能,還是有些事情要做的。一個(gè)是并行編譯優(yōu)化,intel提供了并行編譯優(yōu)化軟件,可以把類似for循環(huán)這樣的語句并行化執(zhí)行。但這個(gè)優(yōu)化幅度是優(yōu)先的。
更好的方式是代碼做優(yōu)化,把大的計(jì)算任務(wù)切分成各自獨(dú)立的計(jì)算任務(wù),然后用多線程來并行處理。這樣能提升單個(gè)系統(tǒng)上的運(yùn)行性能。
但是,按照題主的需求,多核還不一定能滿足要求,需要多主機(jī)才行。題主提到的巨型計(jì)算機(jī)通常都是多主機(jī)組成的。當(dāng)然也有大型機(jī)、小型機(jī)這種超高性能的單系統(tǒng),但這種系統(tǒng)成本是高昂的,而題主的需求更適合用多臺(tái)服務(wù)器來做分布式并行處理。這種情況下就要編寫分布式并行執(zhí)行的代碼。可以基于一些成熟的分布式并發(fā)框架來開發(fā),例如hadoop。hadoop主要做了兩件事:一個(gè)是高速分布式文件系統(tǒng)用于超大數(shù)據(jù)集的快速訪問。一個(gè)是mapreduce,簡單來說就是把一件事分解成很多件事并行處理,然后再匯總結(jié)果。
純手打。