• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            twzheng's cppblog

            『站在風(fēng)口浪尖緊握住鼠標(biāo)旋轉(zhuǎn)!』 http://www.cnblogs.com/twzheng

              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              136 隨筆 :: 78 文章 :: 353 評(píng)論 :: 0 Trackbacks

            計(jì)算基礎(chǔ)正在發(fā)生根本變革——解讀“計(jì)算2.0”

             摘自CSND 作者:孟巖

            從本質(zhì)上看,軟件實(shí)際上只是夾在人與硬件之間的一個(gè)中間層,人們使用軟件的根本目的還是要讓硬件運(yùn)轉(zhuǎn)起來(lái)為自己服務(wù)。硬件平臺(tái)如果長(zhǎng)期穩(wěn)定,軟件就能夠安穩(wěn)發(fā)展,建起高樓大廈,硬件基礎(chǔ)如果打個(gè)噴嚏,軟件就會(huì)得一場(chǎng)感冒。過去十幾年來(lái),我們的計(jì)算環(huán)境已經(jīng)發(fā)生了很多變化,比如RISC的興起,大規(guī)模服務(wù)器集群的發(fā)展,SIMD的普及,特別是網(wǎng)絡(luò)的大發(fā)展,令人印象深刻。每一項(xiàng)變化都給軟件帶來(lái)一定程度的沖擊。不過大部分情況下,這種沖擊力度有限:只需要有一小部分人去關(guān)注就好了,他們會(huì)盡可能把這些變化包裝起來(lái),從而使得其余的絕大部分人不受影響,而又能夠享受硬件發(fā)展帶來(lái)的免費(fèi)午餐。比如說,RISC跟硬件平臺(tái)帶來(lái)的變革是非常巨大的,但是只有編譯器和操作系統(tǒng)開發(fā)者真正需要關(guān)注它。SIMDMMX3DNow!SSEx)的發(fā)展使普通計(jì)算機(jī)處理多媒體數(shù)據(jù)的能力獲得了本質(zhì)提升,但是廠商們也推出了一系列封裝庫(kù),使應(yīng)用軟件開發(fā)者們?cè)诓恍鑼?duì)開發(fā)方式做重大改變的情況下享受這些發(fā)展成果。

             

            然而站在今天這個(gè)時(shí)間點(diǎn)上往前看,就會(huì)看到,情況在發(fā)生的變化。發(fā)生在若干個(gè)不同領(lǐng)域的硬件進(jìn)展,幾乎在同時(shí)達(dá)到了可以被稱之為“本質(zhì)變化”的狀態(tài)。而所有這些變化結(jié)合起來(lái),則使我們面對(duì)一個(gè)自1980年代初PC崛起以來(lái)從來(lái)沒有過的局面,一個(gè)可以毫不夸張地稱之為“變革”的局面,我們稱之為“計(jì)算2.0。在“計(jì)算2.0的時(shí)代里,軟件開發(fā)者面對(duì)的平臺(tái)會(huì)發(fā)生巨大的變化,而且這些變化很多是非常本質(zhì)的,無(wú)法簡(jiǎn)單地使用“包裝”的手段屏蔽掉,從而要求軟件開發(fā)的實(shí)踐也必將隨之發(fā)生巨大的變化。這對(duì)軟件產(chǎn)業(yè)的每一個(gè)人來(lái)說,是歷史上很少會(huì)遇到的情況,給我們帶來(lái)巨大的挑戰(zhàn)和機(jī)遇。

             

            下面就讓我們一起來(lái)展望一下“計(jì)算2.0將給我們帶來(lái)的沖擊。

             

            1. 多核與并發(fā)編程

            自從2005年初C++標(biāo)準(zhǔn)委員會(huì)主席Herb Sutter發(fā)表《并發(fā)的革命——免費(fèi)午餐已經(jīng)結(jié)束》的著名文章以來(lái),多核已經(jīng)成為整個(gè)軟件社群里熱門話題。在那篇文章里,Herb Sutter斷言說,CPU頻率的提高已經(jīng)接近極限,摩爾定律的發(fā)展今后將依賴多核化進(jìn)行下去,因此,軟件若要在未來(lái)的環(huán)境下生存,必須考慮并發(fā)問題。接著,Herb Sutter做出了更大膽和更驚人的語(yǔ)言,那就是不存在解決多核編程問題的銀彈,不存在可以簡(jiǎn)單地將并發(fā)編程問題化解掉的工具,開發(fā)高性能的并行程序必須要求開發(fā)者從根本上改變其編程方法。從某種意義上來(lái)說,這不僅僅是要改變50年來(lái)順序程序設(shè)計(jì)的工藝傳統(tǒng),而且是要改變數(shù)百萬(wàn)年來(lái)人類順序化思考問題的習(xí)慣,其困難程度可想而知!

             

            將近3年后的今天,Herb Sutter的預(yù)言似乎初步得到了印證。單核機(jī)器現(xiàn)在已經(jīng)成了過時(shí)貨,并且很快就會(huì)加入古董的行列。而多核機(jī)器的價(jià)格正在迅速下降。如今花2萬(wàn)塊錢人民幣,可以買下“三個(gè)8”的刀片服務(wù)器——兩個(gè)4核至強(qiáng)+8G內(nèi)存+四塊200G硬盤。再過一段時(shí)間,這個(gè)配置中的每項(xiàng)數(shù)據(jù)都會(huì)翻番。如果說在雙核時(shí)代我們還可以假裝一切都沒有發(fā)生,那么當(dāng)一臺(tái)機(jī)器上出現(xiàn)16個(gè)核的時(shí)候,敢于去忽略這種體系結(jié)構(gòu)上的根本變革的人,一定是瘋子。

             

            人們正在緊張地尋找著解決多核編程難題的方法。到目前為止,進(jìn)展不太大。目前最理想的結(jié)果,就是類似Intel C++Intel Fortran這樣的編譯器,可以自動(dòng)識(shí)別可并行化的循環(huán)運(yùn)算,然后實(shí)施自動(dòng)并行化。但是這距離全面并發(fā)還很遙遠(yuǎn)。類似MPIOpenMP這樣的解決方案雖然早就存在,但是要得到普及難度不小。至于其他的一些常規(guī)方案,無(wú)非是優(yōu)化多線程中的一些問題,比如無(wú)鎖數(shù)據(jù)結(jié)構(gòu)嘗試避免加鎖和解鎖帶來(lái)的巨大開銷,而事務(wù)型內(nèi)存也是為了優(yōu)化多線程程序共享資源的性能和可靠性。專門為并發(fā)系統(tǒng)設(shè)計(jì)的語(yǔ)言Erlang,被很多人視為多核時(shí)代的Java,但是Erlang的長(zhǎng)項(xiàng)在于并發(fā)任務(wù)的分發(fā)和同步,用它來(lái)處理計(jì)算密集型的任務(wù),如圖形圖像多媒體處理和數(shù)值計(jì)算,效率之低令人無(wú)法接受。也許把Erlang當(dāng)成計(jì)算的dispatcher,而讓每個(gè)核上都繼續(xù)以傳統(tǒng)的單線程方式運(yùn)行C程序是解決這類問題的辦法。但是所有這些方法,都首先要求將任務(wù)分解成可同時(shí)并行的多個(gè)單元,并且將并行計(jì)算中的若干問題定義清楚。也就是說,這些方法都無(wú)法解決那個(gè)最大的挑戰(zhàn):人的思維方式轉(zhuǎn)變問題。不改變我們編寫應(yīng)用程序的傳統(tǒng)線性思維,所有這些工具都沒有太大幫助。毫無(wú)疑問,這是擺在我們面前的最大難題之一。

             

            2. 新計(jì)算設(shè)備

            寫作此文時(shí),Amazon剛剛發(fā)布了電子書閱讀器Kindle,這款產(chǎn)品的出現(xiàn),基本上等于宣告電子閱讀時(shí)代的降臨,它所將引起的沖擊必將是劃時(shí)代的。然而對(duì)于開發(fā)者來(lái)說,它卻只不過是在一個(gè)已經(jīng)很長(zhǎng)的新計(jì)算設(shè)備名單里又加上了一項(xiàng)。這個(gè)名單中包括:PS2/3XBox/XBox360Wii TivoGame BoyGame Boy AdvancePSPiPhoneWindows MobileSymbianLinux MobileBlackberryiPod,車載導(dǎo)航儀,當(dāng)然,還有最最激動(dòng)人心的機(jī)器人。有人大而化之將它們統(tǒng)稱為“嵌入式設(shè)備”,然而這是一個(gè)非常具有誤導(dǎo)性的說法,這些設(shè)備中的每一項(xiàng)都不是傳統(tǒng)意義上的“嵌入式設(shè)備”,而是更接近于計(jì)算機(jī)的通用計(jì)算設(shè)備,更確切的說法應(yīng)該是“專用的通用計(jì)算設(shè)備”。

             

            僅僅十幾年以前,我們可以安全地認(rèn)為,世界上每臺(tái)計(jì)算機(jī)都是PC,每臺(tái)PC都用X86 CPU,都安裝了DOS/Windows。隨著最近幾年來(lái)新的計(jì)算設(shè)備如雨后春筍般涌現(xiàn),PC包打天下的時(shí)代已經(jīng)一去不返,這一點(diǎn)已經(jīng)非常清楚不過了。

             

            然而,軟件開發(fā)者并沒有從過去20多年形成的單一平臺(tái)迷思中擺脫出來(lái)。在軟件系統(tǒng)開發(fā)中合理運(yùn)用多平臺(tái)特長(zhǎng),充分注重可移植性的思維尚未形成,大部分應(yīng)用還是為傳統(tǒng)PC平臺(tái)開發(fā)的。這一點(diǎn)顯然已經(jīng)落后于時(shí)代的發(fā)展。當(dāng)然,這也就給那些有識(shí)之士提供了難得的機(jī)遇,充分利用多平臺(tái)整合的優(yōu)勢(shì),就可以開發(fā)出革命性的新型應(yīng)用。

             

            3. GPGPU

            CPU——中心處理單元,計(jì)算機(jī)的核心和大腦,一切的一切的主宰。”

             

            教科書上這么告訴我們。

             

            很遺憾,這種說法早就不是事實(shí)了。自從類似DMA這樣的技術(shù)出現(xiàn),CPU就在不斷地“減負(fù)”。事實(shí)上一臺(tái)計(jì)算機(jī)里有許多塊不同的芯片,它們各自有各自的絕活,讓整臺(tái)計(jì)算機(jī)高速運(yùn)轉(zhuǎn)。不過,不管怎么說,CPU還是整臺(tái)電腦里最強(qiáng)有力的中心,它最強(qiáng)大,最能干。對(duì)嗎?

             

            很遺憾,連這個(gè)說法也變得非常脆弱了。在那些裝備有高級(jí)圖形卡的電腦玩家的機(jī)器中,CPU已經(jīng)不是最強(qiáng)大的計(jì)算單元了,取而代之的是GPU

             

            GPU原本只是為了進(jìn)行3D圖形加速而誕生的芯片,由于其專用性,體系結(jié)構(gòu)較之CPU大大簡(jiǎn)化,從而可以高度優(yōu)化設(shè)計(jì),進(jìn)行大規(guī)模的浮點(diǎn)數(shù)并行計(jì)算。當(dāng)代GPU在這方面的性能遠(yuǎn)遠(yuǎn)超過了CPU。在浮點(diǎn)數(shù)計(jì)算速度上,NVIDIA最新的GPU超過Intel最快的CPU達(dá)10倍以上,而據(jù)稱,這一差距在未來(lái)幾年內(nèi)會(huì)達(dá)到數(shù)百倍。單就這一點(diǎn)來(lái)說,GPU早就是計(jì)算機(jī)中最快的芯片了。

             

            然而,由于GPU的專用性,大部分通用計(jì)算任務(wù)是無(wú)法用GPU來(lái)完成的。例如,連最最簡(jiǎn)單的分支語(yǔ)句,GPU都無(wú)法完成。因此,GPU永遠(yuǎn)不可能取代CPU。但是,GPU強(qiáng)大的計(jì)算能力如果僅僅給高性能圖形程序和游戲來(lái)使用,也無(wú)疑是一種巨大的計(jì)算資源浪費(fèi),有沒有可能將GPU的計(jì)算資源暴露給應(yīng)用程序員,由他們將適合于GPU計(jì)算的任務(wù)轉(zhuǎn)交給GPU完成,而把CPU解放出來(lái)干CPU擅長(zhǎng)的工作呢?沒錯(cuò),這就是通用GPU計(jì)算(General Purpose GPU computing)的宗旨。

             

            眼下,NVIDIAAMD(不久前收購(gòu)ATI)都在加速推出對(duì)GPGPU開發(fā)的支持,而據(jù)傳Intel也將在2008年推出自己的獨(dú)立顯卡,加入戰(zhàn)局。這也就意味著,不出幾年,每臺(tái)電腦里都會(huì)存在兩個(gè)強(qiáng)大的計(jì)算單元,一個(gè)是CPU,一個(gè)是GPU。軟件開發(fā)人員將面臨新的挑戰(zhàn)——只有把任務(wù)合理地分配給CPUGPU,并且進(jìn)行統(tǒng)一調(diào)度,才能夠達(dá)到效率上的最佳化。此外,那時(shí)候的CPU8個(gè)或更多的核,而GPU本身更是高度并行化的計(jì)算單元,計(jì)算任務(wù)不僅要合理分布,還需要充分并行,這其中蘊(yùn)含的挑戰(zhàn)之大,足夠令人心驚膽寒。然而,也正正創(chuàng)造了英雄橫空出世的條件,誰(shuí)能夠橫刀立馬,誰(shuí)就能功成名就。

             

            4. 無(wú)處不在的網(wǎng)絡(luò)

            回到Kindle,這個(gè)產(chǎn)品最有趣的部分在于,你可以隨時(shí)通過無(wú)線網(wǎng)絡(luò)下載你想看的書,而且這些下載的書被保存在網(wǎng)絡(luò)上你的一個(gè)私人空間里。你永遠(yuǎn)不會(huì)買不到想要的書,也永遠(yuǎn)不用擔(dān)心家里太小,放不下這些書。如果你的Kindle丟失了或者你想換一臺(tái),沒關(guān)系,你龐大的圖書館會(huì)毫發(fā)無(wú)損。

             

            你覺得怎么樣?非常好,對(duì)嗎?但這需要一個(gè)條件,一個(gè)重要的條件——無(wú)所不在的網(wǎng)絡(luò),特別的,無(wú)所不在的無(wú)線網(wǎng)絡(luò)。

             

            不出幾年,將不會(huì)再存在Internet的死角,在任何地方你都可以高速訪問Internet。對(duì)軟件開發(fā)者來(lái)說這意味著什么?這意味著很多過去慣用的軟件設(shè)計(jì)思路將不再是最優(yōu)的了,關(guān)于網(wǎng)絡(luò)訪問限制的很多擔(dān)憂也變得不必要了。應(yīng)用可以保證永遠(yuǎn)連網(wǎng),用戶數(shù)據(jù)也最好保存在網(wǎng)絡(luò)上,密集的計(jì)算任務(wù)交給網(wǎng)絡(luò)上的高速節(jié)點(diǎn)來(lái)執(zhí)行,可能比本地執(zhí)行更快。一言以蔽之,網(wǎng)絡(luò)計(jì)算將全面取代單機(jī)計(jì)算,無(wú)論是對(duì)PC來(lái)說,還是對(duì)各種各樣的小設(shè)備來(lái)說。

             

            更重大的變化可能來(lái)自人們的生活方式,當(dāng)互聯(lián)網(wǎng)——這個(gè)目前世界上規(guī)模最大、最自由的網(wǎng)絡(luò)——無(wú)處不在并且速度飛快的時(shí)候,其他的通信網(wǎng)絡(luò)還有存在的必要嗎?我們還需要使用中國(guó)移動(dòng)的專有網(wǎng)絡(luò)并且每個(gè)月為之付出不菲的費(fèi)用嗎?我們還需要忍受諸如“腦白金”那樣的爛廣告和矯揉造作的爛主持人嗎?我們還需要買日?qǐng)?bào)和雜志嗎?可能都不需要了。互聯(lián)網(wǎng)就是電視,互聯(lián)網(wǎng)就是電話,互聯(lián)網(wǎng)就是報(bào)紙,一切媒體歸于互聯(lián)網(wǎng)。這種局面會(huì)給人類的生存方式帶來(lái)一個(gè)重大的變革,在其中蘊(yùn)含著巨大機(jī)會(huì)、挑戰(zhàn)和財(cái)富。在這個(gè)意義上,Google的成功只不過是一個(gè)序曲而已。

             

            如上所述,相信您已經(jīng)意識(shí)到我們處在一個(gè)怎樣的變革當(dāng)中!令我們興奮不已的是,軟件開發(fā)者在這個(gè)變革中處于前鋒的位置,我們準(zhǔn)備好了嗎?

            在多核CPU上的多線程并行程序設(shè)計(jì),究竟應(yīng)該被稱為“并行(parallel)”還是“并發(fā)(concurrency)”,并沒有統(tǒng)一的認(rèn)識(shí)。通常將“并行”定義為在多個(gè)計(jì)算單元上同時(shí)執(zhí)行多個(gè)任務(wù),而將“并發(fā)”定義為在單個(gè)計(jì)算單元上以分時(shí)的方式“同時(shí)”執(zhí)行多個(gè)任務(wù),由于多核CPU有多個(gè)計(jì)算單元,因此似乎成為“并行”更加合適。但又因?yàn)閱蝹€(gè)多核CPU對(duì)外只表現(xiàn)為一個(gè)計(jì)算單元,因此似乎“并發(fā)”也很合適。對(duì)這個(gè)問題缺乏統(tǒng)一的認(rèn)識(shí)。從軟件開發(fā)上來(lái)看,無(wú)論是否執(zhí)行在多個(gè)核上,編程方法本身必須發(fā)生變化,這種變化了的編程方法通常被稱為“并發(fā)編程”,表明這樣方式編寫的程序既可以跑在多個(gè)計(jì)算單元上,也可以以分時(shí)的方式執(zhí)行在一個(gè)計(jì)算單元上。

            posted on 2007-12-01 00:09 譚文政 閱讀(276) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 電腦常識(shí)
            久久精品一区二区| 日韩欧美亚洲国产精品字幕久久久| 人妻少妇久久中文字幕一区二区| www亚洲欲色成人久久精品| 精品国产青草久久久久福利| 久久青青国产| 9久久9久久精品| 精品久久久久久成人AV| 亚洲国产精品久久久久婷婷老年| 久久久一本精品99久久精品66| 国产精品久久久久久久app| 久久久久久噜噜精品免费直播| 久久久国产精品福利免费| 亚洲日本va午夜中文字幕久久| 久久久久99精品成人片牛牛影视 | 精品无码久久久久久尤物| 久久99精品国产麻豆不卡| 国产Av激情久久无码天堂| 久久久久久国产精品无码下载| 久久国产AVJUST麻豆| 久久av高潮av无码av喷吹| 99久久国语露脸精品国产| 久久九九有精品国产23百花影院| 国产精品久久久久天天影视| 日韩人妻无码精品久久久不卡| 国内精品久久久久久久97牛牛 | 久久久久久精品成人免费图片| 久久久久久精品成人免费图片| 亚洲精品乱码久久久久久按摩 | 久久综合给合久久狠狠狠97色69| 性欧美大战久久久久久久久 | 国产成人精品久久一区二区三区| 久久精品国产亚洲AV无码娇色| 办公室久久精品| 亚洲国产精品无码久久青草| 久久久精品久久久久久| 一本色道久久综合亚洲精品| 漂亮人妻被中出中文字幕久久| 久久青青草原精品国产| 成人免费网站久久久| 日本福利片国产午夜久久|