文章編號:1672-5913(2008)20-0169-03
摘 要:本文闡述了在多核編程課程中采用的多樣的教學(xué)方法。首先介紹課程的總體規(guī)劃,再具體論述理論教學(xué)與實(shí)踐教學(xué)的教學(xué)過程和手段,以及討論課堂的設(shè)計(jì)思路,最后總結(jié)了教學(xué)效果和意義。
關(guān)鍵詞:多核編程;教學(xué)方法;多線程開發(fā)思想
中圖分類號:G642 文獻(xiàn)標(biāo)識碼:B
2002年,為支持教育部國家示范性軟件學(xué)院項(xiàng)目,Intel啟動(dòng)大學(xué)軟件學(xué)院計(jì)劃,促進(jìn)軟件類課程建設(shè),協(xié)同培養(yǎng)實(shí)用型、復(fù)合型的軟件人才。2007年我校與Intel開展合作,將目前主流的多核技術(shù)融入現(xiàn)行的本科教學(xué)計(jì)劃中,成立課程組,開設(shè)了一門專業(yè)課程——“多核編程”。目前該課程已經(jīng)開設(shè)兩年,現(xiàn)將在本課程中的一些教學(xué)方法、心得與各位同仁分享。
1 課程介紹
本課程主要內(nèi)容包括多核體系結(jié)構(gòu)介紹,多線程開發(fā)思想,多線程程序設(shè)計(jì)與實(shí)現(xiàn),多線程程序編譯、分析工具的應(yīng)用,多線程編程方法學(xué)等。由于本課程授課內(nèi)容比較新穎,與現(xiàn)今的多核技術(shù)密切相關(guān),因此對學(xué)生要求較高,需要學(xué)生有較好的分析和編寫串行程序的能力,具備操作系統(tǒng)等相關(guān)課程的知識,因此本課程在大三下學(xué)期開設(shè)。
本課程以一條主線貫徹始終,反復(fù)重復(fù)、不斷強(qiáng)化為指導(dǎo)思想和教學(xué)方法。即以培養(yǎng)學(xué)生多線程開發(fā)思想為教學(xué)主線,以在多核平臺上編寫多線程程序?yàn)閷?shí)踐教學(xué)手段,使學(xué)生掌握多線程開發(fā)的思想并在不斷實(shí)踐中反復(fù)重復(fù)加以鞏固強(qiáng)化,提高學(xué)生對多線程問題的分析和解決能力,為今后的學(xué)習(xí)打下基礎(chǔ)。
本課程注重實(shí)踐環(huán)節(jié),上機(jī)實(shí)踐占總課時(shí)50%。課程的難點(diǎn)在于打破學(xué)生已經(jīng)固有的串行編程思想,建立多線程開發(fā)思想。
2 教學(xué)方法設(shè)計(jì)
在整個(gè)教學(xué)過程中,分為理論教學(xué)和實(shí)踐教學(xué)兩部分。在課程安排上兩部分交替進(jìn)行,相輔相成,并始終貫穿多線程開發(fā)思想這一主線,讓學(xué)生在實(shí)踐中不斷強(qiáng)化,加深理解直至靈活運(yùn)用。
理論教學(xué)旨在幫助學(xué)生理解和掌握多核概念,多線程開發(fā)思想以及主要編程語言的應(yīng)用等內(nèi)容。實(shí)踐課程旨在通過實(shí)際的操作鞏固理論課上所學(xué)的知識,采用相關(guān)Intel多線程工具對程序進(jìn)行性能分析、調(diào)優(yōu)等。此外,討論環(huán)節(jié)的設(shè)置也是本課程教學(xué)特色之一。討論環(huán)節(jié)的展開加強(qiáng)了學(xué)生間的知識交流與自主學(xué)習(xí)的能力,也將理論教學(xué)與實(shí)踐教學(xué)融為一體。
2.1 理論教學(xué)
在理論教學(xué)中圍繞多線程開發(fā)思想這一主線展開。在授課中,本課程組始終保持以學(xué)生為本的態(tài)度,采取從學(xué)生現(xiàn)有知識體系出發(fā),逐漸過渡學(xué)習(xí)新知識的教學(xué)方法,良好的保證了學(xué)生對授課內(nèi)容的理解和接受程度。在這一過程中,采取了大量舉例、類比、圖示等分析方法。
多線程開發(fā)思想主要描述了多線程程序的開發(fā)流程,如圖1所示,大體上分為五個(gè)階段。每個(gè)階段的授課由淺入深,讓學(xué)生明確在每個(gè)階段對問題的分析方法,解決方案以及可以利用的輔助相關(guān)軟件等內(nèi)容。下面將針對某一個(gè)階段的教學(xué)方法展開論述。
圖1 多線程開發(fā)流程簡圖
在多線程開發(fā)流程中任務(wù)分解,設(shè)計(jì)并行算法這一階段(如圖1第3階段)較為重要,它是多線程化的前提和依據(jù)。這一階段需要學(xué)生掌握任務(wù)分解的含義,任務(wù)分解的主要方法,這些方法的含義、特點(diǎn)、優(yōu)缺點(diǎn)、適用條件,以及在明確任務(wù)分解方法的基礎(chǔ)上如何深入設(shè)計(jì)并行算法等內(nèi)容。
在講述了這階段的理論內(nèi)容后,為了幫助學(xué)生理解這階段的內(nèi)容,在授課過程中列舉了大量現(xiàn)實(shí)生活的例子,例如種樹。假設(shè)兩人共同完成10棵樹的栽種工作,工作分為挖坑和栽種兩個(gè)任務(wù),這時(shí)對這一項(xiàng)工作來說有兩種協(xié)調(diào)方法:(1)一人挖坑,一人種樹;(2)每人負(fù)責(zé)五棵樹的挖坑和栽種工作。這兩種協(xié)調(diào)方法剛好符合任務(wù)分解中任務(wù)分解和數(shù)據(jù)分解兩種分解方法。到這里學(xué)生已經(jīng)比較明確這兩種分解的含義和不同之處,接著以例子和理論相互對比的方法深入分析這兩種分解的特點(diǎn)、優(yōu)缺點(diǎn)以及適用條件。同時(shí)與操作系統(tǒng)中的線程同步,資源競爭等概念相聯(lián)系,使學(xué)生在理解上沒有障礙。接著引導(dǎo)學(xué)生設(shè)計(jì)該問題的簡明并行算法,讓學(xué)生明確實(shí)際問題如何轉(zhuǎn)化為算法,進(jìn)而轉(zhuǎn)化為程序,從而使問題得以解決。簡明算法如下所示。
//第一種協(xié)調(diào)方法的算法:(1)一個(gè)人挖坑,一個(gè)人種樹
void caving();
void planting();
int main(){
init(); //系統(tǒng)初始化。
createthread(caving) ;// 生成一個(gè)線程(相當(dāng)于一個(gè)人)完成挖坑的工作。
createthread(planting) ;// 生成一個(gè)線程(相當(dāng)于一個(gè)人)完成栽種的工作。
wait(); //線程同步。
return 0;
}
//第二種協(xié)調(diào)方法的算法:每人負(fù)責(zé)五棵樹的挖坑和栽種工作。
void caving_planting ();
int main(){
init(); //系統(tǒng)初始化。
createthread(caving_planting (前五棵樹) );// 生成一個(gè)線程(相當(dāng)于一個(gè)人)完成前五棵樹的工作。
createthread(caving_planting (后五棵樹) );// 生成一個(gè)線程(相當(dāng)于一個(gè)人)完成后五棵樹的工作。
wait(); //線程同步。
return 0;
}
至此,這一階段基本闡述清楚,可以再舉一些例子讓學(xué)生自主分析理解,設(shè)計(jì)算法。
2.2 實(shí)踐教學(xué)
在實(shí)踐課程中本課程組采取循序漸進(jìn),劃分層次的教學(xué)方法,既保證了多數(shù)同學(xué)的學(xué)習(xí)效果也為優(yōu)秀的同學(xué)提供了提高的空間。
實(shí)踐課時(shí)占總課時(shí)的一半,主要內(nèi)容包括(1)對多線程開發(fā)思想加以實(shí)踐鞏固,(2)對學(xué)習(xí)過程中遇到的疑惑,自主設(shè)計(jì)相關(guān)實(shí)驗(yàn),驗(yàn)證解決,提高學(xué)生獨(dú)立自主學(xué)習(xí)的能力。
實(shí)踐內(nèi)容共分為五個(gè)實(shí)驗(yàn)。各個(gè)實(shí)驗(yàn)的目的及側(cè)重點(diǎn)各不相同。實(shí)驗(yàn)內(nèi)容如表1所示。
綜上所述,在實(shí)踐授課中始終圍繞理論授課的內(nèi)容是理論知識的鞏固和補(bǔ)充,兩者在本課程中缺一不可。在實(shí)踐課程中還采取了隨堂檢查記錄成績的方法,既為最終考核提供了依據(jù),也在一定程度上督促了學(xué)生的學(xué)習(xí),調(diào)動(dòng)了學(xué)生的學(xué)習(xí)積極性。
2.3 討論環(huán)節(jié)
隨著課程的進(jìn)行,在課程的不同階段安排了若干次的討論環(huán)節(jié)。討論內(nèi)容主要針對在課程學(xué)習(xí)中遇到的問題,通過學(xué)生間的各抒己見、資料查閱、實(shí)驗(yàn)驗(yàn)證等方法解決。其中有兩次討論環(huán)節(jié)值得一提。
一次是在自主實(shí)驗(yàn)設(shè)計(jì)之前,首先將學(xué)生分組,每位學(xué)生闡述在自主實(shí)驗(yàn)中將要解決的問題及初步設(shè)計(jì)方案,進(jìn)行組內(nèi)討論并修改設(shè)計(jì)方案至組內(nèi)通過。接著組內(nèi)將沒有通過的解決方案在全班討論上提出,進(jìn)行討論修訂,最終確定設(shè)計(jì)方案。另一次是在自主實(shí)驗(yàn)設(shè)計(jì)之后,學(xué)生將自己的實(shí)驗(yàn)結(jié)果與實(shí)驗(yàn)結(jié)論與大家分享,聆聽其他學(xué)生的評價(jià)及進(jìn)一步的修改意見。例如,很多學(xué)生在OpenMP的學(xué)習(xí)過程中對其具體語法和語義的理解不是十分清楚,容易混淆。學(xué)生設(shè)計(jì)實(shí)驗(yàn),通過對幾組小程序的實(shí)踐驗(yàn)證,對比分析,從而解決這一問題。這兩次討論環(huán)節(jié)的設(shè)置行之有效的幫助學(xué)生完成最后一次實(shí)驗(yàn),實(shí)驗(yàn)效果良好,讓學(xué)生在實(shí)踐中懂得合作與分享的意義。
總之,本課程組認(rèn)為討論環(huán)節(jié)在本課程中對學(xué)生的學(xué)習(xí)起到了積極的推進(jìn)作用,讓學(xué)生在溝通與合作中自主學(xué)
習(xí),加深了對課程各個(gè)環(huán)節(jié)的理解和掌握,提高了學(xué)生分析解決問題的能力。
3 考核方式
期末成績?yōu)榘俜种?,沒有期末考試,讓學(xué)生專注于課程的學(xué)習(xí)。成績分為平時(shí)成績和實(shí)踐成績兩部分,平時(shí)成績主要針對學(xué)生平時(shí)上課的出勤率、聽課狀態(tài)、課上表現(xiàn)、作業(yè)完全等情況。實(shí)踐成績包括實(shí)驗(yàn)報(bào)告、實(shí)驗(yàn)課表現(xiàn)、隨堂檢查三部分。全面考核學(xué)生在整個(gè)學(xué)習(xí)過程中的態(tài)度和表現(xiàn)。當(dāng)然這需要授課教師在課程的整個(gè)過程中關(guān)注每位學(xué)生的學(xué)習(xí)情況。
4 結(jié)束語
在Intel相關(guān)部門的大力支持及本課程組教師的共同努力下,本課程已經(jīng)建立起較完善的教學(xué)體系和教學(xué)方法。由于在授課過程中,課程組始終貫徹一條主線的教學(xué)方法,因此使得授課內(nèi)容集中連貫易于學(xué)生理解。理論與實(shí)踐的有機(jī)結(jié)合使學(xué)生的學(xué)習(xí)更具有實(shí)際針對性,討論環(huán)節(jié)的設(shè)置為學(xué)生間的交流和主動(dòng)學(xué)習(xí)提供平臺。經(jīng)過一個(gè)學(xué)期的系統(tǒng)學(xué)習(xí),學(xué)生在今后遇到多線程相關(guān)問題時(shí)具有分析和解決的能力,達(dá)到教學(xué)目的。
參考文獻(xiàn)
[1] 多核系列教材編寫組.多核程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2007.