亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        GPU通用計(jì)算及其在計(jì)算智能領(lǐng)域的應(yīng)用

        2015-11-26 01:50:50丁科譚營(yíng)
        智能系統(tǒng)學(xué)報(bào) 2015年1期
        關(guān)鍵詞:線程內(nèi)存編程

        丁科,譚營(yíng)

        (1.北京大學(xué) 機(jī)器感知與智能教育部重點(diǎn)實(shí)驗(yàn)室,北京100871;2.北京大學(xué) 信息科學(xué)技術(shù)學(xué)院,北京100871)

        GPU通用計(jì)算(general purpose computing on GPUs,GPGPU)是一種利用圖形處理器(graphics processing unit,GPU)解決通用計(jì)算任務(wù)的異構(gòu)計(jì)算方式。

        最初的GPU只是功能專一的協(xié)處理器,用以幫助中央處理器(central processing unit,CPU)從繁重的圖形圖像處理任務(wù)中解脫出來。為滿足人們對(duì)圖像處理實(shí)時(shí)性和精確度不斷高漲的需求,在過去的十多年間,GPU的體系結(jié)構(gòu)和制造工藝都取得了長(zhǎng)足的進(jìn)步;GPU的計(jì)算性能及計(jì)算精度都得到了大幅提升。如今,GPU的浮點(diǎn)計(jì)算能力早已遠(yuǎn)超同時(shí)期的CPU。

        圖像處理任務(wù)具有高度并行的特點(diǎn),這使得GPU從誕生之日起,便采用多核心的設(shè)計(jì)方案。隨著GPU性能的不斷增強(qiáng)和可編程性的日漸提高,GPU的用途不再局限于傳統(tǒng)的圖形圖像處理。目前,GPU已經(jīng)廣泛應(yīng)用于從小到圖像解碼,大到超級(jí)計(jì)算機(jī)的各種計(jì)算領(lǐng)域,進(jìn)入到了高性能計(jì)算的主流行列。

        Owens等[1-2]全面綜述了 2007 年之前的 GPU通用計(jì)算的進(jìn)展情況。然而,在過去的幾年里,GPU軟硬件條件都發(fā)生了極大的發(fā)展變化。GPU高級(jí)編程平臺(tái),如CUDA、OpenCL等的出現(xiàn),更是使得GPU通用計(jì)算的面貌發(fā)生了深刻的變化。

        本文在已有文獻(xiàn)綜述的基礎(chǔ)上,總結(jié)了GPU通用計(jì)算領(lǐng)域最新的軟硬件發(fā)展及在計(jì)算智能領(lǐng)域的應(yīng)用。文章首先介紹GPU通用計(jì)算出現(xiàn)的背景,包括傳統(tǒng)CPU面臨的困難與挑戰(zhàn)以及GPU作為通用計(jì)算器件的特點(diǎn)與優(yōu)勢(shì)。接著,文章回顧GPU通用計(jì)算開發(fā)工具和平臺(tái)的發(fā)展歷程。然后,本文轉(zhuǎn)向GPU通用計(jì)算的現(xiàn)狀,重點(diǎn)介紹主流的GPU編程平臺(tái)——NVIDIA GPU專屬的CUDA平臺(tái)和開放標(biāo)準(zhǔn)的OpenCL平臺(tái)。GPU通用計(jì)算的主要在計(jì)算智能領(lǐng)域的重要應(yīng)用將在之后予以介紹。最后,文章對(duì)GPU通用計(jì)算的目前存在的挑戰(zhàn)及未來發(fā)展趨勢(shì)進(jìn)行展望。

        1 GPU通用計(jì)算背景

        1.1 多核計(jì)算時(shí)代

        CPU是計(jì)算機(jī)系統(tǒng)的核心部件,它為各種任務(wù)提供計(jì)算能力,是一種通用的計(jì)算單元。CPU的計(jì)算能力可以用每秒鐘執(zhí)行指令數(shù)(instructions per second,IPS)來衡量,而IPS則是由CPU的指令吞吐量(instructions per clock,IPC)和時(shí)鐘頻率F所共同決定的:

        為了提高CPU的性能,可以從兩方面入手:增加指令吞吐量(IPC)和提高時(shí)鐘頻率(F)。

        隨著制作工藝的不斷提高,CPU芯片的集成度越來越高[3]。一方面,在集成度更高的芯片中,各個(gè)單元在物理上更加靠近,從而可以使器件運(yùn)行在更高的頻率上。另一方面,更多的晶體管也使得設(shè)計(jì)更復(fù)雜精細(xì)的邏輯控制結(jié)構(gòu),以提高單位時(shí)鐘周期的指令吞吐量。

        在經(jīng)過了多年的發(fā)展之后,這2種策略都遭遇到了巨大的瓶頸。時(shí)鐘頻率的提高使得芯片消耗的功率密度(W/cm2)隨之提高,供電和散熱即將達(dá)到某些基本的物理極限。如圖1所示,CPU的時(shí)鐘頻率在經(jīng)歷了長(zhǎng)期高速增長(zhǎng)后,其提升勢(shì)頭難以為繼。

        通過復(fù)雜的邏輯結(jié)構(gòu)提高指令吞吐量也逐漸達(dá)到了收益遞減點(diǎn)。現(xiàn)代處理器的內(nèi)部結(jié)構(gòu)已經(jīng)十分復(fù)雜,并已經(jīng)能夠從指令流中壓榨出大量的并行性。通過設(shè)計(jì)更復(fù)雜的結(jié)構(gòu)來提高指令的執(zhí)行能力變得更加困難[3]。

        圖1 CPU時(shí)鐘頻率變化趨勢(shì)Fig.1 The tendency of CPU’s frequency

        為應(yīng)對(duì)上述困難,多核解決方案被提出,以便充分利用晶體管數(shù)量的增加,進(jìn)一步改善CPU。

        事實(shí)上,2004之后,主要的CPU廠商如Intel和AMD等相繼轉(zhuǎn)移到多核解決方案,多核計(jì)算時(shí)代已全面到來。

        1.2 GPU的特點(diǎn)與優(yōu)勢(shì)

        GPU最初是為了加速圖形處理而設(shè)計(jì)的專用硬件。圖形渲染等任務(wù)具有很強(qiáng)的并行性,需要密集的計(jì)算與巨大的數(shù)據(jù)傳輸帶寬。因此,GPU從誕生之日起便被設(shè)計(jì)為擁有眾多核心,具有高吞吐量的計(jì)算。并且,由于GPU的專用性,GPU芯片的晶體管也更多的用于計(jì)算,而非控制和緩存(如圖2所示)。由于GPU與CPU在設(shè)計(jì)上存著巨大的差別,GPU通用計(jì)算有著自身的特點(diǎn)與優(yōu)勢(shì)。

        1)計(jì)算能力強(qiáng)大

        與CPU相比,GPU具有更加強(qiáng)大的計(jì)算能力。在相同時(shí)期,GPU的浮點(diǎn)計(jì)算的理論峰值能力相比CPU要高出一個(gè)數(shù)量級(jí)[6]。

        強(qiáng)大的計(jì)算能力使GPU在高性能計(jì)算領(lǐng)域獲得了廣泛的應(yīng)用。在全球最快的超級(jí)計(jì)算機(jī)之中,中國(guó)國(guó)家超級(jí)計(jì)算天津中心的天河1A號(hào)超級(jí)計(jì)算機(jī)和美國(guó)橡樹嶺實(shí)驗(yàn)室的TITAN號(hào)超級(jí)計(jì)算機(jī),都是依靠裝配GPU來提升性能,并提供大部分運(yùn)算能力。GPU為高性能計(jì)算提供了新的巨大的發(fā)展?jié)撃堋?/p>

        圖2 GPU的晶體管更多的用于計(jì)算單元Fig.2 GPUs devote more transistors to data processing

        2)廉價(jià)易得

        相比與基于CPU的計(jì)算機(jī)系統(tǒng),GPU更加廉價(jià),也更容易為個(gè)人和小型機(jī)構(gòu)所利用。

        以NVIDIA的旗艦版GPU TITAN為例。TITAN GPU價(jià)格不足一萬元人民幣,共有2 688個(gè)計(jì)算核心,雙精度浮點(diǎn)運(yùn)算理論峰值計(jì)算能力達(dá)到1 500 GFLP/s,額定功耗約為250 W。作為對(duì)比,北京大學(xué)理論與應(yīng)用地球物理研究所的集群,由1個(gè)服務(wù)器(Dell PowerEdge R710)、46個(gè)計(jì)算結(jié)點(diǎn)(Dell PowerEdge M610)、3個(gè)刀片機(jī)箱(Dell PowerEdge M1000)組成。每個(gè)計(jì)算結(jié)點(diǎn)有2顆四核Intel Xeon E5520(2.26 GHz,Nehalem-EP 架構(gòu))處理器,共 368個(gè)計(jì)算核心,理論計(jì)算峰值3 327 GFLP/s,滿載功耗約為12 kW。

        可以看到,在提供相同數(shù)量級(jí)的計(jì)算能力的情況下,GPU非常的廉價(jià),也易于裝配(只需要一臺(tái)能夠支持獨(dú)立顯卡的PC),個(gè)人和小型實(shí)驗(yàn)室都有條件利用。而集群等傳統(tǒng)高性能計(jì)算設(shè)備,不但價(jià)格昂貴,對(duì)場(chǎng)地、供電和維護(hù)等有較高的要求。可以說,GPU為PC提供了小型集群的計(jì)算能力[7]。

        3)開發(fā)靈活

        現(xiàn)代的GPU都采用統(tǒng)一渲染架構(gòu),具有很強(qiáng)的可編程性。GPU編程的軟件開發(fā)平臺(tái)也趨于成熟,CUDA、OpenCL等工具的推出,使開發(fā)者能夠使用高級(jí)編程語(yǔ)言為GPU開發(fā)通用計(jì)算程序?,F(xiàn)在主流的GPU也對(duì)單精度和雙精度浮點(diǎn)運(yùn)算提供了滿足IEEE標(biāo)準(zhǔn)的完全支持。對(duì)于GPU編程,我們會(huì)在下面的章節(jié)詳細(xì)介紹。

        2 GPU通用計(jì)算編程平臺(tái)

        最初的GPU功能固定,只能執(zhí)行圖形流水線中的特定任務(wù),缺乏可編程性。此時(shí),為了利用GPU進(jìn)行通用計(jì)算,必須將計(jì)算任務(wù)封裝成圖形處理任務(wù),然后交由GPU完成。這可以通過底層的匯編命令(低級(jí)著色語(yǔ)言)編程實(shí)現(xiàn)。更為高效的,通常我們可以通過諸如OpenGL、Cg等圖形編程接口,利用高級(jí)著色語(yǔ)言(shading language,SL)進(jìn)行編程。

        但即使利用高級(jí)著色語(yǔ)言,這種方式也還存在諸多不便。首先,開發(fā)者需要熟悉圖形處理的流程,掌握一系列圖形處理接口,并且需要以與任務(wù)完成完全無關(guān)的一套圖形處理思路來考慮問題的編程求解。其次,圖形接口是專用的程序接口,缺乏通用計(jì)算所需要的靈活性,開發(fā)者必須面臨如何將問題重新表述成圖形處理問題的挑戰(zhàn)。

        為了簡(jiǎn)化GPU編程,具有更高層硬件層次的編程模式被相繼提出。GPU的統(tǒng)一著色器被抽象為與具體硬件無關(guān)的、能夠以特定方式并行執(zhí)行線程的流處理器單元。GPU的內(nèi)存、紋理緩存等存儲(chǔ)單元,被抽象為具有層級(jí)結(jié)構(gòu)的存儲(chǔ)體系。經(jīng)過抽象后,可以在流處理模式下,利用高級(jí)語(yǔ)言為GPU編寫程序,完成通用的計(jì)算任務(wù)。

        本節(jié)首先介紹與GPU通用計(jì)算密切相關(guān)的流處理模式。之后,轉(zhuǎn)向介紹基于流行的GPU編程語(yǔ)言和工具。

        2.1 流處理模式

        流處理模式(stream programming model)是一種類似于單指令多數(shù)據(jù)(SIMD)的編程模式。

        通過將數(shù)據(jù)組織成數(shù)據(jù)流,將計(jì)算表達(dá)成作用于數(shù)據(jù)流的核函數(shù)的方式,流處理能夠暴露程序中內(nèi)在的并行性。通過流處理模式,程序開發(fā)者能夠更容易地利用GPU、FGPA等計(jì)算硬件的并行能力而不用顯式地處理空間分配、同步和計(jì)算單元間的通信等問題。對(duì)于數(shù)據(jù)并行性良好的應(yīng)用,流處理能夠取得良好的性能[8]。

        如圖3所示,流處理與SIMD最大的不同之處在于,SIMD是以指令為操作單位的,而流處理模式則是以指令序列(核函數(shù))為操作單元。數(shù)據(jù)流(輸入流)與核函數(shù)一同進(jìn)入流處理器,流中每個(gè)數(shù)據(jù)元素同時(shí)被核函數(shù)執(zhí)行,從而完成指定的操作,得到輸出數(shù)據(jù)(輸出流)。

        圖3 流處理與SIMDFig.3 Stream processing and SIMD

        流(stream)和核函數(shù)(kernel)是流處理模式中最重要的2個(gè)概念。流是一個(gè)數(shù)據(jù)集合,包含待處理的數(shù)據(jù)元素,并且這些數(shù)據(jù)的處理方式是相同或相似的。核函數(shù)是由若干操作(指令)組成的操作序列,它決定著要對(duì)每個(gè)數(shù)據(jù)做何種操作和處理。對(duì)GPU平臺(tái)而言,紋理單元充當(dāng)了流的角色,待處理數(shù)據(jù)需要作為2維的紋理信息被流處理器讀取和操作。許多問題也可以很自然的映射為2維的紋理,如矩陣代數(shù)、物理仿真等等;而可編程著色器則起著核函數(shù)的作用。

        2.2 Brook

        Brook是一種基于標(biāo)準(zhǔn)C語(yǔ)言的流編程語(yǔ)言。它旨在基于流編程模式,對(duì)圖形API進(jìn)行封裝,將GPU視為能夠進(jìn)行并行計(jì)算的協(xié)處理器,從而簡(jiǎn)化GPU通用計(jì)算的編程[8]。

        Brook使人們看到了將GPU用于通用計(jì)算的巨大潛力,對(duì)GPU通用計(jì)算的發(fā)展有著深遠(yuǎn)的影響。Brook將GPU封裝為通用的并行處理器的思想及語(yǔ)言規(guī)范更是為現(xiàn)在主流的GPU編程平臺(tái)CUDA和OpenCL所借鑒,而這兩者正是現(xiàn)在GPU編程的主流開發(fā)平臺(tái)。

        2.3 OpenACC

        OpenACC是一個(gè)異構(gòu)并行計(jì)算標(biāo)準(zhǔn)。與OpenMP類似,OpenACC定義了一套編譯器指令,這些指令應(yīng)用于C、C++和Fortran代碼,以指導(dǎo)編譯器將指定的循環(huán)或代碼塊,從主機(jī)CPU轉(zhuǎn)移到相連的加速設(shè)備(例如GPU)上進(jìn)行運(yùn)算。

        簡(jiǎn)言之,OpenACC提供了一種簡(jiǎn)潔的利用并行硬件的開發(fā)方式。目前,OpenACC已經(jīng)在多種操作系統(tǒng)下實(shí)現(xiàn),并支持NVIDIA、AMD和Intel的多種硬件計(jì)算設(shè)備[21]。未來,OpenACC可能會(huì)并入OpenMP標(biāo)準(zhǔn),形成一個(gè)同時(shí)支持多核與眾核并行編程的統(tǒng)一標(biāo)準(zhǔn)。

        2.4 C++AMP

        C++accelerated massive parallelism(C++AMP)是一個(gè)由微軟倡導(dǎo)的開放標(biāo)準(zhǔn),旨在直接利用C++語(yǔ)言實(shí)現(xiàn)數(shù)據(jù)的并行化編程[9]。

        相比于常規(guī)的C++代碼,C++AMP只需要按規(guī)定格式對(duì)數(shù)據(jù)進(jìn)行綁定,然后應(yīng)用并行原語(yǔ)啟動(dòng)數(shù)據(jù)操作(核函數(shù))的運(yùn)行。因此,C++AMP完全隱藏了硬件的細(xì)節(jié)。開發(fā)者只需要預(yù)先綁定數(shù)組和數(shù)組元素上的操作,并行化由C++AMP負(fù)責(zé)完成。C++AMP能夠根據(jù)實(shí)際的硬件情況(GPU或CPU,計(jì)算核心算數(shù)等),決定并行化策略。當(dāng)實(shí)際硬件不支持并行化時(shí),代碼還可以串行執(zhí)行。

        2.5 高級(jí)編程平臺(tái)

        在OpenACC和C++AMP這2種異構(gòu)編程模式下,硬件對(duì)開發(fā)者而言完全是透明的。一方面,這簡(jiǎn)化了并行程序的開發(fā)——串行代碼只需要少量的改動(dòng),便可以利用GPU等多核計(jì)算設(shè)備的并行計(jì)算能力。但這種簡(jiǎn)化并非沒有代價(jià),它使得并行化的過程不能被程序員顯示地加以控制。而在很多情況下,根據(jù)硬件和程序的具體情況,對(duì)負(fù)載和并行粒度進(jìn)行調(diào)整,對(duì)于充分利用計(jì)算設(shè)備能力、提高程序性能是至關(guān)重要的。

        正如前文所述,CUDA和OpenCL是當(dāng)前基于GPU的異構(gòu)編程的主流平臺(tái)。它們的共同特點(diǎn)是,既對(duì)硬件的計(jì)算和存儲(chǔ)單元進(jìn)行了很好的抽象,同時(shí)又對(duì)計(jì)算設(shè)備的計(jì)算核心數(shù)量這一重要參數(shù),加以適度地暴露,并且對(duì)并行粒度和并行方式也給予了更大的控制可能。這樣便對(duì)完全隱藏硬件這一極端情況的進(jìn)行了良好的折衷。同時(shí),這2種平臺(tái)為GPU通用提供了從編程到調(diào)試再到性能測(cè)試的完整解決方案。

        3 統(tǒng)一計(jì)算設(shè)備架構(gòu)

        統(tǒng)一計(jì)算設(shè)備架構(gòu)(compute unified device architecture,CUDA)是由 NVIDIA公司于 2006年 11月發(fā)布的基于NVIDIA GPU的并行程序開發(fā)架構(gòu)[10]。它包括一個(gè)SDK(NVCC編譯器、調(diào)試器、函數(shù)庫(kù)等)、一套API,以及添加了少量擴(kuò)展的C/C++語(yǔ)言(CUDA C/C++)。由它開發(fā)的程序能夠在所有支持CUDA的NVIDIA GPU上運(yùn)行。CUDA的推出大大簡(jiǎn)化了對(duì)GPU進(jìn)行并行編程的難度。圖3示意了NVIDIA GPU的主要計(jì)算和存儲(chǔ)部件。接合圖3,對(duì)CUDA開發(fā)平臺(tái)的核心逐一進(jìn)行簡(jiǎn)要介紹。

        3.1 核函數(shù)

        CUDA允許使用C/C++為CUDA計(jì)算核心(CUDA Core,在較早的文檔中也稱了 Streaming Processor(SP),即流處理器)編寫程序——“核函數(shù)”(kernel)。

        不同于常規(guī)的C/C++函數(shù),當(dāng)核函數(shù)被調(diào)用后,它會(huì)被N個(gè)不同的CUDA線程(thread)并行的執(zhí)行N次。執(zhí)行核函數(shù)的每個(gè)線程都被賦予一個(gè)一的線程索引ID。

        3.2 線程的層級(jí)結(jié)構(gòu)

        如圖4所示,CUDA中的線程具有層次結(jié)構(gòu)。一定數(shù)量線程組成線程塊(block);線程塊再組成更大的單位線程格(grid)。

        圖4 線程的層級(jí)結(jié)構(gòu)Fig.4 Hierarchy of threads

        核函數(shù)啟動(dòng)后,每個(gè)線程塊(thread block)被分配給某個(gè)流多處理器(streaming multiprocessor,SM)上執(zhí)行。線程塊執(zhí)行的先后順序是不確定的,它們必須相互獨(dú)立地被執(zhí)行。即不論它們按何種次序,也不論是按并行還是串行方式,最后的執(zhí)行結(jié)果都應(yīng)該一致。

        不同流多處理器上的線程是相互獨(dú)立的,相同流多處理器上的線程則是阻塞式的[10]。前者意味著,不同流多處理器上的線程由不同的處理器以任意先后順序執(zhí)行;后者意味著,當(dāng)一個(gè)活躍線程受到阻塞(如執(zhí)行延遲較大的數(shù)據(jù)讀寫操作)時(shí),流多處理器可以切換執(zhí)行其他的線程,避免浪費(fèi)寶貴的計(jì)算資源。

        3.3 內(nèi)存層級(jí)結(jié)構(gòu)

        同基于CPU的常規(guī)計(jì)算機(jī)體系類似,GPU的存儲(chǔ)體系也具有層次性:容量大的存儲(chǔ)器,遠(yuǎn)離GPU,讀寫也延遲大;延遲小的存儲(chǔ)單元容量小,位置靠近GPU。

        如圖5,CUDA程序在運(yùn)行過程中,線程能夠從不同的內(nèi)存空間中讀取數(shù)據(jù)。每個(gè)線程都有僅本線程可見的局部?jī)?nèi)存(local memory)。局部空間一般是片上的寄存器,可以幾乎無延遲的讀寫。每個(gè)線程塊分配有一塊共享內(nèi)存(shared memory),塊中的所有線程都可以讀寫共享內(nèi)存的數(shù)據(jù)。共享內(nèi)存靠近GPU,雖然不如寄存器讀寫速度快,但訪問延遲也非常小。離GPU最遠(yuǎn)的是大容量的全局內(nèi)存。所有線程都可以訪問全局內(nèi)存,但讀寫延遲非常大,大約要比共享內(nèi)存高出一個(gè)數(shù)量級(jí)。

        圖5 線程的層級(jí)結(jié)構(gòu)Fig.5 Hierarchy of threads

        表1對(duì)比了在NVIDIA GeForce 560 Ti GPU中,不同層級(jí)內(nèi)存的數(shù)據(jù)傳輸率。

        表1 GPU 內(nèi)存數(shù)據(jù)傳輸率(560 Ti,PCIe 2.0 x16)Table 1 GPU memory bandwidth(560 Ti,PCIe 2.0 x16)

        除以上介紹的幾種存儲(chǔ)空間外,還存在2種對(duì)所有線程可見的只讀存儲(chǔ)空間——常量?jī)?nèi)存(constant memory)和紋理內(nèi)存(texture memory)。常量?jī)?nèi)存和紋理內(nèi)存的訪問延遲同全局內(nèi)存相同,但前者配備有緩存(cache),在數(shù)據(jù)局部性較好時(shí),訪問延遲要小于全局內(nèi)存(參見圖6)。

        圖6 NVIDIA GPU主要結(jié)構(gòu)簡(jiǎn)圖Fig.6 Diagram of NVIDIA GPU structure

        同一線程塊內(nèi)的線程可以通過共享內(nèi)存(shared memory)(塊中每個(gè)都可以讀寫共享內(nèi)存中的數(shù)據(jù))和同步機(jī)制來相互協(xié)作。具體而言,程序員可以在核函數(shù)內(nèi)調(diào)用內(nèi)建函數(shù)來設(shè)置同步點(diǎn),以使線程執(zhí)行到該處后,停下來等待,直到同一塊中的所有線程均達(dá)到同步點(diǎn)。

        3.4 函數(shù)庫(kù)

        除了提供以C/C++為基礎(chǔ)語(yǔ)言的高級(jí)編程平臺(tái),CUDA SDK還提供了許多函數(shù)庫(kù),高效實(shí)現(xiàn)常見操作,提高開發(fā)速度。例如,矩陣計(jì)算的cuBLAS和cuSPARSE,實(shí)施快速傅里葉變換的cuFFT,用于批量生成隨機(jī)數(shù)的cuRAND,以及用于加速人工神經(jīng)網(wǎng)絡(luò)的 cuDNN[12-13]等。除了函數(shù)庫(kù)外,還有大量第三方開源或商業(yè)函數(shù)庫(kù)可供選擇。這些函數(shù)庫(kù)涵蓋基本代數(shù)運(yùn)算、數(shù)值計(jì)算、統(tǒng)計(jì)、圖像處理、機(jī)器視覺、視頻編碼解碼、GIS等領(lǐng)域。這些函數(shù)的數(shù)量和范圍也在不斷的增加,最新進(jìn)展可以參見文獻(xiàn)[11]。

        3.5 調(diào)試與性能分析

        調(diào)試和優(yōu)化是編程開發(fā)重要的環(huán)節(jié),也是GPU編程的一個(gè)難點(diǎn)。為簡(jiǎn)化調(diào)試和優(yōu)化流程,提高開發(fā)效率,CUDA提供了一系列軟件工具。

        Parallel Nsight是集調(diào)試和性能測(cè)試于一體的編程輔助工具。Nsight可以集成在 Visual Studio(Windows下)和Eclipse(Linux下),實(shí)現(xiàn)交互式調(diào)試。在Linux環(huán)境下,開發(fā)者還可以在cuda-gdb在命令下進(jìn)行調(diào)試,或?qū)uda-gdb同IDE配合使用。此外,CUDA SDK還提供了cuda-memcheck程序,檢查內(nèi)存越界訪問錯(cuò)誤。

        除了上面提到的Nsight可以用于性能分析外,CUDA SDK還提供Visual Profiler工具,能夠以可視化的方式展示程序各部分的運(yùn)行時(shí)間,方便尋找性能瓶頸,以便有針對(duì)性地進(jìn)行優(yōu)化。

        4 開放計(jì)算語(yǔ)言

        開放計(jì)算語(yǔ)言(open computing language,OpenCL)是一個(gè)完全開放和免費(fèi)的異構(gòu)計(jì)算編程標(biāo)準(zhǔn),它由非盈利性技術(shù)組織Khronos Group負(fù)責(zé)維護(hù)。OpenCL提供了一種跨平臺(tái)、硬件無關(guān)的并行計(jì)算解決方案。由它編寫的程序不僅能夠在多核CPU、APU及GPU上運(yùn)行,還能運(yùn)行在單核CPU甚至DSP和FPGA等硬件設(shè)備上。OpenCL獲得了主要硬件廠商Intel、AMD和NVIDIA的積極支持。

        OpenCL的目標(biāo)是提出一種跨硬件、跨平臺(tái)的異構(gòu)編程框架標(biāo)準(zhǔn)。OpenCL規(guī)范主要由平臺(tái)模型、執(zhí)行模型、內(nèi)存模型和編程模型[13]4部分組成,它在硬件的抽象描述的基礎(chǔ)上,制定了異構(gòu)的并行編程模式。在制定OpenCL標(biāo)準(zhǔn)時(shí),Khronos Group大量借鑒了CUDA[14],因此,2種并行解決方案有很多相似之處,其中,大部分關(guān)鍵概念都可以一一對(duì)應(yīng)。

        4.1 設(shè)備的層級(jí)模型

        OpenCL定義了具有多級(jí)結(jié)構(gòu)的異構(gòu)并行體系模型。如圖7所示,這一體系包括一個(gè)主機(jī)(host),多個(gè)設(shè)備(device);每個(gè)設(shè)備中包括若干計(jì)算單元(compute unit,CU)。計(jì)算單元對(duì)應(yīng)于AMD GPU的計(jì)算單元(CU)或CUDA中的流多處理器(SM),但它也可以是CPU核心,還可以是DSP和FPGA等運(yùn)算設(shè)備。計(jì)算單元又由若干處理單元(processing element,PE)組成。圖8給出了內(nèi)存模型。

        圖7 OpenCL設(shè)備模型Fig.7 OpenCL device model

        圖8 OpenCL內(nèi)存模型Fig.8 OpenCL memory model

        如圖8所示,OpenCL規(guī)范還定義了內(nèi)存的層級(jí)結(jié)構(gòu)和可見性:遠(yuǎn)離計(jì)算單元的全局內(nèi)存(global memory)和常量?jī)?nèi)存(constant memory)是全局可見的,片上的局部?jī)?nèi)存(local memory)、計(jì)算單元內(nèi)部的私有內(nèi)存(private memory)則是局部可見的。

        4.2 數(shù)據(jù)并行模型

        OpenCL定義了程序的執(zhí)行模式。圖9給出了OpenCL抽象的數(shù)據(jù)并行模型。在OpenCL的概念中,執(zhí)行單元也同是以層級(jí)結(jié)構(gòu)進(jìn)行組織的:工作項(xiàng)(work item)組成工作組(work group),工作組進(jìn)而構(gòu)成索引空間——NDRange。OpenCL的工作項(xiàng),相當(dāng)于CUDA的線程,是核函數(shù)執(zhí)行的最小單元;工作組對(duì)應(yīng)于CUDA的線程塊,工作組內(nèi)的項(xiàng)有更加方便的數(shù)據(jù)共享和同步機(jī)制,便于彼此協(xié)作。工作組又被置于更大的索引空間NDRange中,它發(fā)揮著CUDA中線程格的作用,為工作組和工作項(xiàng)提供全局索引。

        圖9 OpenCL并行執(zhí)行模型Fig.9 OpenCL execution model

        同CUDA一樣,工作項(xiàng)除了擁有在工作組內(nèi)的坐標(biāo)外,也具有工作組內(nèi)的唯一的索引和唯一的全局索引;工作組也有著類似的索引結(jié)構(gòu)。

        4.3 設(shè)備管理與核函數(shù)啟動(dòng)

        OpenCL的核函數(shù)的基本結(jié)構(gòu)同CUDA完全相同,只是在具體編寫時(shí)所使用的關(guān)鍵字不同。

        OpenCL的核函數(shù)啟動(dòng)后,每個(gè)工作項(xiàng)都會(huì)執(zhí)行核函數(shù)中指令,這一點(diǎn)也與 CUDA相同。由于OpenCL是與具體硬件無關(guān)的,因此,核函數(shù)的啟動(dòng)相對(duì)CUDA要復(fù)雜一些。(CUDA中,復(fù)雜的維護(hù)工作由運(yùn)行時(shí)負(fù)責(zé),用戶也可以通過Driver API來顯示的管理和查詢。由于CUDA是針對(duì)專用硬件平臺(tái),因此,一般而言沒有這樣做的必要。)

        如圖10,OpenCL首先需要?jiǎng)?chuàng)建一個(gè)上下文(context)來管理設(shè)備,不同類型的硬件對(duì)應(yīng)不同類型的上下文。上下文對(duì)硬件設(shè)備進(jìn)行了封裝,為主機(jī)調(diào)用設(shè)備的提供了統(tǒng)一的接口。主機(jī)啟動(dòng)核函數(shù)后,核函數(shù)被放在一個(gè)命令隊(duì)列(CMD queue)中,等待執(zhí)行。當(dāng)設(shè)備完成一個(gè)核函數(shù)的執(zhí)行后,會(huì)取出隊(duì)列中的第一個(gè)核函數(shù)繼續(xù)執(zhí)行。關(guān)于OpenCL更詳細(xì)的說明,可以參考[13,15];關(guān)于基于 AMD GPU的編程開發(fā),可以參見[16]。

        圖10 OpenCL通過命令隊(duì)列和上下文管理核函數(shù)執(zhí)行Fig.10 OpenCL manages the kernels through command queue and context

        4.4 函數(shù)庫(kù)

        OpenCL的生態(tài)系統(tǒng)也提供了大量的函數(shù)庫(kù),方便開發(fā)者利用。開源的數(shù)學(xué)函數(shù)庫(kù)clMath實(shí)現(xiàn)了快速傅里葉變換(FFT)和基礎(chǔ)線性代數(shù)全程庫(kù)(BLAS)。其中,F(xiàn)FT支持1~3維的實(shí)數(shù)和復(fù)數(shù)變換;BLAS支持全部 1~3級(jí)別的代數(shù)運(yùn)算。在clMath的基礎(chǔ)上,MAGMA提供了矩陣的LU、QR和Chokesky分解、特征值計(jì)算等重要的矩陣操作的OpenCL實(shí)現(xiàn)。

        4.5 調(diào)試和性能工具

        目前已有許多優(yōu)秀的工具,用于OpenCL程序的調(diào)試和優(yōu)化。AMD APP SDK中的CodeXL包含了一整套軟件工具,幫助開發(fā)者最大限度地發(fā)掘GPU的計(jì)算潛力。CodeXL包括功能強(qiáng)大的調(diào)試器,能夠?qū)PU和GPU端的代碼進(jìn)行細(xì)致的監(jiān)測(cè),同時(shí)還能對(duì)OpenCL的kernel函數(shù)進(jìn)行表態(tài)分析。CodeXL可以配合Visual Studio使用,也可以單獨(dú)使用。

        5 計(jì)算智能領(lǐng)域應(yīng)用

        GPU通用計(jì)算已經(jīng)進(jìn)入高性能計(jì)算的主流行列,被用于流體模擬、物理仿真、圖像和信號(hào)處理、數(shù)值計(jì)算等諸多,并取得了良好的加速效果。文獻(xiàn)[1-2]和[17]給出了GPU在許多關(guān)鍵領(lǐng)域和問題上的重要應(yīng)用。本節(jié)主要回顧GPU在計(jì)算智能領(lǐng)域的應(yīng)用。

        計(jì)算智能算法一般具備并行性的特點(diǎn),因此,特別適用利用GPU平臺(tái)進(jìn)行高效的并行化實(shí)現(xiàn)。

        5.1 人工神經(jīng)網(wǎng)絡(luò)

        人工神經(jīng)網(wǎng)絡(luò)(artificial neural network,ANN),模仿生物神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)和功能,通過聯(lián)結(jié)大量的人工神經(jīng)元進(jìn)行計(jì)算。由于出色的特征學(xué)習(xí)能力,深度神經(jīng)網(wǎng)絡(luò)已經(jīng)在圖像識(shí)別、語(yǔ)言識(shí)別等領(lǐng)域取得了突破性進(jìn)展。圖11展示了深層卷積神經(jīng)網(wǎng)絡(luò)在學(xué)習(xí)圖像的低階和高階特征上表現(xiàn)出的良好性能[18]。

        圖11 通過深度神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)到的低階和高階特征[27]Fig.11 Low level and high level features learned by DNN[27]

        隨著深度學(xué)習(xí)[19](deep learning)研究的不斷深入,人工神經(jīng)網(wǎng)絡(luò)的規(guī)模越來越大,計(jì)算復(fù)雜性不斷膨脹。通常,深度神經(jīng)網(wǎng)絡(luò)包含上百萬甚至上億個(gè)自由參數(shù),需要在海量的數(shù)據(jù)集上進(jìn)行學(xué)習(xí)。因此,加速深度神經(jīng)網(wǎng)絡(luò)的訓(xùn)練速度是工程和科學(xué)領(lǐng)域的重要研究?jī)?nèi)容,直接關(guān)系到對(duì)深度神經(jīng)網(wǎng)絡(luò)的研究以及其在實(shí)際中的應(yīng)用。

        超級(jí)計(jì)算機(jī)和大規(guī)模集群的成本高昂,個(gè)人和中小型研究機(jī)和企業(yè)構(gòu)難于負(fù)擔(dān)。GPU通用計(jì)算,極大地降低了深度神經(jīng)網(wǎng)絡(luò)的研究和應(yīng)用的門檻。

        2012,Krizhevsky等[20],搭建了一個(gè)深度神經(jīng)網(wǎng)絡(luò)并用于圖像識(shí)別。這個(gè)神經(jīng)網(wǎng)絡(luò)含有6 000萬個(gè)參數(shù),650 000個(gè)神經(jīng)元。這個(gè)神經(jīng)網(wǎng)絡(luò)在ImageNet測(cè)試集(共有1 000個(gè)類別)上,取得了17%的Top 5分類錯(cuò)誤率,取得了突破性的進(jìn)展。而這個(gè)超大型神經(jīng)網(wǎng)絡(luò)的訓(xùn)練,正是得益于兩塊GPU的強(qiáng)大計(jì)算能力。

        Stanford大學(xué)的研究人員提出了基于GPU陣列和分布式運(yùn)算加速神經(jīng)網(wǎng)絡(luò)的計(jì)算框架[21]。這個(gè)由16個(gè)GPU組成的GPU陣列,能夠訓(xùn)練比1 000 CPU的Google集群大6.5倍規(guī)模的深度神經(jīng)網(wǎng)絡(luò)。巨大的實(shí)用性使得基于GPU的人工神經(jīng)網(wǎng)絡(luò)受到科研機(jī)構(gòu)和IT企業(yè)的重視,是GPU能用計(jì)算研究熱點(diǎn)。

        5.2 群體智能優(yōu)化算法

        群體智能優(yōu)化算法是一類基于群體的啟發(fā)式隨機(jī)優(yōu)化算法,在工程和科學(xué)領(lǐng)域有著廣泛的應(yīng)用。然而,群體算法優(yōu)化過程中需要對(duì)目標(biāo)函數(shù)進(jìn)行大量的評(píng)估,這也極大的限制了群體算法在某些問題中的應(yīng)用。群體算法的內(nèi)在并行性,使得它們可以很好地利用GPU多核心、高度并行的特性。

        Zhou等[22]最早利用GPU進(jìn)行PSO算法的加速工作,在當(dāng)時(shí)的硬件條件下,取得了8X倍的加速比。隨后,基于GPU的PSO變種及多目標(biāo)群體算也相繼被提出[23-24]。

        作為典型的基于GPU的群體智能優(yōu)化方法實(shí)現(xiàn),Ding等[25]提出了基于GPU并行加速的煙花算法(GPU-FWA)[26]。圖 12 示意了煙花算法基于GPU實(shí)現(xiàn)的基本流程。

        圖12 基于GPU的煙花算法實(shí)現(xiàn)示意圖Fig.12 Diagram of GPU-FWA

        GPU-FWA充分利用了GPU內(nèi)存層級(jí)結(jié)構(gòu),主要數(shù)據(jù)通訊被限制在共享內(nèi)存之間,從而減少了數(shù)據(jù)傳輸開銷。同時(shí),GPU-FWA通過一種改進(jìn)后的交互機(jī)制,進(jìn)一步提高了運(yùn)行速度。在對(duì)經(jīng)典基準(zhǔn)測(cè)試函數(shù)上的測(cè)試表明,GPU-FWA相對(duì)于傳統(tǒng)基于CPU的煙花算法,加速近200倍。

        群體智能優(yōu)化方法也在大量實(shí)際問題獲得良好應(yīng)用。Rymut等[27]實(shí)現(xiàn)的GPU版本的基于PSO的體追蹤算法提速20~40倍。Mussi等[28]實(shí)現(xiàn)的基于異步PSO的人體追蹤算法,將原程序由CPU端的幾分鐘,提升到了幾秒鐘內(nèi)完成,實(shí)現(xiàn)了跟蹤的實(shí)時(shí)性,提高的算法的實(shí)用性。Nobile等[29]將GPU多種群PSO應(yīng)用于生物系統(tǒng)的參數(shù)估計(jì),運(yùn)行時(shí)間從6 h縮減到14 min,大大加快了參數(shù)選擇過程。利用GPU加速群體算法,不僅提高了原有應(yīng)用的速度,而且也擴(kuò)展了群體優(yōu)化方法的應(yīng)用范圍。新的基于GPU的群體算法的應(yīng)用在不斷的出現(xiàn),成研究的熱點(diǎn)。

        6 分析與討論

        6.1 GPU通用計(jì)算的缺點(diǎn)

        首先,并非所有的計(jì)算任務(wù)都適合利用GPU進(jìn)行計(jì)算。GPU適用于存在大量的數(shù)據(jù)并行性并且數(shù)據(jù)之間無復(fù)雜邏輯依賴的計(jì)算任務(wù)(典型的如矩陣計(jì)算)。對(duì)于存在復(fù)雜邏輯和隨機(jī)讀寫的應(yīng)用場(chǎng)景,GPU可能并不是最佳的選擇。

        其次,GPU對(duì)于算數(shù)運(yùn)算的支持還有待提高。雖然現(xiàn)在主流GPU都支持符合IEEE標(biāo)準(zhǔn)的浮點(diǎn)運(yùn)算,但在對(duì)雙精度浮點(diǎn)的支持上還有待提高。例如,經(jīng)驗(yàn)表明,對(duì)于同樣的網(wǎng)絡(luò)結(jié)構(gòu)和訓(xùn)練方法,使用單精度運(yùn)算的出錯(cuò)概率要明顯高于雙精度運(yùn)算。同時(shí),普通消費(fèi)級(jí)別的GPU不支持ECC校驗(yàn),這一點(diǎn)在開發(fā)對(duì)運(yùn)算可靠性要求較高的應(yīng)用時(shí)需要特別注意。

        同常規(guī)的并行編程一樣,GPU的高度并行性也使得程序的調(diào)試工作較為困難。雖然已有大量工具可以用來輔助調(diào)試,但對(duì)于邏輯錯(cuò)誤等的調(diào)試依然是一項(xiàng)艱巨的挑戰(zhàn)。

        另外,目前基于GPU開發(fā)的程序在可移植上還存在不足。CUDA由于其簡(jiǎn)易性和相對(duì)完善的生態(tài),在GPGPU領(lǐng)域處于絕對(duì)的領(lǐng)先地位,然而它僅僅支持NVIDIA的GPU?;陂_放標(biāo)準(zhǔn)的OpenCL的程序雖然具有移植性,但是移植性能情況取決于硬件平臺(tái)OpenCL驅(qū)動(dòng)性能。目前,OpenCL的流行度正在不斷提升,軟硬件廠商對(duì)OpenCL支持力度也在不斷增大。在未來幾年,GPU編程的可移植性有望逐漸改善。

        6.2 GPU通用計(jì)算發(fā)展趨勢(shì)

        由于智能手機(jī)、平板電腦和可穿戴設(shè)備的普及,以及人們對(duì)于語(yǔ)音、視頻等多媒體資源需要的不斷高漲,GPU也在這是相對(duì)新興的領(lǐng)域得到廣泛應(yīng)用。未來,GPU通用計(jì)算也很有可能在這些領(lǐng)域發(fā)揮重要影響,有望在這一領(lǐng)域帶來一場(chǎng)計(jì)算變革。而這些非傳統(tǒng)的計(jì)算設(shè)備往往具有低功耗和嵌入式的特點(diǎn),這也給GPU計(jì)算帶來了新的挑戰(zhàn)[30,31]。

        互聯(lián)網(wǎng)的日新月異,大數(shù)據(jù)的來勢(shì)洶洶,也為大規(guī)模服務(wù)器端計(jì)算帶來了巨大的挑戰(zhàn)。將GPU用于服務(wù)器將是應(yīng)對(duì)挑戰(zhàn)的一種潛在的應(yīng)對(duì)方案。由于GPU缺乏CPU的通用性和靈活性,選擇合適的組織方式便尤為重要。一種可能的方案是將GPU和CPU按照一定的比例組合(例如,一個(gè)計(jì)算結(jié)點(diǎn)配置若干數(shù)量的CPU和GPU)。目前,針對(duì)GPU陣列或分布式集群,已經(jīng)有一些硬件連接解決方案和中間件支持。然而,這CPU和GPU之間的通信可能帶來潛在的性能瓶頸?;旌霞軜?gòu)是另一種可能的選擇方案。例如,AMD等硬件廠商提出HSA(heterogeneous system architecture)概念,試圖將 GPU和CPU在物理架構(gòu)上進(jìn)行深度整合,通過共享物理內(nèi)存方式減小通信開銷。由于基于HAS這一新型體系結(jié)構(gòu)的硬件還未大規(guī)模面世,因此其性能還有待在理論和實(shí)踐中進(jìn)一步檢驗(yàn)。

        7 結(jié)束語(yǔ)

        在計(jì)算領(lǐng)域,已經(jīng)從多核時(shí)代跨向眾核時(shí)代,具有眾核架構(gòu)的GPU已經(jīng)進(jìn)入高性能計(jì)算的主流行列。目前,GPU通用編程的軟硬件平臺(tái)已經(jīng)相對(duì)成熟,成為了計(jì)算領(lǐng)域的重要力量。GPU能以相對(duì)低廉的價(jià)格提供巨大的計(jì)算能力,從而獲得了廣泛的應(yīng)用。GPU通用計(jì)算的普及,使個(gè)人和小型機(jī)構(gòu)能有機(jī)會(huì)獲得以往昂貴的大型、超級(jí)計(jì)算機(jī)才能提供的計(jì)算能力。可以說,GPU在一定程度上改變了計(jì)算領(lǐng)域的格局和編程開發(fā)模式。

        GPU高度并行的特點(diǎn)使得GPU能夠高效地實(shí)現(xiàn)計(jì)算智能算法,以應(yīng)對(duì)大規(guī)模復(fù)雜問題,并且已經(jīng)在人工神經(jīng)網(wǎng)絡(luò)和群體智能優(yōu)化算法等方面獲得了大量的成功應(yīng)用。GPU已經(jīng)成為深度學(xué)習(xí)領(lǐng)域中事實(shí)上的標(biāo)準(zhǔn)計(jì)算平臺(tái),在圖像、語(yǔ)音自然語(yǔ)言處理等領(lǐng)域發(fā)揮著不可替代的作用。基于多GPU和GPU集群的深度網(wǎng)絡(luò)實(shí)現(xiàn)與訓(xùn)練,也是深度學(xué)習(xí)領(lǐng)域的研究熱點(diǎn)。群體智能優(yōu)化方法以其內(nèi)在并行性,在GPU平臺(tái)獲得了良好的加速效果,從而擴(kuò)大了群體算法求解問題的規(guī)模和范圍。隨著多目標(biāo)優(yōu)化應(yīng)用和研究的日益廣泛,基于GPU的多目標(biāo)群體智能優(yōu)化方法將逐步流行,以更好地應(yīng)對(duì)大規(guī)模復(fù)雜優(yōu)化問題。

        總之,作為通用計(jì)算單元,GPU將以更加多樣化的形式活躍在智能計(jì)算及其他計(jì)算領(lǐng)域。

        [1]OWENS J D,LUEBKE D,GOVINDARAJU N,et al.A survey of general-purpose computation on graphics hardware[J].Computer Graphics Forum,2007,26(1):80-113.

        [2]OWENS J D,LUEBKE D,GOVINDARAJU N,et al.GPU computing[J].Proceedings of the IEEE,2008,96(5):879-899.

        [3]SUTTER H.The free lunch is over:a fundamental turn toward concurrency in software[J].Dr.Dobb’s Journal,2005,30(3):202-210.

        [4]ROSS P E.Why CPU frequency stalled[J].Spectrum,2008,45(4):72-78.

        [5]BORKAR S.Getting gigascale chips:challenges and opportunities in continuing Moore's Law[J].Queue,2003,1(7):26-33.

        [6]NVIDIA.CUDA C programming guide v6.5[R].Santa Clara,CA,USA:NVIDIA Corporation,2014.

        [7]JARARWEH Y,JARRAH M,BOUSSELHAM A,et al.GPU-based personal supercomputing[C]//2013 IEEE Jordan Conference on Applied Electrical Engineering and Computing Technologies.Amman,2013:1-5.

        [8]KAPASI U J,RIXNER S,DALLY W J,et al.Programmable stream processors[J].Computer,2003,36(8):54-62.

        [9]BUCK I,F(xiàn)OLEY T,HORN D,et al.Brook for GPUs:stream computing on graphics hardware[J].ACM Transactions on Graphics,2004,23(3):777-786.

        [10]Microsoft.C++accelerated massive parallelism[Z].Redmond,WA,USA:Microsoft,2013.

        [11]NVIDIA.CUDA C best practices guide version 4.1[R].Santa Clara,CA,USA:NVIDIA Corporation,2012.

        [12]NVIDIA.GPU-Accelerated Libraries[OL/EB].[2015-01-05].https://developer.nvidia.com/gpu-accelerated-libraries.

        [13]JIA Y,SHELHAMER E,DONAHUE J,et al.Caffe:convolutional architecture for fast feature embedding[C]//Proceedings of the ACM International Conference on Multimedia,[s.l.],2014:675-678.

        [14]GASTER B,HOWES L,KAELI D R,等.OpenCL異構(gòu)計(jì)算[M].北京:清華大學(xué)出版社,2012:10-35.

        [15]KIRK D B,HWU W W.Programming massively parallel processors:a Hands-on approach[M].Beijing:Tsinghua University Press,2010:205-220.

        [16]MUNSHI A,GASTER B,MATTSON T G,et al.OpenCL Programming Guide[M].Boston:Addison_Wesley Professional,2011:63-68.

        [17]AMD上海研發(fā)中心.跨平臺(tái)的多核與從核編程講義——OpenCL 的方式[M].上海:AMD,2010:1-154.

        [18]FARBER R.高性能CUDA應(yīng)用設(shè)計(jì)與開發(fā)[M].北京:機(jī)械工業(yè)出版社,2013:1-49.

        [19]ZEILER M,F(xiàn)ERGUS R.Visualizing and understanding convolutional networks[C]//Proceedings of the 13th European Conference on Computer Vision.Zurich,Switzerland,2014:818-833.

        [20]HINTON G,OSINDERO S,WELLING M,et al.Unsupervised discovery of nonlinear structure using contrastive backpropagation[J].Nature,2006,30(4):725-731.

        [21]KRIZHEVSKY A,SUTSKEVER I,HINTON G.Imagenet classification with deep convolutionalneuralnetworks[C]//Advances in Neural Information Processing Systems 25.Reno,Nevada,USA,2012:1106-1114.

        [22]COATES A,HUVAL B,WANG T,et al.Deep learning with COTS HPC systems[C]//Proceedings of the 30th International Conference on Machine Learning.Atlanta,USA,2013:1337-1345.

        [23]ZHOU Y,TAN Y.GPU-based parallel particle swarm optimization[C]//IEEE Congress on Evolutionary Computation.Trondheim,Norway,2009:1493-1500.

        [24]ZHOU Y,TAN Y.Particle swarm optimization with triggered mutation and its implementation based on GPU[C]//GECCO'10:Proceedings of the 12th Annual Conference on Genetic and Evolutionary Computation.Portland,Oregon,USA,2010:1-8.

        [25]ZHOU Y,TAN Y.GPU-based parallel multi-objective particle swarm optimization[J].International Journal of Artificial Intelligence,2011,7(A11):125-141.

        [26]DING K,TAN Y.A GPU-based parallel fireworks algorithm for optimization[C]//GECCO'13:Proceedings of the Fifteenth Annual Conference on Genetic and Evolutionary Computation Conference.Amsterdam,the Netherlands,2013:9-16.

        [27]TAN Y,ZHU Y.Fireworks algorithm for optimization[C]//First International Conference of Swarm Intelligence.Beijing,China,2010:355-364.

        [28]RYMUT B,KWOLEK B.GPU-supported object tracking using adaptive appearance models and particle swarm optimization[C]//International Conference on Computer Vi-sion and Graphics,Warsaw,Poland,2010:227-234.

        [29]MUSSI L,IVEKOVIC S,CAGNONI S.Markerless articulated human body tracking from multi-view video with GPU-PSO[C]//9th International Conference on Environmental Systems.York,UK,2010:97-108.

        [30]NOBILE M S,BESOZZI D,CAZZANIGA P,et al.A GPU-based multi-swarm PSO method for parameter estimation in stochastic biological systems exploiting discretetime target series[C]//10th European Conference on Evolutionary Computation,Machine Learning and Data Mining in Computational Biology.Málaga,Spain,2012,7246:74-85.

        [31]MAGHAZEH A,BORDOLOI UD,ELES P,et al.General purpose computing on low-power embedded GPUs:has it come of age[R].Link?ping University Electronic Press,2013.

        [32]HALLMANS D,SANDSTROM K,LINDGREN M,et al.GPGPU for industrial control systems[C]//2013 IEEE 18th Conference on Emerging Technologies Factory Automation.Cagliari,Italy,2013:1-4.

        猜你喜歡
        線程內(nèi)存編程
        我家有只編程貓
        我家有只編程貓
        我家有只編程貓
        我家有只編程貓
        “春夏秋冬”的內(nèi)存
        淺談linux多線程協(xié)作
        基于內(nèi)存的地理信息訪問技術(shù)
        Linux線程實(shí)現(xiàn)技術(shù)研究
        么移動(dòng)中間件線程池并發(fā)機(jī)制優(yōu)化改進(jìn)
        上網(wǎng)本為什么只有1GB?
        亚洲av一区二区在线| 中文字幕人乱码中文字幕| 国产男小鲜肉同志免费| 狠狠色婷婷久久一区二区| 免费大学生国产在线观看p | 国产freesexvideos中国麻豆 | 欧美俄罗斯乱妇| 日韩精人妻无码一区二区三区 | 五月激情在线视频观看| 成午夜精品一区二区三区| 日本动态120秒免费| 谁有在线观看av中文| 午夜福利视频一区二区二区| 日韩精品第一区二区三区 | 91尤物在线看| 日韩有码在线一区二区三区合集| 国产精品多人p群无码| 中文字幕亚洲乱码熟女一区二区 | 人妻免费一区二区三区免费| 午夜性无码专区| 久久久久亚洲av成人网址| 成人综合激情自拍视频在线观看| 国产一区二区黄色录像| 午夜精品久久久久久| 亚洲国产香蕉视频欧美| 美女被强吻并脱下胸罩内裤视频| 精品久久久久久无码专区| 亚洲av无码久久寂寞少妇| 校花高潮一区日韩| 国产激情视频在线观看大全| 亚洲精品乱码8久久久久久日本 | 国产午夜无码精品免费看动漫| 国产av一区二区制服丝袜美腿| 亚洲精品无码专区在线在线播放| 老湿机香蕉久久久久久| 国产精品亚洲A∨无码遮挡| 久久久精品国产免费看| 丰满爆乳在线播放| 亚洲AV成人无码国产一区二区| 国产成人精品一区二三区在线观看 | 亚欧AV无码乱码在线观看性色 |