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