日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

串行并行程序在效率上的简单比较

發(fā)布時間:2025/3/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 串行并行程序在效率上的简单比较 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

串行&并行程序在效率上的簡單比較

分類: Multi-X 2010-10-15 10:33 1198人閱讀 評論(0) 收藏 舉報 parallel工作程序開發(fā)作業(yè)語言測試

開頭:

??? 這是老師在開學(xué)時布置的一道作業(yè)題目,完整問題為:“多核與單核的CPU在運行串行、并行程序時時,在效率上的差別?!?以前雖然常常聽說多核,但是卻沒有去多了解下并行程序和串行程序,這次作業(yè)也算對這些概念有些熟悉。


?

多核興起:

??? 20世紀(jì)40年代第一臺電子管計算機(jī)的發(fā)明標(biāo)志計算工具進(jìn)入了一個嶄新的時代。20世紀(jì)50年代末,晶體管的發(fā)現(xiàn)促成了計算機(jī)技術(shù)的一大飛躍,其性能先之電子管計算機(jī)數(shù)十倍到數(shù)百倍以上。而之后集成電路時代的到來又為計算機(jī)的發(fā)展開辟了一個新的里程。

??? 20世紀(jì)70年代,集成電路技術(shù)能夠?qū)⒂嬎銠C(jī)的控制單元和算術(shù)邏輯單元集成到一個芯片上制成了微處理器芯片。之后,對計算機(jī)性能的提升研究主要集中在對微處理器的性能的提高。傳統(tǒng)的提高處理器性能的方法主要有三種途徑: (一)提高主頻;(二)優(yōu)化技術(shù),采用功能更強(qiáng)大的指令,流水處理的技術(shù);(三)增加Cache的容量。

??? 近年來,通過提高處理器主頻來提升處理器性能的方法已經(jīng)不大可能有大的進(jìn)展,因而業(yè)界對處理器性能的提升逐漸轉(zhuǎn)向了超線程、多核、緩存等技術(shù)。其中,多核是目前一個熱點。

?

并行編程:
??? 在以往,硬件技術(shù)的提升不會對運行其上的軟件帶來影響,而多核的誕生為其提出的一些難題。之前的應(yīng)用程序都是針對一個運算核心而設(shè)計,而當(dāng)處理器的架構(gòu)升級為多核時,以前的應(yīng)用程序便不能夠充分地利用多核的優(yōu)勢,甚至?xí)斐尚阅艿南陆怠R蚨?#xff0c;隨著多核漸行,今后程序員所將面臨的挑戰(zhàn)便是開發(fā)針對多核的并行程序。

??? 并行程序的設(shè)計目標(biāo)是挖掘問題求解過程中的并行性,尋求并行算法與并行機(jī)器體系結(jié)構(gòu)的最佳匹配和映射,合理組織并行任務(wù),減少額外消息傳遞和數(shù)據(jù)移動開銷。目前,開發(fā)一個并行程序可以有三種途徑,一個途徑是串行程序自動并行化。第二條途徑是設(shè)計全新的并行程序設(shè)計語言。第三條途徑就是串行語言加并行庫或偽注釋指導(dǎo)語句的擴(kuò)展,實際上就是增加一個庫或一些新的制導(dǎo)語句來幫助進(jìn)行消息傳遞和并行。這正是MPI和OpenMP所采取的途徑。目前也是比較容易被接受且性能高的途徑。但其程序開發(fā)效率很低,難度也比較大。

??? 需要注意的是,并行執(zhí)行的程序?qū)嶋H上沒這么簡單。在工作的切割、結(jié)合上,也是要多花時間的,所以在現(xiàn)實中,即使最佳狀況,雙核心的效能也不會是 1 + 1 = 2 這樣的理想化。除此之外,也不是所有工作都是可以切割的!很多工作是有關(guān)聯(lián)性的,這樣如果直接切割給不同的處理核心各自去平行運算,出來的結(jié)果是肯定有問題的。而且,多執(zhí)行緒的程式在編寫、維護(hù)上,也都比單一執(zhí)行緒的程式復(fù)雜上不少。?


問題回答:

??? 串行程序主要是針對具有單核體系架構(gòu)的處理器而言的;而并行程序概念興起于多核處理器誕生之后,為解決大規(guī)模問題而提出的并行計算。對于本題而言,給出的結(jié)論為:
?·· 對于串行程序,因為程序經(jīng)過編譯過后沒有并行區(qū)域,也即不能夠派生到多個核當(dāng)中運行,因此其在單核和多核上運行的時間是等同的。
?·· 對于并行程序,在多核與單核上運行的效率往往與程序所要解決的問題的規(guī)模有關(guān)。并行計算追求的理想情況是采用P個處理器就能得到P陪速度的提升,但這很難達(dá)到,因為并行計算會引入一些額外的開銷,也即前面提到的并行程序并不是簡單的“切割”到多個處理器(多核)中去??傊?#xff0c;對于一些小規(guī)模的問題,并行程序的效果通常不如串行程序;對于一些較大規(guī)模的問題,并行程序的效果要遠(yuǎn)遠(yuǎn)好于串行程序,但是不能達(dá)到所期望的理想情況。以下是一些例證:

?

(1)一個簡單的沒有數(shù)據(jù)依賴及競爭條件的循環(huán)程序

?

[cpp] view plaincopy
  • #include?<iostream>??
  • #include?<ctime>??
  • #include?<omp.h>??
  • ??
  • using?namespace?std;??
  • typedef?long?int?l_int;??
  • ??
  • int?main(void)??
  • {??
  • ????l_int?i?=?0;??
  • ????l_int?temp?=?0;??
  • ??
  • ????clock_t?t1?=?clock();???????????????????//?time?measuring??
  • ????{??
  • ????????#pragma?omp?parallel?for??
  • ????????for(i=0;?i<10000000;?i++)??
  • ????????{??
  • ????????????temp?++;??????????
  • ????????}??
  • ????}??
  • ????clock_t?t2?=?clock();??????????????????//?time?measuring??
  • ??????
  • ????cout?<<"time?=?"?<<t2-t1?<<"/n";??
  • ??
  • ????return?0;??
  • }??
  • ???

    ????? 經(jīng)過測試,在沒有啟用 OpenMP支持時,整個時間耗費為 0.031s. 在啟用 OpenMP后,程序中的for循環(huán)被并行執(zhí)行,然而其時間耗費卻增加了近一倍,為 0.078s. 處理器加速比:

    ??? 串行時間耗費/并行時間耗費 = 0.39

    (2)一個較為復(fù)雜一些的程序, 計算Pi值:

    ?

    [cpp] view plaincopy
  • #include?<iostream>??
  • #include?<ctime>??
  • ??
  • int?main(void)??
  • {??
  • ????int?i,?stepNum;??
  • ????double?sum,?x,?stepInterval;??
  • ??
  • ????x?=?0.0;??
  • ????sum?=?0.0;??
  • ????stepNum?=?10000000;??
  • ????stepInterval?=?1.0/stepNum;??
  • ??????
  • ????clock_t?t1?=?clock();????????????????????????//?time?measure??
  • ????{??
  • ????????#pragma?omp?parallel?for?private(x),reduction(+:sum)??
  • ????????for(i=0;?i<stepNum;?i++)??
  • ????????{??
  • ????????????x?=?(i+0.5)?*?stepInterval;??
  • ????????????sum?+=?4.0?/?(1+x*x);??
  • ????????}??
  • ??
  • ????}??
  • ????clock_t?t2?=?clock();???????????????????????//?time?measure??
  • ??
  • ????std::cout<<"Pi?=?"?<<?sum*stepInterval?<<"/n";??
  • ????std::cout?<<"time?=?"?<<(double)(t2-t1)/CLOCKS_PER_SEC?<<"/n";??
  • ????return?0;??
  • }???
  • ???

    ??? 經(jīng)測試,在沒有啟用 OpenMP時,時間耗費為 0.125。啟用OpenMP之后, 時間耗費為 0.062。?處理器加速比:

    ????串行時間耗費/并行時間耗費 = 2.0

    ?

    ?

    ????綜上實驗所述,能夠說明之前提出的結(jié)論。

    總結(jié)

    以上是生活随笔為你收集整理的串行并行程序在效率上的简单比较的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。