1引言
華南理工大學軟件學院和計算機科學與工程學院在多核微處理器系統出現之初,就已經意識到該技術對軟件設計的重大影響,開始研究相關技術和規劃設立“多核軟件設計”課程。2006年12月,作為Intel大學合作計劃的合作伙伴,華南理工大學派遣本課程的負責教師參加了相關技術培訓。2007年3月,該課程進入“Intel大學合作計劃”,并接收了Intel公司捐贈的相關實驗設備。2007年6月,該課程被批準為2007年度“教育部-Intel精品課程”建設項目。
2“多核軟件設計”課程的知識體系
根據多核軟件技術本身的特點,以及我校整體課程體系情況,學院將“多核軟件設計”課程的主要內容設定為四
個主要部分:基本理論知識,多核軟件設計技術,基于多核處理器的并行算法設計與實現,多核軟件性能分析工具的使用。
2.1基本理論知識
該部分主要介紹多核軟件設計的硬件和操作系統平臺基礎,以期讓學生掌握多核軟件設計的基本原理。
(1) 多核處理器體系結構。此部分將重點講授基于地址空間共享機制的多核處理器體系結構的主要技術特征,介紹以Intel公司為代表的主流多核微處理器產品,并根據多核處理器的發展介紹其他有代表性的多核微處理器體系結構。
(2) 多核處理器上的操作系統。該部分將首先回顧線程和進程的基本概念,繼而討論操作系統對線程的不同實現思路(內核級、應用級、混合型)和特點。在此基礎上,介紹多核處理器上操作系統的關鍵性技術問題,重點介紹Windows 2000操作系統中多核處理器的線程調度機制。
2.2多核軟件設計技術
這部分內容主要講授基于Linux、Windows等操作系統平臺上多線程程序設計的基本操作系統原語,以及OpenMP的基本設計方法,以期讓學生掌握使用多線程方法進行多核軟件設計的基本技能。
(1) 基于Linux平臺的多線程程序設計方法。該部分主要講授PThread線程庫中的主要API接口函數,包括線程創建、撤銷、互斥鎖、條件變量、信號量,等,并通過N柵欄和生產者/消費者兩個問題介紹上述API接口函數的使用。
(2) 基于Windows平臺的多線程程序設計方法。該部分主要講授Windows平臺上的多線程API接口函數,包括線程創建、撤銷、掛起/恢復、優先級設置、睡眠、臨界區,等。
(3) 基于OpenMP的多核軟件程序設計方法。該部分主要講授OpenMP的主要原理和特點,編譯制導語句格式,語句中經常使用的制導命令和子句,重點介紹變量屬性、線程分配策略、規約語句主要內容。
2.3并行算法設計基本方法和實例分析
這部分內容主要講授并行計算程序設計的一般原理,以及結合實例說明在多核處理器平臺上使用多線程方法設計并行程序的方法。
(1) 并行程序設計的基本原理。該部分首先講授任務依賴圖,引入并發度、關鍵路徑、粒度等基本概念,然后介紹了三種基本的任務分解方法,最后圍繞加速比、執行效率、成本等概念,講授Amdahl定律。
(2) 并行程序設計實例分析。該部分有針對性地選擇了三個實例:高斯消去法,多路歸并排序和蒙特卡羅法求PI值。其中,高斯消去法主要介紹數值類型計算中的數據劃分方法,多路歸并排序主要介紹非數值計算中比較復雜的負載均衡問題,蒙特卡羅法則是通過多線程共享互斥的隨機數產生過程而對性能 產生的副作用,來討論多線程程序設計中可能出現的問題。
2.4多核軟件的性能分析方法和工具
這部分內容以Intel公司的VTune性能分析工具為基礎,介紹了多核軟件實際運行性能的分析和優化方法。首先介紹了性能分析工具中采樣方式和調用圖方式的工作原理,然后介紹了Thread Checker工具中關于數據競爭、死鎖、關鍵路徑、負載均衡等重要問題的方法。
3“多核軟件設計”課程建設的幾點經驗
“多核軟件設計”是當前新興的軟件設計方法和技術,它需要結合計算機系統結構、操作系統等基礎理論知識,還需要掌握并行算法設計的基本思想和方法,以改進和優化已有的串行程序設計。這對課程的教學和研究都提出了新的要求。我們在該課程的建設中在以下方面取得了一些經驗。
3.1重視科研工作和教學的聯系,以最新科研成果帶動教學水平的提高
本課程團隊長期從事計算機系統結構和基礎軟件的研究工作,對當前多核處理器技術的發展比較了解,充分認識到多核處理器體系結構對已有軟件設計方法提出的新挑戰和新問題,并在多核處理器出現之初就搭建了相關實驗平臺,開始了多核軟件設計的研究工作。正是這些研究工作使得我們具備了多核軟件設計的經驗,掌握了其關鍵技術,認識到其中可能存在的誤區和問題,這為后續的課程建設奠定了堅實的基礎。
同時,在科研工作中我們積累了一批多核軟件的開發成果,這些成果直接為建立多核軟件設計的實踐案例提供了豐富的素材。
3.2重視案例教學和動手實踐能力的培養
如何通過多核體系結構提升軟件的性能是本課程的核心目標,這需要學生具備一定的并行算法設計能力。針對本科學生的知識水平和接收能力,本課程盡量簡化了相關的理論內容,而采用學生熟悉的串行算法的并行化過程作為教學案例。通過對這些教學案例的深入分析,使得學生能比較直觀地理解并行算法設計的基本思路和方法。
同時,本課程還充分利用已有的多核計算機系統,特別是Intel公司捐贈的4核和8核服務器,為學生提供了良好的多核軟件設計實踐環境。通過對兩個經典串行問題(優先級查找和K值算法)并行化改造過程的實踐,提高分析和解決問題的能力,以及實際動手編程的能力。
3.3結合廣東軟件產業的實際情況,設定教學內容
廣東省國內軟件產業的重要基地之一,在面向商業應用軟件開發方面具有很強的優勢,因此,本課程教學內容和實驗案例中大多以廣東省應用最為廣泛的商業計算核心并行化為主導,突出了經典的非數值計算問題,從而增強學生的學習興趣和未來解決實際問題的能力。
4總結
“多核軟件設計”是隨著多核處理器的出現而發展起來的一門新興課程,內容涉及計算機體系結構、操作系統和并行算法等多個基礎知識領域。在華南理工大學的“多核軟件設計”課程中,突出了教學實踐環節,強化學生對多核軟件設計基本技術的訓練,引導學生自主分析、設計、實現和評估多核處理器上的經典并行算法,并利用多核軟件分析工具對已有軟件進行性能分析和改進,以期增強學生利用多核處理器并行特性自主解決實際問題的能力。
多核處理器技術和相關的軟件設計技術依然是當前發展非常迅速的一個領域。在未來的教學過程中,本課程將及時汲取相關領域的最新研究成果,不斷更新教學內容,加強實踐素材,進一步提高該課程的教學質量和水平。
課程教材:
[1] Shameem Akhter, Jason Roberts著,李寶峰富弘毅李韜譯,多核程序設計技術,電子工業出版社 , 2007,ISBN 978-7-121-03871-6
課程課件和實驗案例網站:
http://www.gdsoftwarelab.cn/uploadfile/Multicore/index.htm