世界是並行的:平行計算的機遇與挑戰
本文是一系列報導的序言,在該系列報導中,電腦科學家以及其他研究人員將利用大量處理器核心來釋放並行程式設計的高效能運算潛力。但是首先讓我們來了解一下平行計算機遇與挑戰的背景知識。
大約在五年前的那段時期內,計算速度的你追我逐曾一度陷入僵局。直到那個時候,設計師還一直是通過人盡皆知的三種技術來實現狂飆的效能:縮小本來已經非常微小的電晶體、在每顆處理器中整合更多數量的電晶體以及讓它們以更高的頻率執行。
問題是,更高的處理器效能意味著更大的功耗和更多發熱量,即使你在晶片燒焦之前找到了一種方法來解決掉髮熱量過大的問題,延續這種趨勢也會造成成本過高以及對環境的破壞過大。
另一種實現更快計算效能的方法也已經有一段時間的歷史了。這種方法並不是讓處理器突破速度極限,而是採用更多的處理器。大型計算機與伺服器長期以來一直採用眾多的處理器來處理繁重的工作。然而晶片技術的進步讓人們能夠在單一晶片中整合多個處理器,這種方法不僅效率更高而且還便宜很多。當今,高效能運算的方式是將計算任務進行分割,然後交由諸多處理器核心進行處理。假如是個人計算機,這意味著不僅CPU能夠擁有大量核心,而且圖形處理器(GPU)也能夠包含數十個,甚至是數以百計的核心。
然而,多處理器硬體所帶來的問題是軟體上的巨大挑戰。從20世紀40年代現代計算的初期開始,各種程式就一直是設計成順序執行的方式。美國國防部高階研究計劃署提供了大部分資金用來開發包含大量處理器的系統,並取得了一定的成功。在這類系統中,計算任務被分割成諸多細小部分,這些細小的任務可以同時執行,這些系統旨在通過這種方式來解決計算難題。然而,這些大規模並行系統沒有能夠在商業市場中生根發芽。
原因之一便是最常見的計算難題以及用於解決這些難題的演算法不能很好地適應這種「分割」的處理方式。而順序的想法似乎已經在我們的大腦中根深蒂固。神經系統科學家Jill Bolte Taylor指出,大腦的右半部分能夠處理感官訊號,它所做的是並行處理。而大腦的左半部分負責分析想法,「其執行方式就像是一個序列處理器。」不管是好還是壞,程式設計都是一項左腦的活動。
並行方法在數學上的最大障礙便是,許多程式是遞迴的:每一步都依賴上一步的結果。考慮一下找出兩個整數的最大公約數這一簡單問題。解決這一問題的標準方法是歐幾里德演算法,這種演算法已經有2,000多年的歷史,所使用的是重複減法。
例如,如果你想要找出2,987與1,751的最大公約數,那麼可以先用2,987來減1,751。重複地減掉差數(視需要顛倒順序,以防出現負數),直到結果為零。在這一例子中,這兩個數的最大公約數是103。這是一個完美而高效的方法,但是它是一個天生的序列式方法,因為每一次減法都依賴於上一次的結果。
序列思想雖然佔據主導地位,但是也有例外。最好的例子便是圖形。在圖形中,一個非常簡單、常見以及典型的需求就是旋轉影像。如果你還記得一些三角學的話,你可能會想起一個簡單的公式,將某個點逆時針旋轉一個角度& Theta:
其重點在於,每個點的處理都可以獨立於所有其它點之外。如果你的處理器數目與點數一樣多的話,那麼整個轉換過程即可在一個大規模並行運算中完成計算。諸多更加複雜的圖形任務也是如此。
圖形任務的並行友好性特點導致了早期人們在圖形處理器(GPU)中融入多處理器架構。NVIDIA®(英偉達™)頂級Tesla GPU目前包含240個處理器核心。雖然這些核心並不像CPU處理器那樣靈活,但是它們在特定任務上卻更勝一籌,例如諸多計算密集型難題當中重要的向量運算。
無論是針對CPU還是GPU來說,能夠有效利用大量核心的軟體仍然是個難題,但是情況已經變得越來越好。NVIDIA®(英偉達™)憑藉著CUDA™並行程式設計模型以及C語言擴充套件充當開路先鋒,該模型讓通用計算能夠在NVIDIA®(英偉達™)GPU上執行,而其C語言擴充套件則消除了對這種處理器進行程式設計的門檻。因此,開發人員能夠分別通過CUDA™工具包以及PGI的CUDA™ Fortran編譯器來利用C、C++以及Fortran語言對NVIDIA®(英偉達™)CUDA™ GPU進行程式設計。同時還能夠利用諸多驅動程式級的API,例如OpenCL以及DirectCompute。
軟體開發人員所面臨的最大難題之一便是在現有應用程式上實現更高效能以及開發出更多全新的計算密集型應用程式。無論是選擇多核CPU還是核群GPU,除了考慮將其應用程式實現並行化以外,他們別無選擇。根據近幾年的發展,CUDA™並行程式設計模型已經成為一款公認的「更簡單的」並行程式設計方式(它仍然不簡單,但是CUDA™的確使特定操作變得更加簡單)。而且,與CPU相比,GPU還能夠提供巨大的效能優勢。因此這兩大元素的有機結合為開發人員提供了一條開發更多創新應用程式的途徑。
大約在五年前的那段時期內,計算速度的你追我逐曾一度陷入僵局。直到那個時候,設計師還一直是通過人盡皆知的三種技術來實現狂飆的效能:縮小本來已經非常微小的電晶體、在每顆處理器中整合更多數量的電晶體以及讓它們以更高的頻率執行。
問題是,更高的處理器效能意味著更大的功耗和更多發熱量,即使你在晶片燒焦之前找到了一種方法來解決掉髮熱量過大的問題,延續這種趨勢也會造成成本過高以及對環境的破壞過大。
另一種實現更快計算效能的方法也已經有一段時間的歷史了。這種方法並不是讓處理器突破速度極限,而是採用更多的處理器。大型計算機與伺服器長期以來一直採用眾多的處理器來處理繁重的工作。然而晶片技術的進步讓人們能夠在單一晶片中整合多個處理器,這種方法不僅效率更高而且還便宜很多。當今,高效能運算的方式是將計算任務進行分割,然後交由諸多處理器核心進行處理。假如是個人計算機,這意味著不僅CPU能夠擁有大量核心,而且圖形處理器(GPU)也能夠包含數十個,甚至是數以百計的核心。
然而,多處理器硬體所帶來的問題是軟體上的巨大挑戰。從20世紀40年代現代計算的初期開始,各種程式就一直是設計成順序執行的方式。美國國防部高階研究計劃署提供了大部分資金用來開發包含大量處理器的系統,並取得了一定的成功。在這類系統中,計算任務被分割成諸多細小部分,這些細小的任務可以同時執行,這些系統旨在通過這種方式來解決計算難題。然而,這些大規模並行系統沒有能夠在商業市場中生根發芽。
原因之一便是最常見的計算難題以及用於解決這些難題的演算法不能很好地適應這種「分割」的處理方式。而順序的想法似乎已經在我們的大腦中根深蒂固。神經系統科學家Jill Bolte Taylor指出,大腦的右半部分能夠處理感官訊號,它所做的是並行處理。而大腦的左半部分負責分析想法,「其執行方式就像是一個序列處理器。」不管是好還是壞,程式設計都是一項左腦的活動。
並行方法在數學上的最大障礙便是,許多程式是遞迴的:每一步都依賴上一步的結果。考慮一下找出兩個整數的最大公約數這一簡單問題。解決這一問題的標準方法是歐幾里德演算法,這種演算法已經有2,000多年的歷史,所使用的是重複減法。
例如,如果你想要找出2,987與1,751的最大公約數,那麼可以先用2,987來減1,751。重複地減掉差數(視需要顛倒順序,以防出現負數),直到結果為零。在這一例子中,這兩個數的最大公約數是103。這是一個完美而高效的方法,但是它是一個天生的序列式方法,因為每一次減法都依賴於上一次的結果。
序列思想雖然佔據主導地位,但是也有例外。最好的例子便是圖形。在圖形中,一個非常簡單、常見以及典型的需求就是旋轉影像。如果你還記得一些三角學的話,你可能會想起一個簡單的公式,將某個點逆時針旋轉一個角度& Theta:
其重點在於,每個點的處理都可以獨立於所有其它點之外。如果你的處理器數目與點數一樣多的話,那麼整個轉換過程即可在一個大規模並行運算中完成計算。諸多更加複雜的圖形任務也是如此。
圖形任務的並行友好性特點導致了早期人們在圖形處理器(GPU)中融入多處理器架構。NVIDIA®(英偉達™)頂級Tesla GPU目前包含240個處理器核心。雖然這些核心並不像CPU處理器那樣靈活,但是它們在特定任務上卻更勝一籌,例如諸多計算密集型難題當中重要的向量運算。
無論是針對CPU還是GPU來說,能夠有效利用大量核心的軟體仍然是個難題,但是情況已經變得越來越好。NVIDIA®(英偉達™)憑藉著CUDA™並行程式設計模型以及C語言擴充套件充當開路先鋒,該模型讓通用計算能夠在NVIDIA®(英偉達™)GPU上執行,而其C語言擴充套件則消除了對這種處理器進行程式設計的門檻。因此,開發人員能夠分別通過CUDA™工具包以及PGI的CUDA™ Fortran編譯器來利用C、C++以及Fortran語言對NVIDIA®(英偉達™)CUDA™ GPU進行程式設計。同時還能夠利用諸多驅動程式級的API,例如OpenCL以及DirectCompute。
軟體開發人員所面臨的最大難題之一便是在現有應用程式上實現更高效能以及開發出更多全新的計算密集型應用程式。無論是選擇多核CPU還是核群GPU,除了考慮將其應用程式實現並行化以外,他們別無選擇。根據近幾年的發展,CUDA™並行程式設計模型已經成為一款公認的「更簡單的」並行程式設計方式(它仍然不簡單,但是CUDA™的確使特定操作變得更加簡單)。而且,與CPU相比,GPU還能夠提供巨大的效能優勢。因此這兩大元素的有機結合為開發人員提供了一條開發更多創新應用程式的途徑。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22785983/viewspace-667582/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Flink大資料計算的機遇與挑戰大資料
- 雲端計算對IT工作者 是挑戰還是機遇?
- 蘋果即將釋出新品 開發者的機遇與挑戰並存蘋果
- AI晶片的長征之路:挑戰與機遇AI晶片
- 麥肯錫:壽險行業機遇與挑戰並存(附下載)行業
- 人工智慧:未來的機遇與挑戰人工智慧
- 人工智慧核心6技術,機遇與挑戰並存人工智慧
- 中國疫苗行業重塑在即,機遇與挑戰共存行業
- 機器人市場機遇和挑戰並存機器人
- 【思維導圖】 邊緣計算面臨的機遇和挑戰
- 沙龍報名 | 雲端計算進入多元架構,雲原生時代的挑戰與機遇架構
- 大模型時代:智慧設計的機遇與挑戰(附下載)大模型
- 【人工智慧】普通程式設計師想投身 AI 行業的機遇與挑戰人工智慧程式設計師AI行業
- 雲時代,運維面臨的挑戰與機遇運維
- 我國財富管理行業面臨的機遇與挑戰行業
- 應用開發機遇與挑戰並存,開發者如何乘風破浪
- API 管理在雲原生場景下的機遇與挑戰API
- 麥肯錫:中國流程行業的智慧化挑戰與機遇(附下載)行業
- IDC:中國計算機視覺行業應用的現狀、挑戰與契機計算機視覺行業
- 完數的Java多執行緒並行程式設計-平行計算Java執行緒並行行程程式設計
- 網路安全的2020:挑戰雖常在,機遇亦並存
- 人工智慧的失敗列子以及未來的挑戰與機遇人工智慧
- 完數的OpenMP並行程式設計-平行計算並行行程程式設計
- 完數的MPI並行程式設計-平行計算並行行程程式設計
- 物聯網產品開發市場的挑戰與機遇
- 2023,超級APP面臨的挑戰與機遇APP
- 高排放行業:低碳供應商的挑戰與機遇行業
- 人工智慧時代計算機架構的趨勢與挑戰人工智慧計算機架構
- 淺談巴西移動遊戲出海機遇與挑戰遊戲
- Win7停服背後:網安行業的挑戰與信創產業的機遇Win7行業產業
- 對話遊戲開發平臺Unity高管:疫情下的遊戲產業挑戰與機遇並存遊戲開發Unity產業
- 淺談.NET下的多執行緒和平行計算(十四)平行計算前言執行緒
- FIT 2019 | 安全人員面臨的機遇與挑戰
- 雲原生時代下,作業系統生態的挑戰與機遇作業系統
- 2022 DBA 角色轉換 挑戰 與 機遇
- 量子計算:聰明人的挑戰
- 全球移動遊戲市場增長強勁,中國遊戲出海機遇與挑戰並存遊戲
- 對實體店來說,電商直播系統的出現是機遇還是挑戰?