<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          何去何從的并行計算

          共 4504字,需瀏覽 10分鐘

           ·

          2022-08-24 19:23

          ??點擊“博文視點Broadview”,獲取更多書訊

          也許你正試圖將你的應用改造成并行模式運行,也許你只是單純地對并行程序感興趣。

          無論出于何種原因,你正對并行計算充滿好奇、疑問和求知欲。

          不過首先,要公布一條令人沮喪的消息。

          就在大伙兒都認為并行計算必然成為未來的大趨勢時,2014年年底,在Avoiding ping pong論壇上,偉大的Linus Torvalds提出了一個截然不同的觀點,他說:“忘掉那該死的并行吧!”(原文:Give it up. The whole "parallel computing is the future" is a bunch of crock.)

          我們到底該如何選擇呢?


          01
          忘掉那該死的并行

          Linus Torvalds是一個傳奇式的人物(圖1),是他給出了Linux的原型,并一直致力于推廣和發(fā)展Linux系統(tǒng)。

          1991年,他首先在網絡上發(fā)布了Linux源碼,從此Linux迅速崛起壯大,成為目前使用最廣泛的操作系統(tǒng)之一。

          圖1 傳奇的Linus Torvalds

          自2002年起,Linus就決定使用BitKeeper作為Linux內核開發(fā)的版本控制工具,以此來維護Linux的內核源碼。

          BitKeeper是一套分布式版本控制軟件,它是一套商用系統(tǒng),由BitMover公司開發(fā)。

          2005年,BitKeeper宣稱:發(fā)現Linux內核開發(fā)人員試圖使用逆向工程來解析BitKeeper內部協議,因此,決定向Linus收回BitKeeper授權。

          雖然Linux核心團隊與BitMover公司進行了協商,但是仍無法解決他們之間的分歧。

          因此,Linus決定自行研發(fā)版本控制工具來代替BitKeeper。于是,Git誕生了。

          如果你正在使用Git,那么我相信你一定會為Git的魅力所折服;如果你還沒有了解過Git,那么我強烈建議你關注一下這款優(yōu)秀的產品。

          而正是這位傳奇人物,給目前紅紅火火的并行計算潑了一大盆冷水。那么,并行計算究竟應該何去何從呢?

          Linus在發(fā)言中這么說道:

          Where the hell do you envision that those magical parallel algorithms would be used?

          The only place where parallelism matters is in graphics or on the server side, where we already largely have it. Pushing it anywhere else is just pointless.

          So the whole argument that people should parallelize their code is fundamentally flawed. It rests on incorrect assumptions. It's a fad that has been going on too long.

          需要有多么奇葩的想象力才能想象出并行計算的用武之地?

          并行計算只能在圖像處理和服務端程序兩個領域使用,并且它在這兩個領域已經有了大量廣泛的使用。但是在其他任何地方,并行計算毫無建樹!

          因此,人們爭論是否應該將代碼并行化是一個本質上的錯誤。這完全基于一個錯誤的假設?!安⑿小笔且粋€早該結束的時髦用語。

          看了這段較為完整的表述,大家應該對Linus的觀點有所感觸,我對此也表示贊同。

          與串行程序不同,并行程序的設計和實現異常復雜,其復雜性不僅體現在程序的功能分離上,多線程間的協調性、亂序性都會成為程序得以正確執(zhí)行的障礙。

          只要你稍不留神,就會“失之毫厘,謬以千里”!

          混亂的程序難以閱讀、難以理解,更難以調試。

          所謂“并行”,也就是把簡單問題復雜化的典型。

          因此,只有“瘋子”才會叫囂“并行就是未來”(The crazies talking about scaling to hundreds of cores are just that – crazy)。

          但是,Linus也提出了兩個特例,那就是圖像處理和服務端程序是可以、也需要使用并行技術的。

          仔細想想,為什么圖像處理和服務端程序是特例呢?

          和用戶終端程序不同,圖像處理往往擁有極大的計算量。一張1024像素×768像素的圖片,包含多達78萬6千多個像素。即使將所有的像素遍歷一遍,也得花不少時間。

          更何況,圖像處理涉及大量的矩陣計算,矩陣的規(guī)模和數量都會非常大。

          因為如此密集的計算,很有可能超過單核CPU的計算能力,所以自然需要引入多核計算了。

          而服務端程序與一般的用戶終端程序相比,一方面,服務端程序需要承受很大的用戶訪問壓力。根據淘寶的數據,它在“雙11”一天,支付寶核心數據庫集群就處理了41億個事務、執(zhí)行了285億次SQL、生成了15TB日志、訪問了1931億次內存數據塊且發(fā)生了13億個物理讀。如此密集的訪問,恐怕任何一臺單核計算機都難以承受,因此,并行程序也就自然成了唯一的選擇。

          另一方面,服務端程序往往會比用戶終端程序擁有更復雜的業(yè)務模型。面對復雜業(yè)務模型,并行程序會比串行程序更容易適應業(yè)務需求、模擬我們的現實世界。畢竟,我們的世界本質上是并行的。比如,當你開開心心去上學的時候,媽媽可能在家里忙著家務,爸爸在外打工賺錢,一家人其樂融融。如果有一天,你需要使用你的計算機來模擬這個場景,你會怎么做呢?如果你在一個線程里,既做了你自己,又做了媽媽,又做了爸爸,顯然這不是一種好的解決方案。但如果你使用三個線程,分別模擬這三個人,一切看起來那么自然,而且容易被人理解。

          再舉一個專業(yè)點的例子,比如基礎平臺Java虛擬機,虛擬機除了要執(zhí)行main函數外,還需要做JIT編譯和垃圾回收。無論是main函數、JIT編譯還是垃圾回收,在虛擬機內部都是一個單獨的線程。

          是什么使得虛擬機的研發(fā)人員這么做的呢?

          顯然,這是因為建模的需要。因為這里的每一項任務都是相對獨立的。我們不應該將沒有關聯的業(yè)務代碼拼湊在一起,分離為不同的線程更容易理解和維護。因此,使用并行也不完全是出于對性能的考慮,有時候我們會很自然地那么做。


          02
          可怕的現實:摩爾定律的失效

          摩爾定律是由Intel創(chuàng)始人之一戈登·摩爾提出來的,其內容為:集成電路上可容納的電晶體(晶體管)數目,約每隔24個月便會增加一倍。經常被引用的“18個月”,是由Intel首席執(zhí)行官大衛(wèi)·豪斯所說“預計18個月會將芯片的性能提高一倍(即更多的晶體管使其更快)”而來的。

          說得直白點,就是每18個月到24個月,我們的計算機性能就能翻一番。

          反過來說,就是每過18個月到24個月,你用一半的價錢就能買到和現在性能相同的計算設備了。這聽起來是一件多么激動人心的事情呀!

          但是,摩爾定律并不是一種自然法則或者物理定律,它只是基于人為觀測數據對未來的預測。

          按照這種速度,我們的計算能力將會按照指數速度增長,用不了多久,我們的計算能力就能超越“上帝”了!暢想未來,基于強勁的超級計算機,我們甚至可以模擬整個宇宙。

          摩爾定律的有效性已經超過半個世紀了,然而,在2004年,Intel宣布將4GHz芯片的發(fā)布時間推遲到2005年。在2004年秋季,Intel宣布徹底取消4GHz計劃(圖2)。

          圖2 Intel CEO Barret 單膝下跪對取消4GHz感到抱歉

          是什么迫使世界頂級的科技巨頭放棄4GHz的研發(fā)呢?

          顯然,就目前的硅電路而言,很有可能已經走到了頭。我們的制造工藝已經精確到納米了。1納米是10-9米,也就是十億分之一米。這已經是一個相當小的數字了。

          就目前的科技水平而言,如果無法在物質分子層面以下進行工作,那么也許4GHz的芯片就已經接近理論極限了。因為即使一個水分子,它的直徑也有0.4納米。

          當然,如果我們使用完全不同的計算理論或者芯片生成工藝,也許會有本質的突破,但目前我們還沒有看到這種技術被大規(guī)模使用的可能性。

          因此,摩爾定律在CPU的計算性能上可能已經失效。雖然,現在Intel已經研制出了4GHz芯片,但可以看到,在近10年的發(fā)展中,CPU主頻的提升已經明顯遇到了一些暫時不可逾越的瓶頸。


          03
          柳暗花明:不斷地前進

          雖然CPU的性能已經幾近止步,長達半個世紀的摩爾定律轟然倒地,但是這依然沒有阻擋科學家和工程師們帶領我們不斷向前的腳步。

          從2005年開始,我們已經不再追求單核的計算速度,而是著迷于研究如何將多個獨立的計算單元整合到單獨的CPU中,也就是我們所說的多核CPU。

          短短十幾年的發(fā)展,家用型CPU,比如Intel i7 就可以擁有4核,甚至8核。而專業(yè)服務器則通常可以配有幾個獨立的CPU,每個CPU都擁有多達8個甚至更多的內核。從整體上看,專業(yè)服務器的內核總數甚至可以達到幾百個。

          非常令人激動的是,摩爾定律在另外一個側面又生效了。

          根據這個定律,我們可以預測,每過18個月到24個月,CPU的內核數就會翻一番。用不了多久,擁有幾十甚至上百個CPU內核的芯片就能進入千家萬戶。

          頂級計算機科學家唐納德·爾文·克努斯(Donald Ervin Knuth)如此評價這種情況:“在我看來,這種現象(并發(fā))或多或少是由硬件設計者已經無計可施導致的,他們將摩爾定律失效的責任推給軟件開發(fā)者?!?/span>

          唐納德(圖3)是計算機巨著《計算機程序設計藝術》的作者?!睹绹茖W家》雜志曾將該書與愛因斯坦的《相對論》、狄拉克的《量子力學》和理查·費曼的《量子電動力學》等書并列為20世紀最重要的12本物理科學類專論書之一。

          圖3 唐納德

          04
          光明或是黑暗

          根據唐納德的觀點,摩爾定律本應該由硬件開發(fā)人員維持。但是,很不幸,硬件工程師似乎已經無計可施了。

          為了繼續(xù)保證性能的高速發(fā)展,硬件工程師破天荒地想出了將多個CPU內核塞進一個CPU里的奇妙想法。

          由此,并行計算就被非常自然地推廣開來,隨之而來的問題也層出不窮,程序員的黑暗時期也隨之到來。

          簡化的硬件設計方案必然帶來軟件設計的復雜性。換句話說,軟件工程師正在為硬件工程師無法完成的工作負責,因此,也就有了唐納德的“他們將摩爾定律失效的責任推給了軟件開發(fā)者”的說法。

          所以,如何讓多個CPU有效并且正確地工作也就成了一門技術,甚至成了很大的學問。

          比如,多線程間如何保證線程安全,如何正確理解線程間的無序性、可見性,如何盡可能地設計并行程序,如何將串行程序改造為并行程序。而對并行計算的研究,就是希望給這片黑暗帶來光明。


          本文節(jié)選自《實戰(zhàn)Java高并發(fā)程序設計(第3版)》一書,想了解更多關于并發(fā)編程的內容,歡迎閱讀此書!

          掃碼了解本書詳情


          發(fā)布:劉恩惠

          審核:陳歆懿

           

          如果喜歡本文
          歡迎 在看留言分享至朋友圈 三連

           熱文推薦  





          ▼點擊閱讀原文,了解本書詳情~

          瀏覽 21
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲欧美中文日韩在线观看 | 欧美A一级片 | 中文字幕国产精品 | 亚洲AV无码高清在线观看 | 国产黄色免费小视频 |