半導體技術的進步使單芯片多處理器成為現實并推動著多核計算技術的不斷進步。浙江大學從2006年開設單獨的多核課程,并聯合國內五所重點高校設計編寫了《多核程序設計》作為該課程的教材,對多核計算技術進行了全面深入的講解,以期由此完善學生的知識結構。
1多核計算技術的概述
隨著新材料的應用和新技術的發(fā)展,VLSI技術取得長足進步,在單個芯片上集成多個處理器核心構成多核處理器已經成為處理器技術的主流。按計算內核的對等與否,CMP可分為同構多核和異構多核。計算內核相同,地位對等的稱為同構多核。然而,一般認為處理器通用核的數目在超過16個后,再增加通用處理核的數目就難以帶來更大的性能提升。于是出現了一些為特別任務專門定制的專用處理核,包括面向科學計算等的“領域專用核”、圖形圖像處理和數字信號處理(DSP)等“行業(yè)專用核”。這些專用核的體系結構利用特定應用的特征進行定制,從而達到定制應用的高性能和高效率。
從2005年出現的英特爾與AMD的雙核處理器、2006年推出的4核處理器到2007年2月英特爾公司展示的80核處理器,處理器中集成核的數目呈現迅速增多的趨勢。除此之外,具有更多核和不同功能核的處理器也在研發(fā),例如整合了1025個簡單處理器的芯片Kilocore,包括1024個8位處理器和1個Power PC核。
伴隨著多核處理器的發(fā)展尤其是處理器核數目的增加與處理器核功能的變化,在體系結構、軟件、功耗和安全性設計等方面,巨大的挑戰(zhàn)也隨之而來。處理器的發(fā)展使得原有面向單核或者多處理器的軟件架構不適于在單芯片多處理器的硬件結構上充分利用多計算核心的能力,需要相應的軟件層面的共同發(fā)展。為此,軟件結構的變化尤其是針對多核硬件體系結構的程序設計成為有效發(fā)揮多核計算能力的重要方面。
為了適應技術的發(fā)展,為社會培養(yǎng)合格的計算機人才,在大學計算機教學中開設相應的多核計算課程勢在必行。計算機方向課程的開設尤其是教材的設計,不僅要注意到滿足完善學生知識結構,適應計算機技術迅速發(fā)展的情況,同時也需注意到社會對于多核計算技術方面人才的需求,通過合理的設計,滿足知識更新與就業(yè)兩方面的要求。
2多核課程設計
多核計算技術的發(fā)展使得計算機教學發(fā)生了變化,這種變化主要來自于多核計算技術所帶來的新的知識點。這些新的知識點主要包括:多核SOC芯片技術;多核芯片與傳統(tǒng)單核微處理器、SMP的區(qū)別;多核下的各種硬件設計技術(Cache與存儲一致性、網絡互連、IO管理);并行體系與多核體系結構;典型多核芯片介紹;嵌入式多核芯片技術;多核平臺結構與芯片組支持技術(包括固件技術);多核操作系統(tǒng);多核系統(tǒng)軟件對并行編程的支持;多線程編程對多核的支持;多核多線程編程技術(主要是關于Windows與Linux操作系統(tǒng));OpenMP對多核的支持;多核平臺上的編譯工具與編譯優(yōu)化技術;多核API優(yōu)化函數庫;多核多線程程序的性能評測工具與方法。
這些新知識點的出現,使得越來越多的高校開設多核課程以適應技術的發(fā)展與多核時代對高校計算機人才培養(yǎng)的新需求。例如,美國計算機專業(yè)最好的CMU、MIT、Backley、Harvard和Stanford五所高校,均通過增加新的課程或者在原有課程內容中增加多核內容的方式,以適應多核計算機的出現與發(fā)展。
因此,綜合考慮上述因素,并參考國外高校的課程開設方式,浙江大學開設了自己的多核課程。浙江大學以學校計算機教學的實際情況為基本出發(fā)點,讓學生了解當前計算機芯片設計領域中新興多核體系設計的基本原理、技術難點、目前發(fā)展狀況,以及對計算機領域帶來的相關影響等,以通過建立體系經典理論研究和實際的發(fā)展方向之間的橋梁,為將來從事體系結構領域、系統(tǒng)軟件領域以及相關領域的高水平研究打好扎實的基礎。這是浙江大學多核計算課程設計的目標,也是我們教材設計的主要目的。
通過分析多核的知識點,浙江大學將多核計算課程分成了兩個層次:以編程訓練為主的本科多核計算課程和以編程為基礎以多核理論與發(fā)展為主要內容的研究生課程。本科課程的名稱為并行計算與多核編程,作為專業(yè)選修課程。多核的本科課程完全以編程訓練為主,結合多核編程工具,通過編程作業(yè)鍛煉學生對多核編程能力的培養(yǎng)。對于研究生課程,名稱為多核計算,主要著眼于當前多核技術的研究熱點和多核技術的高級課題,在研究生的體系結構課程和超大規(guī)模集成電路基礎上作進一步提高,結合操作系統(tǒng)、編譯原理、編程方法等交叉學科,介紹在體系結構上的多核理論與相關學科對此的相應發(fā)展。
3多核課程教材設計
3.1概況
由于多核計算技術相對較新且仍在不斷發(fā)展,目前國內外多核計算方向的著作以科學論文為主,偏向于研究與探索,浙江大學結合科研的實際情況,由任課教師采用科學論文作為研究生課程的主要教學材料。
而對于基礎教材而言,由于多核計算方面的書籍還是剛剛起步,因此可供選擇的余地較少。此外,由于多核計算是一門動手能力和理論要求都很強的課程,需要更加重視實踐環(huán)節(jié),為學生設計實踐訓練,同時,目前多核底層調優(yōu)軟件是由英特爾公司推出,能實現多核的編譯、運行庫、性能測試、多線程檢測與優(yōu)化,對多核教學幫助極大。因此,浙江大學采用了基于英特爾的軟硬件,作為實踐的基礎培訓。有鑒于此,目前浙江大學的多核課程2006年使用的教材是由英特爾公司的(孟加拉)Shameem Akhter與(美)Jason Roberts撰寫、Intel出版的《Multi-core Programming: Increasing Performance through Software Multi- threading》,2007年3月電子工業(yè)出版社推出了由李寶峰、富弘毅、李韜三位博士翻譯的中文版,我們參與了該書的審稿工作。該書是國內第一本全面講解多核程序設計的書,同時,由于它介紹了基于Intel多核平臺的性能評測和調優(yōu)工具,相對適合于目前的教學。
由于該書的作者是英特爾的平臺結構師與軟件工程師,盡管參與了多核處理器的架構與軟件設計,對多核計算技術了解非常深入,但是其寫作目的與風格均是工程師寫給工程師的書,并不適用于大學教材。與此同時,由于多核計算技術畢竟是正在發(fā)展當中,目前國內外的確缺乏多核編程的教材。
3.2《多核程序設計》
為了適應多核計算技術的發(fā)展,促進國內多核課程的建設,浙江大學、清華大學、北京大學、復旦大學、上海交通大學合作編寫了《多核程序設計》教材,將于2007年7月由清華大學出版社出版。清華大學、北京大學、上海交通大學、復旦大學分別在2006年秋冬學期,開始開展多核方向的教學。
本書的主要目的是作為多核計算課程的教材使用,而從對多核技術知識點的分析可以發(fā)現,適合作為教材編寫的主要是多核體系結構程序設計的相關內容,因此本書在編寫時以多核計算技術的基礎知識概論為基礎,以多核程序設計方法為骨干,主要包括基礎并行程序設計方法、多線程基礎、利用線程API進行程序設計、OpenMP與MPI,以及多線程應用程序的調試和測試工具的使用等,以幫助大學生學習編寫多核體系結構下高性能程序代碼。
本書共分為八章,以多核技術導論為始,以多核軟件工具介紹為終,分別覆蓋了基本的多核體系基礎、并行計算基礎、多核體系下線程理論、Windows與Linux多線程編程與調優(yōu)、OpenMP多線程編程與調優(yōu)、MPI多線程編程與調優(yōu)和多核軟件工具的使用。從結構上看,本書的內容主要包括三個方面:
(1) 多核理論。這部分內容包括了本書前三章的內容。第一章為多核技術導論,簡要介紹微處理器發(fā)展史、并行計算機、超大規(guī)模集成電路與系統(tǒng)芯片發(fā)展、片上多核處理器架構與典型多核芯片架構、芯片組對多核的支持,以及操作系統(tǒng)對多核處理器的支持方法。第二章是并行計算基礎,介紹并行計算機體系結構、并行計算模型、進程與線程、并行編程環(huán)境、并行編程語言與編譯器、并行計算性能評測,并介紹常用并行數值算法,例如并行矩陣乘法、線性代數方程組并行求解方法、快速傅立葉變換。最后介紹并行編譯器。第三章詳細介紹線程的基本概念,包括多線程的概念,用戶級線程和內核級線程,多線程的映射模型,線程的生命周期,多線程環(huán)境下的進程控制語義,以及線程的同步,包括互斥量(mutex)、信號量、條件變量、鎖的粒度與死鎖。
(2) 多核編程與調優(yōu)。包括了本書第四至七章的內容,分別講述了不同操作系統(tǒng)與不同多線程編程技術下,怎樣進行多線程編程和調優(yōu)來充分利用多核處理器的效率。其中第四章是教學生如何在Windows下通過多線程方法進行多核編程及調優(yōu),首先介紹了Windows線程庫,然后通過例子介紹了使用win32線程API進行線程創(chuàng)建、管理、終結,并介紹線程執(zhí)行和資源存取方法,以及多線程調試與優(yōu)化技術,包括調試、跟蹤、線程命名等。第五章介紹了在Linux下使用多線程進行多核編程及調優(yōu)的方法,與前一章類似,首先介紹POSIX線程庫Pthreads,然后是結合例子介紹基本線程的操作與線程的屬性,最后是使用GDB 調試線程以及線程的調優(yōu)。第六章介紹OpenMP編程及性能優(yōu)化方法,結合使用Microsoft Visual Studio.Net 2005教育學生如何編寫OpenMP程序,并教育學生使用OpenMP編寫多線程應用程序的技巧,包括循環(huán)并行化、并行區(qū)域編程、線程同步,最后分析OpenMP多線程應用程序的性能。第七章是MPI編程及性能優(yōu)化,介紹了最常用和穩(wěn)定的MPICH安裝和配置過程,并詳細介紹了MPI編程基礎知識與MPI群集通信、MPI程序排錯方法與性能分析優(yōu)化方法。最后簡要介紹了MPI-2。
(3) 多核軟件工具。包括了本書第八章。由于目前的多核軟件工具基本上是由英特爾公司開發(fā)并提供教學使用,因此本章的工具介紹基本上以英特爾的各種調優(yōu)與性能分析工具為主,這既符合目前的實際教學狀況,也符合社會需求。第八章所介紹的多核軟件工具包括編譯器對多核的支持、VTune性能分析器、MKL數學核心函數庫、Thread Checker線程檢查器、Thread Profiler線程檔案器的使用與實驗。
由于多核課程是對動手實踐能力要求高的一門課程,在進行教材設計時,除了上述的書面教材之外,還需要設計配套的實驗教案等實踐教學內容。因此,本書在編寫時也設計并實現了完整的教案、實驗代碼與實驗環(huán)境,以便多核教學的正常進行。
《多核程序設計》一書體現了在本文第二節(jié)多核課程設計提出的多核課程教學的目標,結合了五所大學進行多核課程教學的教師們的經驗。我們將對《多核程序設計》一書的設計思想與結構展現在此,希望能夠起到拋磚引玉的作用,為國內高校的多核課程建設提供一個完整的教學過程示范,推動大學開展多核程序設計課程。
4總結與展望
本文提出了浙江大學多核課程教材的設計方法作為一種探索,希望為計算機教學課程體系在多核技術上的變化提供經驗。多核計算技術方興未艾,大學計算機課程教學需要適應多核計算機的發(fā)展與變化,不斷地更新多核課程的設計與內容。可以預見,未來對多核課程的設計必將推陳出新,同時,多核教材的設計也必然會受到影響,出現新的設計理念。