串行并行程序在效率上的简单比较
串行&并行程序在效率上的簡單比較
分類: Multi-X 2010-10-15 10:33 1198人閱讀 評論(0) 收藏 舉報 parallel工作程序開發作業語言測試開頭:
??? 這是老師在開學時布置的一道作業題目,完整問題為:“多核與單核的CPU在運行串行、并行程序時時,在效率上的差別。” 以前雖然常常聽說多核,但是卻沒有去多了解下并行程序和串行程序,這次作業也算對這些概念有些熟悉。
?
多核興起:
??? 20世紀40年代第一臺電子管計算機的發明標志計算工具進入了一個嶄新的時代。20世紀50年代末,晶體管的發現促成了計算機技術的一大飛躍,其性能先之電子管計算機數十倍到數百倍以上。而之后集成電路時代的到來又為計算機的發展開辟了一個新的里程。
??? 20世紀70年代,集成電路技術能夠將計算機的控制單元和算術邏輯單元集成到一個芯片上制成了微處理器芯片。之后,對計算機性能的提升研究主要集中在對微處理器的性能的提高。傳統的提高處理器性能的方法主要有三種途徑: (一)提高主頻;(二)優化技術,采用功能更強大的指令,流水處理的技術;(三)增加Cache的容量。
??? 近年來,通過提高處理器主頻來提升處理器性能的方法已經不大可能有大的進展,因而業界對處理器性能的提升逐漸轉向了超線程、多核、緩存等技術。其中,多核是目前一個熱點。
?
并行編程:
??? 在以往,硬件技術的提升不會對運行其上的軟件帶來影響,而多核的誕生為其提出的一些難題。之前的應用程序都是針對一個運算核心而設計,而當處理器的架構升級為多核時,以前的應用程序便不能夠充分地利用多核的優勢,甚至會造成性能的下降。因而,隨著多核漸行,今后程序員所將面臨的挑戰便是開發針對多核的并行程序。
??? 并行程序的設計目標是挖掘問題求解過程中的并行性,尋求并行算法與并行機器體系結構的最佳匹配和映射,合理組織并行任務,減少額外消息傳遞和數據移動開銷。目前,開發一個并行程序可以有三種途徑,一個途徑是串行程序自動并行化。第二條途徑是設計全新的并行程序設計語言。第三條途徑就是串行語言加并行庫或偽注釋指導語句的擴展,實際上就是增加一個庫或一些新的制導語句來幫助進行消息傳遞和并行。這正是MPI和OpenMP所采取的途徑。目前也是比較容易被接受且性能高的途徑。但其程序開發效率很低,難度也比較大。
??? 需要注意的是,并行執行的程序實際上沒這么簡單。在工作的切割、結合上,也是要多花時間的,所以在現實中,即使最佳狀況,雙核心的效能也不會是 1 + 1 = 2 這樣的理想化。除此之外,也不是所有工作都是可以切割的!很多工作是有關聯性的,這樣如果直接切割給不同的處理核心各自去平行運算,出來的結果是肯定有問題的。而且,多執行緒的程式在編寫、維護上,也都比單一執行緒的程式復雜上不少。?
問題回答:
??? 串行程序主要是針對具有單核體系架構的處理器而言的;而并行程序概念興起于多核處理器誕生之后,為解決大規模問題而提出的并行計算。對于本題而言,給出的結論為:
?·· 對于串行程序,因為程序經過編譯過后沒有并行區域,也即不能夠派生到多個核當中運行,因此其在單核和多核上運行的時間是等同的。
?·· 對于并行程序,在多核與單核上運行的效率往往與程序所要解決的問題的規模有關。并行計算追求的理想情況是采用P個處理器就能得到P陪速度的提升,但這很難達到,因為并行計算會引入一些額外的開銷,也即前面提到的并行程序并不是簡單的“切割”到多個處理器(多核)中去。總之,對于一些小規模的問題,并行程序的效果通常不如串行程序;對于一些較大規模的問題,并行程序的效果要遠遠好于串行程序,但是不能達到所期望的理想情況。以下是一些例證:
?
(1)一個簡單的沒有數據依賴及競爭條件的循環程序
?
[cpp] view plaincopy???
????? 經過測試,在沒有啟用 OpenMP支持時,整個時間耗費為 0.031s. 在啟用 OpenMP后,程序中的for循環被并行執行,然而其時間耗費卻增加了近一倍,為 0.078s. 處理器加速比:
??? 串行時間耗費/并行時間耗費 = 0.39
(2)一個較為復雜一些的程序, 計算Pi值:
?
[cpp] view plaincopy???
??? 經測試,在沒有啟用 OpenMP時,時間耗費為 0.125。啟用OpenMP之后, 時間耗費為 0.062。?處理器加速比:
????串行時間耗費/并行時間耗費 = 2.0
?
?
????綜上實驗所述,能夠說明之前提出的結論。
總結
以上是生活随笔為你收集整理的串行并行程序在效率上的简单比较的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: R沟通|Bookdown中文书稿写作手册
- 下一篇: 1.vue简介以及模板语法---vue教