

摘要:多核技術(shù)引起了包括編譯在內(nèi)的計(jì)算機(jī)技術(shù)的巨大變化。教育首先要解決如何設(shè)置多核課程中編譯原理知識(shí)點(diǎn)的問(wèn)題。本文以武漢大學(xué)“多核架構(gòu)及編程技術(shù)”課程為例,根據(jù)多核和編譯技術(shù)的發(fā)展和課程教學(xué)經(jīng)驗(yàn),對(duì)多核課程中的編譯原理知識(shí)點(diǎn)進(jìn)行分析,并提出課程內(nèi)容設(shè)置方面的要求。
關(guān)鍵詞:多核課程;編譯原理;知識(shí)點(diǎn)
多核技術(shù)的出現(xiàn)與快速發(fā)展使計(jì)算機(jī)技術(shù)發(fā)生了重大變化。多個(gè)處理器核心的出現(xiàn),為軟件在單處理器上的并行提供了豐富的硬件資源。為了充分利用這些計(jì)算資源,編譯技術(shù)需要從為單核編譯發(fā)展到為多核編譯,因此有了新的發(fā)展。為了應(yīng)對(duì)多核技術(shù)及其引起的相關(guān)計(jì)算機(jī)技術(shù)發(fā)展的需要,眾多高校都通過(guò)開(kāi)設(shè)多核課程的方式,將多核技術(shù)引入到計(jì)算機(jī)教育體系當(dāng)中。編譯是多核技術(shù)發(fā)展的重要推動(dòng)技術(shù)之一,多核資源的有效利用有賴于編譯對(duì)多核的支持。因此,在多核課程中,將編譯原理相關(guān)知識(shí)內(nèi)容融入進(jìn)來(lái),對(duì)多核課程中多核基本原理、多核編譯優(yōu)化方法教學(xué)和多核編譯優(yōu)化工具的使用具有重要作用。筆者以武漢大學(xué)“多核架構(gòu)及編程技術(shù)”課程為例,對(duì)多核課程中的編譯原理知識(shí)點(diǎn)進(jìn)行分析。
1“多核架構(gòu)及編程技術(shù)”課程概述
武漢大學(xué)從2005年就開(kāi)始關(guān)注多核技術(shù),并已經(jīng)開(kāi)始探索將多核技術(shù)引入到計(jì)算機(jī)教學(xué)體系當(dāng)中。隨后,武漢大學(xué)基于自身教學(xué)和科研積累,根據(jù)對(duì)多核技術(shù)的深入了解,對(duì)多核知識(shí)點(diǎn)進(jìn)行了分析,開(kāi)設(shè)了面向本科生的“多核架構(gòu)及編程技術(shù)”課程[1]。
1.1課程目標(biāo)
多核技術(shù)的出現(xiàn)使多線程在單處理器上的并行成為可能。而多核處理器則已經(jīng)成為了主流處理器。傳統(tǒng)面向單核處理器的程序設(shè)計(jì)方式正逐漸向多核并行程序設(shè)計(jì)遷移。學(xué)生需要學(xué)習(xí)和掌握多核相關(guān)知識(shí),才能夠更好地適應(yīng)技術(shù)發(fā)展和來(lái)自企業(yè)的需求。課程力求使學(xué)生在學(xué)習(xí)之后,能夠了解和熟悉多核的基礎(chǔ)理論,并在此基礎(chǔ)上掌握多核程序設(shè)計(jì)方法以及相關(guān)的多核優(yōu)化工具。為了更好地開(kāi)展多核課程教學(xué),課程可以分為兩個(gè)模塊,分別是理論教學(xué)模塊和實(shí)踐教學(xué)模塊。兩個(gè)模塊相輔相成,共同完成課程的教學(xué)目標(biāo)。多核架構(gòu)及編程技術(shù)課程設(shè)置如圖1所示。
1.2多核課程理論設(shè)置
多核技術(shù)的理論是多核課程的基礎(chǔ)。在“多核架構(gòu)及編程技術(shù)”中,我們將多核技術(shù)相關(guān)的基本理論進(jìn)行分層,形成層次化的理論教學(xué)內(nèi)容設(shè)置。首先將計(jì)算機(jī)處理器架構(gòu)的發(fā)展作為多核架構(gòu)的前導(dǎo)性內(nèi)容,然后是多核處理器體系結(jié)構(gòu),接下來(lái)介紹并行計(jì)算及其與多核技術(shù)的關(guān)系,之后介紹多核平臺(tái)上的程序設(shè)計(jì)技術(shù),最后是與實(shí)踐關(guān)系密切的多核平臺(tái)程序調(diào)試技術(shù)和基于編譯優(yōu)化的多核調(diào)優(yōu)技術(shù)。通過(guò)層次化的理論設(shè)置,讓學(xué)生形成多核技術(shù)理論的整體框架,構(gòu)建進(jìn)一步學(xué)習(xí)和開(kāi)展實(shí)踐的扎實(shí)基礎(chǔ)。
1.3多核課程實(shí)踐設(shè)置
由于“多核架構(gòu)及編程技術(shù)”是面向本科生的,因此,教學(xué)重點(diǎn)之一是如何讓學(xué)生掌握多核程序設(shè)計(jì)技術(shù)。為此,課程組設(shè)計(jì)兩大類的實(shí)踐教學(xué)方式:基礎(chǔ)實(shí)驗(yàn)和課程設(shè)計(jì)。其中,基礎(chǔ)實(shí)驗(yàn)側(cè)重基于多核體系結(jié)構(gòu)的程序設(shè)計(jì),包括基本的多核并行程序設(shè)計(jì),Windows和Linux環(huán)境下的多核程序設(shè)計(jì),以及常用的庫(kù)和工具軟件的使用。通過(guò)基礎(chǔ)實(shí)驗(yàn),學(xué)生能夠掌握最為基本的多核程序設(shè)計(jì)方法。課程設(shè)計(jì)則是綜合性實(shí)踐,要求學(xué)生對(duì)多核知識(shí)體系比較了解并具備多核程序設(shè)計(jì)能力,因此既是對(duì)學(xué)生多核程序設(shè)計(jì)能力的全面鍛煉,也是對(duì)其學(xué)習(xí)效果的全面檢驗(yàn)。
2多核課程中編譯原理內(nèi)容設(shè)置的必要性
半導(dǎo)體技術(shù)的進(jìn)步推動(dòng)著多核技術(shù)的不斷發(fā)展。要充分利用多核技術(shù)提供的豐富硬件資源,就需要解決如何使軟件能夠以多線程的方式進(jìn)行并行的問(wèn)題。而解決這一問(wèn)題的核心方法之一,就是利用編譯技術(shù)對(duì)已有的軟件進(jìn)行多核多線程的優(yōu)化,或是通過(guò)編譯的支持,來(lái)完成多核多線程的程序設(shè)計(jì)[2-3]。
已有眾多的研究者在開(kāi)展相關(guān)的多核編譯和多核優(yōu)化的研究。這對(duì)于多核技術(shù)和編譯技術(shù)的發(fā)展都將起到很好的推動(dòng)作用。而隨著多核技術(shù)的不斷推廣,面向多核的應(yīng)用正在快速增加。因此,在計(jì)算機(jī)及相關(guān)課程的設(shè)置中,將多核環(huán)境下的編譯尤其是編譯優(yōu)化技術(shù)作為關(guān)鍵內(nèi)容,就顯得十分必要。
由于多核環(huán)境下的編譯是多核技術(shù)和編譯技術(shù)的融合,因此,進(jìn)行課程設(shè)置時(shí)就需要充分考慮兩者如何進(jìn)行結(jié)合,來(lái)更好地開(kāi)展教學(xué)活動(dòng)。在已有的編譯原理課程中,增加新出現(xiàn)的多核編譯內(nèi)容面臨巨大的挑戰(zhàn)。首先,在傳統(tǒng)的編譯原理課程中,往往是單核單處理器的編譯技術(shù),不包含并行編譯的技術(shù)或者很少包含這部分內(nèi)容。其次,多核編譯需要并行計(jì)算的相關(guān)基礎(chǔ)理論知識(shí)作為先導(dǎo)基礎(chǔ)知識(shí),這在傳統(tǒng)編譯原理課程中是無(wú)法實(shí)現(xiàn)的。最后,傳統(tǒng)的編譯原理課程往往已經(jīng)具備了較為完備的課程結(jié)構(gòu),增加新的多核編譯理論和實(shí)踐內(nèi)容會(huì)產(chǎn)生較大影響。因此,在已有的編譯原理課程中,增加新的多核編譯教學(xué)內(nèi)容尚需進(jìn)行研究;而現(xiàn)有的編譯原理課程中也是以既有編譯原理教學(xué)內(nèi)容為主[4-6]。
多核課程的核心就是如何利用多核技術(shù)提供的硬件資源來(lái)提高程序的運(yùn)行效率。在進(jìn)行“多核架構(gòu)及編程技術(shù)”課程設(shè)計(jì)時(shí),根據(jù)教學(xué)目標(biāo),多核技術(shù)利用片上多核處理器資源進(jìn)行線程級(jí)并行,是多核課程中的核心教學(xué)內(nèi)容之一。這就離不開(kāi)編譯的支持。由此可見(jiàn),在多核課程中設(shè)置編譯原理內(nèi)容,是多核課程設(shè)計(jì)本身的必然要求,并已經(jīng)成為部分高校多核課程設(shè)置的選擇[7-8]。
在開(kāi)展多核編譯及其優(yōu)化的教學(xué)之前,首先需要學(xué)生對(duì)并行計(jì)算、多核體系結(jié)構(gòu)等理論具有相當(dāng)程度的理解,才能進(jìn)一步學(xué)習(xí)。在多核課程中,并行理論、基本多核體系結(jié)構(gòu)和多核程序設(shè)計(jì)方法都是不可或缺的教學(xué)內(nèi)容。因此,在多核課程中安排多核編譯內(nèi)容,有利于學(xué)生更好地學(xué)習(xí)。
由于多核編譯仍然在發(fā)展當(dāng)中,因此它既面臨著應(yīng)用的需求,也是當(dāng)前科研的前沿內(nèi)容之一。要開(kāi)展多核編譯的教學(xué),就要充分考慮課程所面向的對(duì)象,合理地進(jìn)行多核編譯具體內(nèi)容的安排。
武漢大學(xué)在進(jìn)行“多核架構(gòu)及編程技術(shù)”設(shè)計(jì)時(shí),重點(diǎn)考慮如何安排相關(guān)的編譯原理內(nèi)容。根據(jù)課程組在教學(xué)和科研方面積累的經(jīng)驗(yàn),多核編譯是多核技術(shù)的關(guān)鍵內(nèi)容。在進(jìn)行多核程序設(shè)計(jì)和優(yōu)化時(shí),基于多核編譯的優(yōu)化是重要的方法,也是多核程序優(yōu)化工具的基礎(chǔ)。因此,武漢大學(xué)“多核架構(gòu)及編程技術(shù)”將多核編譯作為必要教學(xué)內(nèi)容安排。
3多核課程中編譯原理知識(shí)點(diǎn)
多核課程中的編譯原理內(nèi)容是多核編譯相關(guān)。然而,當(dāng)前多核環(huán)境下的編譯技術(shù)仍然處在發(fā)展當(dāng)中。因此,在科學(xué)研究領(lǐng)域,多核編譯技術(shù)不斷創(chuàng)新;而在實(shí)際的應(yīng)用領(lǐng)域,更多的是將傳統(tǒng)并行編譯技術(shù)進(jìn)行優(yōu)化,以應(yīng)用到多核上。這就給多核課程中編譯原理內(nèi)容的設(shè)置帶來(lái)了挑戰(zhàn)。節(jié)能型多核課程中編譯原理內(nèi)容的設(shè)置,需要解決兩個(gè)問(wèn)題,首先是多核課程究竟需要哪些編譯原理的知識(shí)點(diǎn);其次是如何安排課程中相關(guān)編譯原理的知識(shí)點(diǎn)。
3.1基本知識(shí)點(diǎn)分析
多核編譯是在多核基礎(chǔ)上編譯的進(jìn)一步發(fā)展。在傳統(tǒng)的編譯原理課程中,由于教學(xué)目標(biāo)是讓學(xué)生學(xué)習(xí)編程語(yǔ)言的理論與方法,了解編程語(yǔ)言的實(shí)現(xiàn)。因此,在進(jìn)行編譯原理的教學(xué)時(shí),基本的教學(xué)內(nèi)容包括了詞法分析、語(yǔ)法分析、語(yǔ)義檢查、代碼生成與優(yōu)化等方面,主要關(guān)注的也是單核處理器上的編譯原理教學(xué)。
而多核課程中的編譯相關(guān)內(nèi)容則涉及到以多核處理器為基本硬件平臺(tái)的編譯方法及優(yōu)化工具。在選擇教學(xué)內(nèi)容方面,就與傳統(tǒng)的編譯原理課程有很大的區(qū)別。在多核課程中,貫穿整個(gè)課程的主要教學(xué)思想是要讓學(xué)生掌握多核并行的概念,了解相關(guān)理論和方法,并學(xué)會(huì)多核多線程的并行程序設(shè)計(jì),掌握多核程序優(yōu)化工具。
這是一個(gè)連續(xù)的過(guò)程,對(duì)多核編譯的知識(shí)點(diǎn)選擇有重要影響。
因此,多核課程中需要的知識(shí)點(diǎn)就與多核課程本身的教學(xué)內(nèi)容設(shè)置相關(guān)聯(lián)。圖1所示的多核課程理論設(shè)置部分,要實(shí)現(xiàn)多核課程良好的教學(xué)效果,就需要將多核編譯與多核理論進(jìn)行對(duì)應(yīng),主要知識(shí)點(diǎn)如下。
1) 多核技術(shù)對(duì)編譯的要求。多核技術(shù)的出現(xiàn)使并行在單個(gè)處理器上得以實(shí)現(xiàn),并得到了越來(lái)越廣泛的應(yīng)用。然而,如何將現(xiàn)有軟件并行化,如何將完成的多線程程序轉(zhuǎn)化為高效率的并行代碼,就是編譯的工作。這將幫助學(xué)生初步了解多核技術(shù)中編譯的重要性。
2) 并行編譯理論和技術(shù)。這是與并行計(jì)算相關(guān)的編譯理論和技術(shù)。在進(jìn)行并行計(jì)算教學(xué)的基礎(chǔ)上,適當(dāng)加入并行編譯的相關(guān)內(nèi)容,讓學(xué)生了解在并行計(jì)算中,編譯器如何發(fā)現(xiàn)程序的并行性,如何對(duì)計(jì)算進(jìn)行分布,如何處理計(jì)算任務(wù)之間的通信。這將使學(xué)生更好地掌握多核處理器上線程的并行。
3) 多核編譯及其優(yōu)化。這部分內(nèi)容主要介紹多核與編譯技術(shù)的關(guān)系,并將多核編譯的內(nèi)容引入。在進(jìn)行多核程序設(shè)計(jì)時(shí),對(duì)代碼進(jìn)行優(yōu)化將能夠進(jìn)一步提高代碼效率。
4) 多核編譯優(yōu)化工具。完成多核程序的設(shè)計(jì)后,一項(xiàng)重要的工作就是對(duì)程序進(jìn)行測(cè)試,找出可優(yōu)化的部分。借助于多核編譯優(yōu)化工具是常用的手段。對(duì)多核編譯優(yōu)化工具的了解和使用,將幫助學(xué)生建立多核程序設(shè)計(jì)優(yōu)化的基本思想。
上述四個(gè)知識(shí)點(diǎn)是相輔相成的。在開(kāi)展多核教學(xué)時(shí),通過(guò)將編譯原理的知識(shí)點(diǎn)與多核技術(shù)的結(jié)合,學(xué)生能夠更好地理解多核并行、多核程序優(yōu)化的基本思想,并能夠更好地學(xué)習(xí)多核編譯優(yōu)化工具的使用。
3.2課程內(nèi)容設(shè)置
多核課程中編譯原理的具體內(nèi)容安排需要充分考慮課程教學(xué)的需要,尤其是本科生對(duì)教學(xué)內(nèi)容的接受程度。由于多核課程涉及到計(jì)算機(jī)體系結(jié)構(gòu)、程序設(shè)計(jì)、編譯原理等課程;因此,首先要求學(xué)生已經(jīng)學(xué)習(xí)過(guò)計(jì)算機(jī)體系結(jié)構(gòu);熟悉程序設(shè)計(jì)方法并至少掌握了一門程序設(shè)計(jì)語(yǔ)言;已經(jīng)完成了編譯原理課程的學(xué)習(xí)等。在多核課程中,將上述內(nèi)容作為學(xué)生已掌握的知識(shí)。尤其是對(duì)于多核編譯來(lái)說(shuō),如果學(xué)生不熟悉編譯原理的內(nèi)容,在多核課程有限的編譯原理課時(shí)安排中,很難進(jìn)行學(xué)習(xí)和理解,反而會(huì)影響教學(xué)效果?;谏鲜鲈?,多核課程中編譯原理知識(shí)點(diǎn)確定后,對(duì)具體內(nèi)容的選擇原則是與多核密切相關(guān)且難度適中,不超出本科生的學(xué)習(xí)能力。
多核課程中的編譯原理知識(shí)點(diǎn)在課程中起到非常重要作用。在設(shè)置課程內(nèi)容時(shí),可以采用兩種方法,一種是將與多核相關(guān)的編譯原理知識(shí)點(diǎn)集中設(shè)置;另一種則是將相關(guān)內(nèi)容分散開(kāi),將之與多核課程的各部分內(nèi)容相融合。在前一種設(shè)置方法中,編譯原理知識(shí)點(diǎn)集中,有利于學(xué)生建立多核編譯的體系。但是由于課程的主要關(guān)注點(diǎn)是多核,因此集中設(shè)置的編譯原理知識(shí)點(diǎn)將會(huì)造成多核與編譯知識(shí)點(diǎn)的脫節(jié)。而在后一種方法中,編譯原理的知識(shí)點(diǎn)分布在整個(gè)多核課程當(dāng)中,與對(duì)應(yīng)的多核內(nèi)容進(jìn)行結(jié)合,有利于學(xué)生學(xué)習(xí)多核課程。
此外,多核課程面向本科教學(xué),在編譯課程內(nèi)容上必須與實(shí)際的多核程序設(shè)計(jì)方法和語(yǔ)言相結(jié)合。同時(shí),只有了解和掌握了多核程序設(shè)計(jì)方法和語(yǔ)言,學(xué)生才能夠進(jìn)行實(shí)踐,解決實(shí)際問(wèn)題。在多核課程當(dāng)中,目前主要的多核程序設(shè)計(jì)方法和語(yǔ)言包括OpenMP、MPI以及在操作系統(tǒng)支持下的多線程編程。OpenMP和MPI均是傳統(tǒng)的并行程序設(shè)計(jì)語(yǔ)言,它們也可以在多核上使用,并且具有較好的效率。盡管仍然需要改進(jìn)和優(yōu)化,但其已在多核領(lǐng)域得到了應(yīng)用。而多線程編程則在不同操作系統(tǒng)下具有各自的特色,對(duì)多線程編程的了解和掌握,有助于學(xué)生建立多線程的程序設(shè)計(jì)思維,并實(shí)際掌握多核多線程的程序設(shè)計(jì)技術(shù)。
在課程內(nèi)容安排上,在多核課程的每個(gè)理論部分當(dāng)中,都有與之相關(guān)的多核編譯內(nèi)容。通過(guò)多核理論讓學(xué)生建立多核技術(shù)的整體框架。在此基礎(chǔ)上,部分
多核編譯內(nèi)容的加入,則有利于學(xué)生了解多核體系結(jié)構(gòu)下對(duì)系統(tǒng)軟件的影響以及系統(tǒng)軟件對(duì)多核提供的知識(shí),深入理解多線程在多核平臺(tái)上并行的機(jī)制。
4教學(xué)效果
武漢大學(xué)“多核架構(gòu)及編程技術(shù)”課程自開(kāi)設(shè)已有5年,通過(guò)該課程學(xué)習(xí)了多核技術(shù)的學(xué)生已達(dá)數(shù)百人。為了對(duì)課程進(jìn)行改進(jìn)和提升,我們進(jìn)行了有針對(duì)性的課程教學(xué)效果調(diào)查。調(diào)查共發(fā)放問(wèn)卷140份,有效問(wèn)卷127份。以下是課程調(diào)查中與編譯原理部分相關(guān)的問(wèn)題。
問(wèn)題1(Q1):多核編譯的內(nèi)容是否容易理解?
問(wèn)題2(Q2):多核編譯的內(nèi)容是否有助于課程內(nèi)容的學(xué)習(xí)?
問(wèn)題3(Q3):多核編譯的學(xué)習(xí)對(duì)進(jìn)一步學(xué)習(xí)多核技術(shù)是否有幫助?
調(diào)查結(jié)果如圖2所示。從圖2中可以看出,在課程中安排的多核編譯內(nèi)容基本上達(dá)到了教學(xué)目標(biāo)。從學(xué)生學(xué)習(xí)反饋的結(jié)果來(lái)看,課程中的多核編譯內(nèi)容設(shè)置較為合理,能夠與多核內(nèi)容相結(jié)合,對(duì)學(xué)生多核技術(shù)的學(xué)習(xí)起到了幫助作用。
5結(jié)語(yǔ)
多核技術(shù)的出現(xiàn)與快速發(fā)展帶來(lái)了計(jì)算機(jī)技術(shù)的變革,這既導(dǎo)致了計(jì)算機(jī)體系結(jié)構(gòu)、操作系統(tǒng)、編譯、程序設(shè)計(jì)等方面的技術(shù)進(jìn)步,又是對(duì)計(jì)算機(jī)教育的巨大挑戰(zhàn)。為了應(yīng)對(duì)這一挑戰(zhàn),很多高校都開(kāi)設(shè)了多核課程。多核編譯為利用多核技術(shù)提供了關(guān)鍵支持。在多核課程的建設(shè)過(guò)程中,一個(gè)重要的問(wèn)題是如何設(shè)置編譯原理的教學(xué)。我校在多核課程中進(jìn)行了多核編譯技術(shù)知識(shí)點(diǎn)設(shè)置的研究。從教學(xué)效果的調(diào)查可以發(fā)現(xiàn),在多核課程中安排編譯原理內(nèi)容非常必要,教學(xué)效果反映出提出編譯原理知識(shí)點(diǎn)的合理性。在接下來(lái)的教學(xué)工作中,我們將進(jìn)一步探索多核課程中編譯原理教學(xué)內(nèi)容的選擇和教學(xué)方法等問(wèn)題。
參考文獻(xiàn):
[1]