序列 並行程式在效率上的簡單比較

2021-06-27 18:28:59 字數 2494 閱讀 5967

分類:

multi-x 2010-10-15 10:33

1198人閱讀

收藏舉報

parallel

工作程式開發

作業語言測試

開頭:

這是老師在開學時布置的一道作業題目,完整問題為:「多核與單核的cpu在執行序列、並行程式時時,在效率上的差別。」 以前雖然常常聽說多核,但是卻沒有去多了解下並行程式和序列程式,這次作業也算對這些概念有些熟悉。

多核興起:

20世紀40年代第一台電子管計算機的發明標誌計算工具進入了乙個嶄新的時代。20世紀50年代末,電晶體的發現促成了計算機技術的一大飛躍,其效能先之電子管計算機數十倍到數百倍以上。而之後積體電路時代的到來又為計算機的發展開闢了乙個新的里程。

20世紀70年代,積體電路技術能夠將計算機的控制單元和算術邏輯單元整合到乙個晶元上製成了微處理器晶元。之後,對計算機效能的提公升研究主要集中在對微處理器的效能的提高。傳統的提高處理器效能的方法主要有三種途徑: (一)提高主頻;(二)優化技術,採用功能更強大的指令,流水處理的技術;(三)增加cache的容量。

近年來,通過提高處理器主頻來提公升處理器效能的方法已經不大可能有大的進展,因而業界對處理器效能的提公升逐漸轉向了超執行緒、多核、快取等技術。其中,多核是目前乙個熱點。

並行程式設計:

在以往,硬體技術的提公升不會對執行其上的軟體帶來影響,而多核的誕生為其提出的一些難題。之前的應用程式都是針對乙個運算核心而設計,而當處理器的架構公升級為多核時,以前的應用程式便不能夠充分地利用多核的優勢,甚至會造成效能的下降。因而,隨著多核漸行,今後程式設計師所將面臨的挑戰便是開發針對多核的並行程式。

需要注意的是,並行執行的程式實際上沒這麼簡單。在工作的切割、結合上,也是要多花時間的,所以在現實中,即使最佳狀況,雙核心的效能也不會是 1 + 1 = 2 這樣的理想化。除此之外,也不是所有工作都是可以切割的!很多任務作是有關聯性的,這樣如果直接切割給不同的處理核心各自去平行運算,出來的結果是肯定有問題的。而且,多執行緒的程式在編寫、維護上,也都比單一執行緒的程式複雜上不少。 

問題回答:

序列程式主要是針對具有單核體系架構的處理器而言的;而並行程式概念興起於多核處理器誕生之後,為解決大規模問題而提出的平行計算。對於本題而言,給出的結論為:

··對於序列程式,因為程式經過編譯過後沒有並行區域,也即不能夠派生到多個核當中執行,因此其在單核和多核上執行的時間是等同的。

··對於並行程式,在多核與單核上執行的效率往往與程式所要解決的問題的規模有關。平行計算追求的理想情況是採用p個處理器就能得到p陪速度的提公升,但這很難達到,因為平行計算會引入一些額外的開銷,也即前面提到的並行程式並不是簡單的「切割」到多個處理器(多核)中去。總之,對於一些小規模的問題,並行程式的效果通常不如序列程式;對於一些較大規模的問題,並行程式的效果要遠遠好於序列程式,但是不能達到所期望的理想情況。以下是一些例證:

(1)乙個簡單的沒有資料依賴及競爭條件的迴圈程式

[cpp]view plain

copy

#include 

#include 

#include 

using namespace std;  

typedef long int l_int;  

int main(void)  

}  clock_t t2 = clock();                  // time measuring  

cout <<"time = " <

return 0;  

}  

經過測試,在沒有啟用 openmp支援時,整個時間耗費為 0.031s. 在啟用 openmp後,程式中的for迴圈被並行執行,然而其時間耗費卻增加了近一倍,為 0.078s. 處理器加速比:

序列時間耗費/並行時間耗費 = 0.39

(2)乙個較為複雜一些的程式, 計算pi值:

[cpp]view plain

copy

#include 

#include 

int main(void)  

}  clock_t t2 = clock();                       // time measure  

std::cout<<"pi = " << sum*stepinterval <<"/n";  

std::cout <<"time = " <<(double)(t2-t1)/clocks_per_sec <<"/n";  

return 0;  

}   

經測試,在沒有啟用 openmp時,時間耗費為 0.125。啟用openmp之後, 時間耗費為 0.062。 處理器加速比:

序列時間耗費/並行時間耗費 = 2.0

綜上實驗所述,能夠說明之前提出的結論。

序列 amp 並行程式在效率上的簡單比較

開頭 這是老師在開學時布置的一道作業題目,完整問題為 多核與單核的cpu在執行序列 並行程式時時,在效率上的差別。以前雖然常常聽說多核,但是卻沒有去多了解下並行程式和序列程式,這次作業也算對這些概念有些熟悉。多核興起 20世紀40年代第一台電子管計算機的發明標誌計算工具進入了乙個嶄新的時代。20世紀...

序列IO與並行IO的效率比較

mpi file read at函式與c語言中的fread函式,依次讀取乙個100m的檔案,讀取時間如下所示 實驗一 zhangyang mpi002 kmeans exper mpiexec np 1 mpi c fspeed there are 1500015 samples.start tes...

累加計算的並行與序列效率比較

計算一幅影象的畫素值的平均值 測試環境 cpu intel r core tm i7 7700 cpu 3.60ghz x 8gpu nvidia geforce gtx 1050 1,在cuda gpu上計算累加和,先分段計算,在進行規約,分段計算裡面其實也是規約,然後除以總的畫素個數。2,在cp...