CSDN專訪中科院賈海鵬 給異構開發者的六個建議

2021-09-07 00:11:40 字數 3917 閱讀 6457

日前,csdn專訪了中科院助理研究員賈海鵬,他就異構計算的趨勢、開發現狀、amd新推出的huma(異構統一記憶體訪問)技術等話題分享了自己的看法。

csdn專稿 異構計算被視為計算機處理器繼單核、多核之後的第三個時代,它將實現使用不同型別指令集和體系架構的計算單元,比如cpu和gpu之間的「協同計算、彼此加速」,從而突破cpu發展的瓶頸,有效解決能耗、可擴充套件性等問題。而異構開發也在走進更廣的領域和開發者。日前,csdn專訪了中科院助理研究員賈海鵬,他就異構計算的趨勢、開發現狀、amd新推出的huma(異構統一記憶體訪問)技術等話題分享了自己的看法。

csdn:您如何看待異構計算/程式設計領域這些年來的技術演變、應用拓展狀況及未來發展?

賈海鵬:近年來,異構計算受到了越來越多的關注,這主要是因為由於材料、製造工藝、功耗和散熱的限制,傳統的通過提公升cpu時鐘頻率和核心數量來提高計算能力已經變的越來越困難。與此同時,gpu等專用計算單元擁有相對cpu高的多的計算能力、資料傳輸頻寬以及效能功耗比,但計算能力卻遠沒有得到充分利用。在這種情況下,如何有效利用計算系統中各種計算部件,並根據不同計算部件的硬體架構特點排程執行相應的計算任務,以充分發揮不同計算部件的計算能力,成為研究熱點,異構計算也應運而生。

總體上來講,異構計算共經過了三次技術演變:2023年gpgpu(general-purpose computing on gpu)的提出及應用推廣,gpu架構的革命性變革,使gpu具備了執行通用計算任務的能力;2023年cpu+gpu異構計算,cpu與gpu協同運作,充分發揮系統中各種處理器的計算能力;2023年即將來的異構融合計算,cpu與gpu(協處理器)整合到同一塊晶元上,以期待實現記憶體共享和統一位址訪問,消除不同處理器間的資料傳輸消耗。

當前,異構計算已經涵蓋了許多計算領域,從傳統科學計算(分子動力學,數值分析、計算流體動力學,量子化學等)到桌面級應用(影象處理、多**、立體3d製作、物體識別等),都可以看到異構計算的身影。

從某種意義上說,cpu+gpu(協處理器)的異構計算是未來計算的發展趨勢。2023年11月發布的世界top500高效能計算機,採用異構架構的高效能計算機有62套,其中titan高效能計算機更是榮膺榜首。而在桌面級甚至是移動應用領域,也有越來越多的應用程式移植到gpu上,以期望取得更好的效能或者是更好的能效比。面對繁雜的計算任務,根據處理器硬體架構的特點,讓不同型別的處理器各司其職,比如cpu負責邏輯密集型任務,而將計算密集型和資料密集型任務交給擁有更高計算能力和儲存頻寬的gpu負責,才能充分發揮其計算效能。充分發揮計算系統中不同架構處理器在不同方面的優勢,從而實現系統整體計算能力的最大化(或者最優化)利用是異構計算的真正意義所在。

然而,個人認為,異構計算推廣還需要解決兩個主要問題: 

1)程式設計難度大,開發成本高。gpgpu程式設計的乙個重要特點是「實現容易,優化難」:要達到理想效能,需要針對硬體特徵和應用程式特點,投入大量精力,進行各種優化方法組合的嘗試、折中和權衡;而優化工作的開展會增加程式出現bug的可能性。不幸的是,雖然amd和nvidia都發布了各自的除錯工具,然而目前gpu程式的除錯依然非常困難。軟體開發生態的構建是否能跟上硬體發展的步伐,是異構計算推廣的關鍵。

2)不同處理器間存在著「昂貴」的資料傳輸開銷。當前,cpu+gpu異構計算的模式是首先cpu將計算任務及所需資料傳遞給gpu,gpu計算任務完成後,在將計算結果返回給cpu。cpu和gpu之間的資料傳輸消耗了大量時間,甚至會完全抵消我們耗費心血優化gpu程式所帶來的效能提公升。減少甚至是消除不同處理器間的資料傳輸開銷,是異構計算發展的乙個重要問題。當前amd發布的apu和intel發布ivy bridge已經做了很好的嘗試。但兩者都沒有真正的實現異構融合:共享記憶體(統一位址訪問)以及完善的任務排程機制(合適的任務排程到合適的處理器上執行)。而amd採用huma技術的hsa(heterogeneous system architecture,異構系統架構)可能會帶來新的嘗試和突破。比較值得期待。

csdn:作為領域內的專業人士,您認為哪些開發者應該優先學習異構程式設計的技能?未來異構程式設計的技能會成為開發者的通用技能嗎?

賈海鵬:採用異構程式設計無非有兩個目的:一是追求高效能,二是追求最佳能效比。因此,開發實時性較強、效能要求較高或者注重能效比應用程式的開發人員可關注下異構計算,並學習相關技術。

個人認為異構計算是未來計算的發展趨勢。儘管廠商可能會盡可能的隱藏異構計算的底層細節,提供開發人員統一的開發介面,以降低開發人員負擔。甚至廠商可能會做到不會改變開發者程式設計習慣(當然這個很難)。然而,建立異構程式設計觀念,掌握異構程式設計技術應該對未來軟體開發人員的重要要求。

csdn:您如何看待amd最新推出的huma(異構統一記憶體訪問)技術對gpucpu融合帶來的影響力,它有哪些優勢和劣勢?(優缺點)

賈海鵬:huma技術對異構計算最大的貢獻是實現了cpu和gpu的記憶體共享,解決了cpu和gpu間資料傳輸所帶來的時間消耗,應該說是異構計算一次大的技術突破。然而,這個技術如何解決記憶體一致性問題,cpu和gpu共享記憶體是否會增加本來已經非常困難的異構程式設計和優化的難度,整個程式設計生態是否能夠跟上硬體發展的步伐,讓我們拭目以待。

csdn:hsa幫助開發者更高效、更容易的進行開發,並獲得可觀的效能提公升及功耗降低,但這還需要一至兩代產品更新才能實現。在當下,開發者學習和使用異構程式設計有價值嗎?

賈海鵬:hsa確實是異構計算的一次重要技術革新,表現究竟如何我們還需拭目以待。但在當前,異構計算依然是研究特點,cpu+gpu的異構計算模式在眾多領域中都得到了廣泛的應用。對於開發人員來說,特別是對於之前我提到過的對異構計算有需求的開發人員來說,學習異構程式設計和技術,掌握最底層和最前沿的異構程式設計和優化方法,非常重要,也非常有價值。

csdn:c++大師herb sutter曾發表過一篇著名的文章《the free lunch is over》,他表示程式設計師不斷獲取硬體公升級帶來幫助的日子已經結束了,平行計算或異構計算將是未來的趨勢。intel在內的公司不斷推出了多核、眾核處理器,雖然包括amd和英特爾等公司做了很大努力,開發者駕馭多執行緒的程式設計難度很大,現在學習異構開發的難度依然很大嗎?開發工具、函式、演算法成熟嗎?

賈海鵬:儘管廠商在降低異構程式設計難度上做了大量工作,也有效推動了異構計算的發展。但就我的開發經驗來說,異構程式設計「實現容易,優化難」的特點依然存在:

1)將程式移植到異構平台上相對簡單,但是要獲得高效能,需要進行不斷嘗試、勞心勞力的優化工作。例如gpu程式優化是各種優化方法相互權衡和折中的過程,很難說最大化某種優化方法後就一定會帶來效能提公升;而針對那些執行緒間負載不均衡或者是執行緒間存在依賴的非規則應用,在gpu這種大規模細粒度並行處理上的優化更是困難,需要如persistent thread,uberkernel,coarse-granularity parallelism,queue等新優化方法的開發和使用。

2)雖然各廠商都推出了各自的除錯工具,異構程式特別是gpu程式的除錯依然非常困難。

總之,雖然各廠商對異構程式設計都建立了良好的開發生態,但異構程式的開發成本依然很高,編寫高效能的異構程式依然很困難。

csdn:對想學習或入手異構程式設計的開發者有什麼建議嗎?

賈海鵬:異構程式設計就是追求高效能和好的能效比,其本質就是實現演算法特性向硬體架構特徵的高效對映。因此,根據我的經驗,學習異構程式設計需要以下幾點: 

1) 異構程式設計絕對不是對應用程式的簡單並行化,需要對演算法的深入了解 

2) 異構程式設計,程式效能與具體硬體架構相關,需要對目標硬體架構有個深入了解 

3) 可從乙個應用程式(比如矩陣乘)出發,逐步了解異構程式編寫和優化的主要技術 

4) 多coding,經驗很重要 

5) 多看文件,特別是隨sdk發布的程式設計指南和優化指導等官方文件 

6) 隨時關注硬體發展

中科院實習(6)

顯然,我不笨!magic文件十分之不豐富,很多東西都考自己摸索。上午,靈感迸發,連續總結 領悟出兩個要點,糾正了前兩天的錯誤猜測,更新了ppt文件。興奮之餘,打了兩個響指 哇咔咔 既然不笨,下午就開始看magic的原理性acm文件了,裡面講得比較詳細,一面向下看,一面印證著我以前的一些猜測,行雲流水...

中科院實習(8)

轉移到人大的朋友這邊來了,又是乙個新環境,早上自然又醒的很早了。這裡沒有農大涼快,不過比起武漢的溫度,我已經很感恩了!昨天跟hey,tm,逛過一下午動物園之後雙腳是完全不行了,到了 都只有乙個念頭 坐一下吧 但她們兩位卻彷彿沒有什麼事兒一樣 昨天晚上吹了一晚上的電扇,這貌似也是在北京第一次吹電扇了,...

中科院實習(5)

先說早上的乙個馬路偶見 過北四環馬路,一男一女,互不相識,車流從左到右,男靠左,在女之後。此男意欲速過馬路,正向前,突然減速,曲線變道,轉向女士右邊.乙個微妙地動作,卻看到了人性真實的猥瑣面 嘆息 照例和老師打過招呼,開終端。同時在紙上寫下今日計畫 我很nb地想,這個上午應該可以輕鬆搞定吧。事實證明...