劉喜平
(江西財(cái)經(jīng)大學(xué) 信息管理學(xué)院,江西 南昌 330013)
隨著芯片集成度的不斷提高,芯片的功耗、復(fù)雜性也越來越高,使得傳統(tǒng)的通過提高主頻、增加結(jié)構(gòu)的復(fù)雜度來提升性能的途徑已經(jīng)難以為繼。在此背景下,從2005 年起,大部分主流的CPU 制造商開始通過增加核心的數(shù)量快速提升微處理器的性能[1]。時(shí)至今日,多核處理器已經(jīng)成為主流,單處理器計(jì)算環(huán)境逐漸退出歷史舞臺(tái)。從應(yīng)用的角度看,過去幾十年里,借助不斷提升的計(jì)算能力,人類在許多領(lǐng)域(如基因解碼、醫(yī)療成像、人工智能、虛擬現(xiàn)實(shí)等)發(fā)展非常迅速,但隨著人類科學(xué)探索的不斷深入,許多應(yīng)用對(duì)計(jì)算能力的要求也越來越高,問題的規(guī)模也在不斷增加,迫切需要將大量處理器和計(jì)算機(jī)集合起來共同完成計(jì)算任務(wù)。來自需求與現(xiàn)實(shí)兩方面的動(dòng)力推動(dòng)了計(jì)算向并行與分布式計(jì)算方向轉(zhuǎn)變。并行計(jì)算一直以來都是大規(guī)??茖W(xué)與工程計(jì)算、數(shù)據(jù)分析的基礎(chǔ)工具。近年來,隨著現(xiàn)代計(jì)算機(jī)普遍采用多核異構(gòu)的體系結(jié)構(gòu),以及互聯(lián)網(wǎng)、大數(shù)據(jù)、云計(jì)算、人工智能的興起,并行計(jì)算的應(yīng)用領(lǐng)域不斷擴(kuò)大。
鑒于其日益重要的地位,并行與分布式計(jì)算被納入計(jì)算機(jī)專業(yè)本科課程體系中。在美國(guó)計(jì)算機(jī)協(xié)會(huì)ACM 和國(guó)際電子電氣工程師協(xié)會(huì)計(jì)算機(jī)學(xué)會(huì)IEEE-CS 制定的《計(jì)算機(jī)專業(yè)(本科)課程設(shè)置指南之CS2013》[2]中,并行與分布式計(jì)算是計(jì)算機(jī)專業(yè)知識(shí)體系的18 個(gè)知識(shí)域之一,是一個(gè)全新的知識(shí)域;并行與分布式計(jì)算類課程的等級(jí)也由原來的選修課程提升為核心基礎(chǔ)課程。在教育部計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)教學(xué)指導(dǎo)分委員會(huì)系統(tǒng)研究組給出的課程體系改革方案中,并行計(jì)算也是一個(gè)很重要的方向[3]。
目前國(guó)內(nèi)外很多知名大學(xué)的計(jì)算機(jī)專業(yè)已經(jīng)開始開設(shè)多門并行與分布式計(jì)算相關(guān)課程[4-6],如國(guó)外的康奈爾大學(xué)、哥倫比亞大學(xué)、萊斯大學(xué)、麻省理工學(xué)院、哈佛大學(xué)、斯坦福大學(xué)等著名大學(xué)開設(shè)了分布式計(jì)算導(dǎo)論、分布式計(jì)算原理、并行與分布式計(jì)算、并行編程、并行計(jì)算機(jī)體系結(jié)構(gòu)等課程;在國(guó)內(nèi),很多大學(xué)也在作出調(diào)整,如浙江大學(xué)開設(shè)了多核計(jì)算、網(wǎng)格計(jì)算和分布式系統(tǒng)、并行計(jì)算機(jī)體系結(jié)構(gòu)和編程;北京大學(xué)開設(shè)了多核編程;華中科技大學(xué)開設(shè)了并行與串行數(shù)據(jù)結(jié)構(gòu)與算法、并行體系結(jié)構(gòu)、并行編程原理與實(shí)踐等;南京大學(xué)、中山大學(xué)、四川大學(xué)、天津大學(xué)等也開設(shè)了并行處理相關(guān)課程。
分析現(xiàn)有的并行與分布式計(jì)算課程,其結(jié)構(gòu)內(nèi)容如圖1 所示??梢钥闯觯⑿信c分布式計(jì)算涉及的內(nèi)容比較龐雜,涉及算法、系統(tǒng)、開發(fā)等多個(gè)方面的內(nèi)容。有的學(xué)校將每個(gè)部分單獨(dú)開設(shè)課程,有的學(xué)校將某幾個(gè)部分整合在一起,并沒有統(tǒng)一的做法。
圖1 并行與分布式計(jì)算課程知識(shí)結(jié)構(gòu)
教育部計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)教學(xué)指導(dǎo)分委員會(huì)在新的教學(xué)指導(dǎo)綱領(lǐng)性文件中指出,計(jì)算機(jī)類本科生應(yīng)具備四大專業(yè)基本能力:計(jì)算思維能力、算法設(shè)計(jì)與分析能力、程序設(shè)計(jì)與實(shí)現(xiàn)能力、系統(tǒng)能力[3]。每一個(gè)能力的培養(yǎng)都可以在多個(gè)知識(shí)域中體現(xiàn),每一個(gè)知識(shí)域都對(duì)多個(gè)方面的能力培養(yǎng)有貢獻(xiàn)。并行與分布式計(jì)算中各個(gè)知識(shí)塊的內(nèi)容與這4 個(gè)方面的能力緊密相連,它們之間的對(duì)應(yīng)關(guān)系如圖2 所示。并行與分布式計(jì)算的重要性日益提高,對(duì)各個(gè)能力的培養(yǎng)提出了新的要求。
圖2 并行與分布式計(jì)算知識(shí)內(nèi)容與四大專業(yè)基本能力的對(duì)應(yīng)關(guān)系
(1)計(jì)算思維能力。傳統(tǒng)的計(jì)算機(jī)課程在講述求解問題的思路時(shí),主要以串行執(zhí)行為背景,沒有將并行計(jì)算考慮進(jìn)來。實(shí)際上,很多問題在求解的時(shí)候如果將并行計(jì)算作為一個(gè)選項(xiàng),那么求解思路就會(huì)完全不同。計(jì)算的本質(zhì)是求解問題,其中有些適合串行求解,有些天然地適合并行求解。比如,在一個(gè)數(shù)據(jù)序列中求最值,按照串行計(jì)算的思路是按順序逐個(gè)比較,每一步均保留大的,最后得到最大數(shù),這需要線性級(jí)別的時(shí)間復(fù)雜度。在并行環(huán)境下,可以并行地進(jìn)行比較,最后找出最大數(shù),其時(shí)間復(fù)雜度可以縮小到對(duì)數(shù)級(jí)。在培養(yǎng)計(jì)算思維的時(shí)候,應(yīng)當(dāng)同時(shí)涵蓋串行與并行計(jì)算思維,才不至于思維與現(xiàn)實(shí)脫節(jié)[4]。
(2)算法設(shè)計(jì)與分析能力。傳統(tǒng)模式下講授數(shù)據(jù)結(jié)構(gòu)和算法的時(shí)候,一個(gè)基本的假設(shè)是所設(shè)計(jì)的數(shù)據(jù)結(jié)構(gòu)只是給一個(gè)進(jìn)程來訪問,但是在并行計(jì)算模式下,多個(gè)進(jìn)程或者線程可能同時(shí)訪問一個(gè)數(shù)據(jù)結(jié)構(gòu),因此數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)需要保證并發(fā)訪問的正確性。例如,在為多線程環(huán)境下設(shè)計(jì)鏈表結(jié)構(gòu)的時(shí)候,就需要考慮到對(duì)鏈表的操作可能會(huì)導(dǎo)致問題,因此,可以設(shè)計(jì)帶有鎖的阻塞并發(fā)隊(duì)列,也可以設(shè)計(jì)不帶鎖的非阻塞并發(fā)隊(duì)列,但是后者需要基于特殊的指令。再比如,排序是一個(gè)非常常見的問題,在串行計(jì)算模式下出現(xiàn)了很多經(jīng)典算法,如冒泡排序、快速排序等,但是這些算法并不能簡(jiǎn)單地移植到并行計(jì)算環(huán)境下。一個(gè)常見的并行排序算法是奇偶交換排序,它將排序過程分為奇交換和偶交換兩個(gè)階段。對(duì)于奇交換來說,它總是比較奇數(shù)索引以及其相鄰的后續(xù)元素,而偶交換總是比較偶數(shù)索引和其相鄰的后續(xù)元素,其中的比較和交換可以充分并行化。
(3)程序設(shè)計(jì)與實(shí)現(xiàn)能力。傳統(tǒng)的程序設(shè)計(jì)教學(xué)都是圍繞編寫串行程序而展開的,對(duì)于并行和分布式程序的開發(fā)涉及比較少。多線程編程、MPI、OpenMP 等編程的模式和工具可以讓程序員更加方便地利用并行計(jì)算資源,應(yīng)該作為程序設(shè)計(jì)能力培養(yǎng)的重點(diǎn)之一。SOA 體系結(jié)構(gòu)、Web Service 等架構(gòu)和模式是編寫現(xiàn)代Web 環(huán)境下分布式應(yīng)用的主流架構(gòu),在計(jì)算機(jī)系本科生的工程能力培養(yǎng)中具有重要地位?;贛apReduce、Spark 等分布式計(jì)算框架的程序設(shè)計(jì)可以重復(fù)利用現(xiàn)有的分布式計(jì)算的生態(tài)系統(tǒng),大幅降低大規(guī)模數(shù)據(jù)處理的門檻,是大數(shù)據(jù)時(shí)代的必備技能。
(4)系統(tǒng)能力。目前支持并行計(jì)算的計(jì)算機(jī)系統(tǒng)眾多,如多核、眾核、集群、大規(guī)模并行計(jì)算機(jī)等。理解并行計(jì)算機(jī)和分布式計(jì)算機(jī)體系結(jié)構(gòu),對(duì)于提高系統(tǒng)能力具有非常重要的作用。應(yīng)用開發(fā)人員必須對(duì)計(jì)算機(jī)系統(tǒng)具有全面的認(rèn)識(shí),了解不同系統(tǒng)平臺(tái)的底層結(jié)構(gòu)。各種并行計(jì)算機(jī)系統(tǒng)的出現(xiàn)對(duì)于系統(tǒng)能力的培養(yǎng)提出了更高層次的要求。
并行與分布式計(jì)算課程的內(nèi)容比較雜,而不同高校的培養(yǎng)目標(biāo)不同,特色不同,完全可以根據(jù)自己的特點(diǎn)有選擇性地開設(shè)相關(guān)課程,可以從以下幾個(gè)方向來開設(shè)相關(guān)專業(yè)課程,如圖3 所示。
圖3 并行與分布式計(jì)算課程方向
(1)并行與分布式程序設(shè)計(jì)。這一方向主要教授在各種平臺(tái)下的程序設(shè)計(jì)開發(fā),涵蓋并行算法、多核與異構(gòu)架構(gòu)編程、分布式應(yīng)用開發(fā)技術(shù)和大數(shù)據(jù)處理技術(shù),主要內(nèi)容是介紹并行計(jì)算機(jī)系統(tǒng)、多核和異構(gòu)計(jì)算平臺(tái)、分布式環(huán)境,以及基于分布式計(jì)算框架的大數(shù)據(jù)環(huán)境等各個(gè)計(jì)算環(huán)境下的算法和程序設(shè)計(jì)。
(2)并行計(jì)算。這一方向系統(tǒng)地介紹并行計(jì)算系統(tǒng)及其算法,涵蓋并行計(jì)算機(jī)系統(tǒng)和并行算法兩大內(nèi)容。
(3)計(jì)算機(jī)系統(tǒng)。這一方向主要圍繞并行計(jì)算機(jī)系統(tǒng)、云計(jì)算、多核與異構(gòu)編程等介紹計(jì)算機(jī)系統(tǒng)的高級(jí)主題。
(4)分布式計(jì)算。這一方向系統(tǒng)地介紹分布式計(jì)算的原理和技術(shù),主要涵蓋分布式系統(tǒng)原理、分布式應(yīng)用開發(fā)技術(shù)、大數(shù)據(jù)處理技術(shù)等技術(shù)。
并行與分布式計(jì)算是一個(gè)知識(shí)域,并不需要對(duì)應(yīng)于一個(gè)課程。如何將該知識(shí)域中的知識(shí)單元融入課程中,即如何開設(shè)課程,不同的學(xué)校有不同的做法[7]?,F(xiàn)有的做法可以總結(jié)如下。
(1)方案之一(+1 方案)。其他課程內(nèi)容不作調(diào)整,另外專門開設(shè)一門并行與分布式計(jì)算課程。這種方案的優(yōu)點(diǎn)是容易實(shí)現(xiàn),不需要對(duì)教學(xué)方案作出大的調(diào)整,但是由于并行與分布式計(jì)算知識(shí)域內(nèi)容非常豐富,要把它們濃縮到一門課程中是不容易的。如果一定要開設(shè)這門課程,其內(nèi)容需要經(jīng)過精心取舍,既能激發(fā)學(xué)生的興趣,又能體現(xiàn)并行與分布式計(jì)算的精髓。
(2)方案之二(+0.n 方案)。不專門開設(shè)并行與分布式計(jì)算課程,而是將該知識(shí)域的內(nèi)容分散到幾門相關(guān)的課程中,如在操作系統(tǒng)課程中介紹分布式文件系統(tǒng),在計(jì)算機(jī)體系結(jié)構(gòu)中介紹并行計(jì)算機(jī)和分布式系統(tǒng)體系結(jié)構(gòu),在算法課程中介紹并行算法,在開發(fā)類課程中介紹SOA、組件技術(shù)、Web 服務(wù)等分布式開發(fā)技術(shù),在大數(shù)據(jù)技術(shù)課程中介紹MapReduce 等分布式計(jì)算框架。這種方案無需對(duì)現(xiàn)有的培養(yǎng)計(jì)劃和課程設(shè)置方案作任何調(diào)整,但是效果難以保證。這是因?yàn)橐环矫娓鱾€(gè)課程中不一定有足夠的課時(shí)來講授相關(guān)知識(shí)點(diǎn);另一方面并行與分布式計(jì)算的相關(guān)知識(shí)分散在各處,學(xué)生的理解不夠深入,主要還是以傳統(tǒng)的思維為主;三是知識(shí)點(diǎn)實(shí)際是割裂的,不利于理解掌握形成整體知識(shí)結(jié)構(gòu)。
(3)方案之三(+m 方案)。專門開設(shè)若干新的課程講述并行與分布式相關(guān)的內(nèi)容,如并行程序設(shè)計(jì)、分布式計(jì)算、大數(shù)據(jù)處理技術(shù)等。這種方案相對(duì)來說考慮比較周全,將并行與分布式計(jì)算的知識(shí)融合到幾門課程中,但是由于課時(shí)總量是固定的,因此需要優(yōu)化課程結(jié)構(gòu),調(diào)整其他課程的比重,因而牽涉面較大。
(4)方案之四(+m.n 方案)。這種方案一方面開設(shè)若干門新課,另一方面在已有課程中增加知識(shí)點(diǎn),雙管齊下融入相關(guān)知識(shí)點(diǎn)。例如,在計(jì)算機(jī)導(dǎo)論課中,可以介紹并行思維,讓學(xué)生對(duì)于并行計(jì)算有直觀的認(rèn)識(shí);在操作系統(tǒng)課程中,可以介紹多線程編程;在軟件工程課程中,可以講授SOA 和Web Services 等架構(gòu)。再如,可以單獨(dú)開設(shè)一門課程講述現(xiàn)有分布式系統(tǒng)、分布式計(jì)算框架和云計(jì)算框架下的開發(fā),從而使學(xué)生對(duì)于分布式系統(tǒng)和云計(jì)算有更為深入的理解。這種方案也需要對(duì)現(xiàn)有的課程結(jié)構(gòu)進(jìn)行調(diào)整。
在這4 種方案中,前面2 種方案不需要對(duì)課程體系作出大的變動(dòng),相對(duì)較容易實(shí)現(xiàn),但是知識(shí)的融合較難實(shí)現(xiàn);后面2 種方案有較多空間來展開,特別是第4 種方案,充分考慮了并行與分布式計(jì)算與其他課程之間的融合,也考慮了課程自身的體系,但是需要對(duì)課程體系作出較大的調(diào)整。
并行與分布式計(jì)算中涉及大量的概念和原理,理論上的介紹比較枯燥,不容易激發(fā)學(xué)生的興趣,為此,很多高校開設(shè)并行與分布式計(jì)算的實(shí)驗(yàn)課,或者設(shè)置實(shí)踐課時(shí)[5,8]。實(shí)踐項(xiàng)目的設(shè)置可以考慮以下方向。
(1)算法與程序設(shè)計(jì)。程序設(shè)計(jì)比較容易激起學(xué)生的興趣,讓學(xué)生有成就感,為此,可以通過程序設(shè)計(jì)實(shí)踐加深學(xué)生對(duì)并行與分布式計(jì)算的理解。在程序設(shè)計(jì)實(shí)踐中,可以通過共享內(nèi)存編程、分布式內(nèi)存編程、基于分布式計(jì)算框架MapReduce 和Spark 的編程、云計(jì)算框架的編程等編程模式的對(duì)比,讓學(xué)生體會(huì)到串行程序設(shè)計(jì)與并行程序設(shè)計(jì)的區(qū)別、數(shù)據(jù)密集型和計(jì)算密集型計(jì)算的區(qū)別以及計(jì)算向數(shù)據(jù)靠攏和數(shù)據(jù)向計(jì)算靠攏理念上的區(qū)別。
(2)大數(shù)據(jù)處理。大數(shù)據(jù)是計(jì)算機(jī)科學(xué)的一個(gè)熱門發(fā)展方向,而大數(shù)據(jù)技術(shù)天生就是基于分布式技術(shù)的,以大數(shù)據(jù)技術(shù)為抓手可以較好地將分布式計(jì)算技術(shù)與大數(shù)據(jù)處理的實(shí)踐結(jié)合起來,兩個(gè)方面相得益彰。具體來說,可以講授GFS、HDFS 等分布式數(shù)據(jù)存儲(chǔ),批處理式的MapReduce、面向流式計(jì)算的Storm、基于內(nèi)存計(jì)算的Spark、批流結(jié)合的Flink 等分布式計(jì)算框架,分布式緩存、分布式隊(duì)列等分布式基礎(chǔ)設(shè)施,以及Hive、HBase 等分布式數(shù)據(jù)庫和數(shù)據(jù)倉庫。
(3)系統(tǒng)開發(fā)。并行系統(tǒng)和分布式系統(tǒng)的原理較為抽象,可以設(shè)置一些系統(tǒng)開發(fā)方面的實(shí)踐課以加深理解。例如,基于GFS 的思想開發(fā)一個(gè)分布式文件系統(tǒng)、基于Bigtable 的思想實(shí)現(xiàn)分布式數(shù)據(jù)庫、基于P2P 原理實(shí)現(xiàn)分布式文件共享系統(tǒng)、分布式消息隊(duì)列的實(shí)現(xiàn)等。
(4)應(yīng)用開發(fā)。著重通過SOA 架構(gòu)、Web Services、微服務(wù)等架構(gòu),體會(huì)分布式應(yīng)用的特點(diǎn),理解分布式應(yīng)用中如何屏蔽底層平臺(tái)和服務(wù)的差異,如何將不同地理位置分布的服務(wù)集成起來,遠(yuǎn)程對(duì)象如何交互等。
并行與分布式計(jì)算是一個(gè)新的計(jì)算范式,從串行計(jì)算到并行計(jì)算是大勢(shì)所趨。本文回顧了并行與分布式計(jì)算這一知識(shí)域的課程開設(shè)現(xiàn)狀和內(nèi)容,并思考了該知識(shí)域與能力培養(yǎng)、課程設(shè)置和實(shí)踐課程設(shè)置方面的問題。目前在實(shí)際的教學(xué)設(shè)置中還存在一些問題,如重概念、輕實(shí)踐,與其他課程結(jié)合不夠緊密等,需要更多的探索和實(shí)踐。