關(guān)鍵詞:CUDA;時(shí)間預(yù)測(cè);靜態(tài);PTX;流水線(xiàn)
中圖分類(lèi)號(hào):TP391 文獻(xiàn)標(biāo)志碼:A
0 引言(Introduction)
GPU(Graphics Processing Unit)通過(guò)單指令多線(xiàn)程的模式執(zhí)行程序,在處理大運(yùn)算量的計(jì)算需求時(shí),具有較好的加速性能。在學(xué)術(shù)界,針對(duì)CUDA程序的優(yōu)化是一項(xiàng)常見(jiàn)且重要的任務(wù),例如對(duì)拼圖算法的并行研究[1]就是一個(gè)典型的例子。然而,GPU計(jì)算處理的任務(wù)具有計(jì)算復(fù)雜、時(shí)間成本高等特點(diǎn),這給代碼優(yōu)化或任務(wù)調(diào)度帶來(lái)了不小的挑戰(zhàn)。因此,通過(guò)對(duì)CUDA核函數(shù)執(zhí)行時(shí)間的準(zhǔn)確預(yù)測(cè),可以進(jìn)一步優(yōu)化任務(wù)調(diào)度,提高整體的計(jì)算效率,這一研究具有重要意義。
MOOLCHANDANI[2]提出用訪(fǎng)存指令和計(jì)算指令的線(xiàn)程束并行關(guān)系揭示延遲隱藏,但沒(méi)有很好地解決如何預(yù)測(cè)時(shí)間的問(wèn)題。BARAI等[3]提出了一種詳細(xì)提取特征的模型,但需要獲取的特征過(guò)于龐大,無(wú)法靜態(tài)收集。鑒于機(jī)器學(xué)習(xí)在預(yù)測(cè)方面的顯著優(yōu)勢(shì),其在這一領(lǐng)域的應(yīng)用受到了廣泛關(guān)注,但它需要一個(gè)大型數(shù)據(jù)集表征可能影響實(shí)際 GPU 執(zhí)行的大多數(shù)特征。AMARIS等[4]對(duì)3種不同的機(jī)器學(xué)習(xí)方法進(jìn)行了比較,以預(yù)測(cè) CUDA核函數(shù)的執(zhí)行時(shí)間,結(jié)果發(fā)現(xiàn)分析模型與機(jī)器學(xué)習(xí)方法在預(yù)測(cè)性能上各有優(yōu)勢(shì)。
本研究采用了一種創(chuàng)新方法,將分析建模與機(jī)器學(xué)習(xí)兩者結(jié)合應(yīng)用。首先,通過(guò)流水線(xiàn)模擬線(xiàn)程的運(yùn)行情況,得到未考慮內(nèi)存離散程度和分支分歧的核函數(shù)執(zhí)行時(shí)鐘周期。其次,使用內(nèi)存離散模型分析程序的未合并全局訪(fǎng)存程度。最后,將流水線(xiàn)模擬的時(shí)鐘周期和未合并全局訪(fǎng)存程度,結(jié)合程序的基本塊執(zhí)行路徑作為工作流網(wǎng)絡(luò)的輸入,最終準(zhǔn)確地預(yù)測(cè)出CUDA核函數(shù)的執(zhí)行時(shí)間。
1 相關(guān)理論(Related theory)
1.1 GPU架構(gòu)
GPU是一種高吞吐量處理器,其核心結(jié)構(gòu)由多個(gè)并行運(yùn)行的流式多處理器(Streaming Multiprocessor,SM)陣列組成。不同架構(gòu)的GPU包含的SM的數(shù)量會(huì)有所變化。每個(gè)SM內(nèi)部都配備有多個(gè)ALU(Arithmetic And Logic Unit)內(nèi)核,這些ALU內(nèi)核擁有專(zhuān)用的計(jì)算單元,例如單精度單元(SinglePrecision Unit,SP)、雙精度單元(Double Precision Unit,DP)和特殊功能單元(Special Function Unit,SFU)。每個(gè)SM都有一個(gè)專(zhuān)用的1級(jí)緩存,用于緩存全局內(nèi)存;而2級(jí)緩存由所有SM共享,此外每個(gè)SM都有一個(gè)專(zhuān)用的共享內(nèi)存。除了計(jì)算單元,每個(gè)SM還有一定數(shù)量的warp調(diào)度器,負(fù)責(zé)選擇調(diào)度和執(zhí)行warp。
1.2 并行執(zhí)行及編程
本文專(zhuān)注于探討NVIDIA 架構(gòu)下的GPU 程序,特別是CUDA程序。在CUDA編程模型中,運(yùn)行在GPU上的部分稱(chēng)為核函數(shù)(kernel)。CUDA的術(shù)語(yǔ)中,從同一核函數(shù)生成的所有線(xiàn)程都被分到一個(gè)網(wǎng)格(grid)中,grid由許多線(xiàn)程塊(block)組成。每個(gè)block由多個(gè)線(xiàn)程組成,同一個(gè)block下的線(xiàn)程可以通過(guò)共享內(nèi)存進(jìn)行通信,不同block之間的線(xiàn)程則無(wú)法通信。因此,塊與塊之間是高度并行的。每32個(gè)線(xiàn)程組成一個(gè)warp。GPU使用單指令多線(xiàn)程模型命令warp中的線(xiàn)程以鎖步方式執(zhí)行相同的指令。當(dāng)指令是對(duì)DRAM(DynamicRandom Access Memory)或全局內(nèi)存進(jìn)行加載或存儲(chǔ)時(shí),如果warp中線(xiàn)程的訪(fǎng)問(wèn)地址在內(nèi)存中彼此相鄰,GPU 內(nèi)存子系統(tǒng)可以將線(xiàn)程合并或分組到幾個(gè)DRAM 事務(wù)中,從而減少訪(fǎng)問(wèn)延遲,這種優(yōu)化方式就是合并的訪(fǎng)存(Coalesced MemoryAccess)。否則,若訪(fǎng)問(wèn)在內(nèi)存中是分散的,則需要更多的DRAM事務(wù),此類(lèi)訪(fǎng)存方式稱(chēng)為未合并訪(fǎng)存(UncoalescedMemory Access)。
1.3 指令集架構(gòu)
NVIDIA提供了獨(dú)立于機(jī)器的虛擬匯編指令集,稱(chēng)為并行執(zhí)行線(xiàn)程(Parallel Thread Execution)。PTX被認(rèn)為是源代碼的中間表示,類(lèi)似于LLVM IR(LLVM Intermediate Representation),并且它不會(huì)在設(shè)備上被直接執(zhí)行。因此,當(dāng)用作跨不同GPU架構(gòu)進(jìn)行性能建模的基礎(chǔ)時(shí),PTX指令集展現(xiàn)出顯著的優(yōu)勢(shì)——相同的PTX指令集可用于任何GPU。
2 時(shí)間預(yù)測(cè)模型架構(gòu)(Architecture of timeprediction model)
本文所提時(shí)間預(yù)測(cè)模型架構(gòu)圖如圖1所示。首先,該模型將CUDA程序轉(zhuǎn)換為PTX代碼,根據(jù)PTX代碼可以分析得到指令的具體類(lèi)型和指令順序,并將其組成任務(wù)列表。其次,將任務(wù)列表對(duì)應(yīng)的具體硬件配置和指令延遲放入流水線(xiàn)模擬器,得到流水線(xiàn)預(yù)測(cè)時(shí)間,同時(shí)內(nèi)存離散模型根據(jù)任務(wù)列表得到不同分支分歧下的未合并次數(shù)。這些未合并訪(fǎng)問(wèn)次數(shù)、流水線(xiàn)預(yù)測(cè)時(shí)間及核函數(shù)啟動(dòng)開(kāi)銷(xiāo)一起作為預(yù)測(cè)執(zhí)行時(shí)間的輸入。最后,預(yù)測(cè)執(zhí)行時(shí)間通過(guò)工作流網(wǎng)絡(luò),將之前的輸入及PTX的節(jié)點(diǎn)路徑作為特征,預(yù)測(cè)最終的核函數(shù)執(zhí)行時(shí)間。
2.1PTX分析
每一條PTX語(yǔ)句都包含一個(gè)命令,命令內(nèi)包含該指令的執(zhí)行方式以及使用的寄存器的數(shù)據(jù)大小。值得注意的是,每一條PTX語(yǔ)句的地址數(shù)量不等,首地址為數(shù)據(jù)放入的寄存器名稱(chēng),之后的地址為數(shù)據(jù)讀取的寄存器名稱(chēng)。一個(gè)PTX內(nèi)部由一個(gè)或多個(gè)指令塊組成,每個(gè)指令塊代表一個(gè)CUDA程序中的一個(gè)核函數(shù),指令塊之間由大括號(hào)分隔。每個(gè)指令塊可以進(jìn)一步細(xì)分為基本塊,基本塊是在SM 上串行的一組指令。即每個(gè)基本塊只能從塊中的第一條指令進(jìn)入,并從塊中的最后一條指令退出。在PTX中,基本塊有兩種流出分支:一種是順序執(zhí)行完當(dāng)前塊后流出到緊鄰的下一個(gè)基本塊;另一種是執(zhí)行完當(dāng)前塊后跳轉(zhuǎn)到另一個(gè)特定標(biāo)記的基本塊。為了獲取PTX的正確指令流程,通常需要借助控制流程圖。官方提供了一種獲取控制流程圖的方式,但是該方式只能得到基本塊的大致分支,無(wú)法了解一個(gè)基本塊是否被執(zhí)行了多次,即是否存在循環(huán)的情況。對(duì)此,本研究使用LLVM提供的工具在靜態(tài)編譯狀態(tài)下,幫助判斷基本塊的循環(huán)次數(shù)。由于PTX代碼是基于單線(xiàn)程的視角,實(shí)際上每個(gè)線(xiàn)程的具體執(zhí)行情況可能會(huì)因分支分歧而有所不同。為了簡(jiǎn)化分析,本研究選擇采用大部分線(xiàn)程會(huì)執(zhí)行的順序作為任務(wù)列表的輸入[5]。CUDA程序提供了支持PTX的內(nèi)聯(lián)匯編,通過(guò)內(nèi)聯(lián)匯編進(jìn)行微基準(zhǔn)測(cè)試,可以對(duì)每種PTX指令進(jìn)行計(jì)時(shí),進(jìn)而得出每種指令具體的延遲。不同的架構(gòu)有不同的硬件配置,導(dǎo)致在不同架構(gòu)下,每種指令的延遲會(huì)有所不同,程序的執(zhí)行時(shí)間也會(huì)隨著硬件不同而發(fā)生變化,因此每當(dāng)更換硬件環(huán)境時(shí),都需要對(duì)單指令的延遲進(jìn)行一次額外的測(cè)試。
2.2 任務(wù)列表
目前的GPU架構(gòu)一般由多個(gè)SM 組成,每個(gè)SM 都有自己的指令緩沖區(qū)、調(diào)度器和調(diào)度單元。而且,每個(gè)SM 還擁有豐富的計(jì)算資源,能夠處理不同的ALU 操作。具體來(lái)說(shuō),每個(gè)SM包含數(shù)個(gè)warp調(diào)度器,它們嘗試在數(shù)個(gè)時(shí)鐘周期內(nèi)向給定的warp發(fā)出一個(gè)或多個(gè)指令,如果指令之間不存在依賴(lài)性,那么后續(xù)指令可以在前一個(gè)指令之前就被發(fā)出。為了更準(zhǔn)確地模擬這種并行處理環(huán)境,本文設(shè)計(jì)了任務(wù)列表數(shù)據(jù)結(jié)構(gòu)作為流水線(xiàn)模擬器的輸入,每個(gè)任務(wù)列表代表一個(gè)線(xiàn)程的指令順序。任務(wù)列表由眾多任務(wù)組成,每個(gè)任務(wù)代表一條指令,包含指令編號(hào)、任務(wù)列表編號(hào)、計(jì)算單元索引、指令延遲、模擬的寄存器名稱(chēng)、所屬的基本塊等。其中,計(jì)算單元索引是根據(jù)SM的資源進(jìn)行分類(lèi)的,可能包括單精度處理單元(SP)、雙精度處理單元(DP)及特殊功能單元(SFU)等。模擬的寄存器名稱(chēng)來(lái)源于對(duì)應(yīng)的PTX。根據(jù)PTX的命令,每個(gè)線(xiàn)程讀取寫(xiě)入的寄存器可能不同,在任務(wù)列表中,這些寄存器通過(guò)加上線(xiàn)程本身的索引進(jìn)行區(qū)分。在PTX代碼中,由于無(wú)法體現(xiàn)緩存命中、訪(fǎng)存合并等信息,因此假設(shè)所有數(shù)據(jù)已經(jīng)被保存在寄存器中。這意味著,在PTX語(yǔ)句的執(zhí)行過(guò)程中,每當(dāng)遇到一個(gè)新的寄存器,可以認(rèn)為實(shí)際上執(zhí)行了一次訪(fǎng)問(wèn)全局內(nèi)存的命令。為了簡(jiǎn)化流水線(xiàn)的模擬,任務(wù)列表默認(rèn)程序的訪(fǎng)存是合并的。
考慮到GPU核函數(shù)的計(jì)算性能與硬件環(huán)境之間存在強(qiáng)相關(guān)性,若分析模型中的硬件環(huán)境發(fā)生改變,則對(duì)應(yīng)模型的參數(shù)也需要進(jìn)行微調(diào)整。本文在評(píng)估中使用了GeForce RTX 2080Ti顯卡,即圖靈架構(gòu)。
3 模擬器及模型(Simulator and models)
3.1 核函數(shù)啟動(dòng)開(kāi)銷(xiāo)
初始的核函數(shù)執(zhí)行時(shí)間是在流水線(xiàn)模型運(yùn)行完成后得到的。然而實(shí)驗(yàn)發(fā)現(xiàn),對(duì)于一些指令數(shù)量很少的核函數(shù)來(lái)說(shuō),實(shí)際執(zhí)行時(shí)間超出了模擬時(shí)間。即使是無(wú)指令的核函數(shù),隨著線(xiàn)程數(shù)量的增加,核函數(shù)的執(zhí)行時(shí)間也會(huì)逐漸增加。通過(guò)對(duì)空核函數(shù)執(zhí)行時(shí)間與線(xiàn)程分配數(shù)量進(jìn)行記錄發(fā)現(xiàn),空核函數(shù)執(zhí)行時(shí)間與啟動(dòng)參數(shù)之間呈線(xiàn)性關(guān)系。圖靈架構(gòu)下的核函數(shù)啟動(dòng)時(shí)延公式為
l=3.824×10-6·nt+2.882 (1)
其中:l 是空指令核函數(shù)的執(zhí)行時(shí)間,nt 為核函數(shù)設(shè)置的總線(xiàn)程數(shù)。得到的核函數(shù)啟動(dòng)開(kāi)銷(xiāo)將作為預(yù)測(cè)執(zhí)行時(shí)間的輸入。
3.2 指令流水線(xiàn)模擬器
指令流水線(xiàn)模擬器是基于SM 資源進(jìn)行建模的超標(biāo)量流水線(xiàn),它有兩個(gè)子系統(tǒng),分別為計(jì)算子系統(tǒng)和存儲(chǔ)子系統(tǒng)。計(jì)算子系統(tǒng)又分為DP、SP和SFU三個(gè)子管道,分別用于處理不同的指令類(lèi)型。三個(gè)不同的子管道之間可以并行運(yùn)行,由warp調(diào)度器亂序派遣指令進(jìn)入。線(xiàn)程束調(diào)度器的數(shù)量以及子管道的容量由對(duì)應(yīng)的硬件配置決定。亂序調(diào)度的目的是延遲隱藏,使得在同一時(shí)間內(nèi),各個(gè)子管道內(nèi)部的指令數(shù)量盡可能最大化。
模型主要由兩個(gè)參數(shù)表征:發(fā)出兩個(gè)獨(dú)立指令之間所需的周期數(shù)(發(fā)射延遲),以及指令進(jìn)入管道后需要執(zhí)行的周期數(shù)(這里稱(chēng)為單指令延遲)。由于warp采用了單指令多線(xiàn)程的執(zhí)行方式,而流水線(xiàn)模型通常是針對(duì)計(jì)算或內(nèi)存指令進(jìn)行調(diào)度的,因此在這個(gè)模型中,warp被視為基本的調(diào)度單元。
指令流水線(xiàn)模型如圖2所示。在圖靈架構(gòu)下,每個(gè)SM 配備了4個(gè)warp調(diào)度器,即流水線(xiàn)模型可以同時(shí)調(diào)度4個(gè)warp。本研究進(jìn)一步結(jié)合了計(jì)分板策略,用于優(yōu)化調(diào)度過(guò)程。當(dāng)功能部件存在可用于處理指令的資源時(shí),調(diào)度器會(huì)根據(jù)對(duì)應(yīng)的任務(wù)列表發(fā)出對(duì)應(yīng)的新指令。如果調(diào)度器沒(méi)有找到可用的指令,那么調(diào)度器會(huì)在下一個(gè)時(shí)鐘周期選擇新的warp。指令將根據(jù)其類(lèi)型,請(qǐng)求進(jìn)入對(duì)應(yīng)的子管道。每個(gè)子管道根據(jù)配置可以并行處理一定數(shù)量的指令。若子管道無(wú)法接受任何新指令,則該指令進(jìn)入等待狀態(tài),直到子管道出現(xiàn)空閑并可以接受下一指令。然后,該指令將在給定的延遲時(shí)間內(nèi)占用該資源。
本研究使用流水線(xiàn)模擬單個(gè)SM 下的核函數(shù)運(yùn)行情況。為實(shí)現(xiàn)這一目標(biāo),研究人員采用了并行編程,構(gòu)建了4個(gè)線(xiàn)程,分別模擬4個(gè)warp調(diào)度器的行為。研究假設(shè)所有子工作負(fù)載都能在SM上均勻地劃分,并進(jìn)行并行處理。模擬器首先需要初始化寄存器狀態(tài)表和功能部件表,寄存器狀態(tài)表用來(lái)記錄每個(gè)寄存器是否在等待某一功能部件的運(yùn)算結(jié)果,功能部件表用來(lái)記錄當(dāng)前各個(gè)資源的占用情況。
每個(gè)指令在模擬器中有4種狀態(tài),即流出、讀操作、執(zhí)行、寫(xiě)回。為了確保指令能夠按照正確的順序和時(shí)機(jī)執(zhí)行,同時(shí)避免資源競(jìng)爭(zhēng)和沖突,每次指令狀態(tài)的切換需要根據(jù)功能部件狀態(tài)、寄存器狀態(tài)以及指令自身狀態(tài)進(jìn)行條件檢驗(yàn)。當(dāng)warp調(diào)度器在某一時(shí)鐘周期內(nèi)因?yàn)闊o(wú)可執(zhí)行命令而暫停自身時(shí),它會(huì)被掛起,直至下一個(gè)時(shí)鐘周期的到來(lái)。全局時(shí)鐘周期用來(lái)記錄模擬器下的執(zhí)行時(shí)間。在每次循環(huán)中,全局時(shí)鐘周期會(huì)根據(jù)模擬情況增加,增加的量從1至功能部件內(nèi)部最小剩余執(zhí)行周期不等,這取決于模擬器的具體運(yùn)行情況。模擬器會(huì)一直運(yùn)行,直至SM內(nèi)所有warp的任務(wù)列表清空為止。最終,指令流水線(xiàn)模擬器返回全局時(shí)鐘周期作為預(yù)測(cè)執(zhí)行時(shí)間的輸入。
3.3 內(nèi)存離散模型
在流水線(xiàn)模型使用任務(wù)列表時(shí),程序的內(nèi)存訪(fǎng)問(wèn)被假設(shè)為合并的,但在實(shí)際情況下,內(nèi)存訪(fǎng)問(wèn)可能是非合并的,這會(huì)導(dǎo)致執(zhí)行時(shí)間的延長(zhǎng)。有研究人員發(fā)現(xiàn),可以通過(guò)對(duì)線(xiàn)程索引追蹤來(lái)判斷指令是否存在非合并訪(fǎng)存[6]。合并的全局內(nèi)存訪(fǎng)問(wèn)通常具有兩個(gè)主要特點(diǎn):一是指令對(duì)于線(xiàn)程索引值的依賴(lài)性,其中依賴(lài)關(guān)系可以表示為對(duì)線(xiàn)程索引值的常數(shù)波動(dòng);二是指令獨(dú)立于線(xiàn)程索引且一般為常數(shù)。因此,本研究通過(guò)對(duì)指令與線(xiàn)程索引的關(guān)系來(lái)判斷程序的非合并訪(fǎng)存程度,并作為預(yù)測(cè)執(zhí)行時(shí)間的輸入。
3.4 預(yù)測(cè)執(zhí)行時(shí)間
在PTX代碼分析中,因?yàn)閱?wèn)題的復(fù)雜性,分支分歧的影響通常被忽略。然而,機(jī)器學(xué)習(xí)方法可以通過(guò)監(jiān)督學(xué)習(xí)捕獲分支特征。本研究使用了工作流性能預(yù)測(cè)網(wǎng)絡(luò)[7],通過(guò)PTX的控制流程圖獲取分支分歧對(duì)執(zhí)行時(shí)間的影響??刂屏鞒虉D的節(jié)點(diǎn)數(shù)量設(shè)置為27個(gè),這個(gè)數(shù)量基本能夠滿(mǎn)足大部分核函數(shù)的基本塊數(shù)量。若核函數(shù)的基本塊數(shù)量超過(guò)了27個(gè),則需要對(duì)部分基本塊進(jìn)行縮略。若基本塊只有一種流出分支且分支是緊接著的下一個(gè)基本塊,則這兩個(gè)基本塊可以算作同一個(gè)節(jié)點(diǎn)。
本研究將核函數(shù)啟動(dòng)開(kāi)銷(xiāo)、流水線(xiàn)模擬器的全局時(shí)鐘周期、非合并訪(fǎng)存的次數(shù)及基本塊路徑代表的控制流程圖作為特征,通過(guò)工作流網(wǎng)絡(luò),對(duì)CUDA 核函數(shù)的運(yùn)行時(shí)間進(jìn)行精準(zhǔn)預(yù)測(cè)。
4 實(shí)驗(yàn)與結(jié)果(Experiment and result)
4.1 實(shí)驗(yàn)數(shù)據(jù)集
本研究使用了Rodinia基準(zhǔn)測(cè)試套件中的7個(gè)應(yīng)用程序及其包含的12個(gè)核函數(shù),同時(shí)選用了Polybench基準(zhǔn)測(cè)試套件中的15個(gè)應(yīng)用程序及其包含的34個(gè)核函數(shù)。為了全面評(píng)估核函數(shù)的性能,研究人員測(cè)試了不同線(xiàn)程總數(shù)下,相同核函數(shù)的執(zhí)行時(shí)間。每個(gè)核函數(shù)的實(shí)際執(zhí)行時(shí)間使用Nsight在GeForce RTX 2080 Ti上運(yùn)行獲得。
4.2 預(yù)測(cè)結(jié)果
本研究采用平均絕對(duì)百分比誤差(Mean Absolute PercentageError,MAPE)作為評(píng)估指標(biāo),該指標(biāo)常用于評(píng)估時(shí)間序列預(yù)測(cè)。MAPE值越小,代表結(jié)果越準(zhǔn)確,其公式為
其中:At 為實(shí)際的核函數(shù)執(zhí)行時(shí)間,F(xiàn)t 為預(yù)測(cè)的執(zhí)行時(shí)間。實(shí)驗(yàn)獲得的平均絕對(duì)百分比誤差為22.87%。
圖3展示了實(shí)際執(zhí)行時(shí)間與預(yù)測(cè)執(zhí)行時(shí)間的比較結(jié)果,其中橫坐標(biāo)為預(yù)測(cè)執(zhí)行時(shí)間,縱坐標(biāo)為實(shí)際執(zhí)行時(shí)間。從圖3中可以看出,大部分的預(yù)測(cè)結(jié)果是接近真實(shí)值的。在執(zhí)行時(shí)間較長(zhǎng)的樣本上,預(yù)測(cè)結(jié)果要相對(duì)差一些。這主要是因?yàn)閷?shí)驗(yàn)沒(méi)有考慮訪(fǎng)存的命中率這一因素。隨著執(zhí)行時(shí)間的增長(zhǎng),訪(fǎng)存命中率對(duì)結(jié)果的影響越大。
圖4展示了樣本的誤差分布,大約有81%的樣本在真實(shí)值的0%~25%,而大約15%的樣本在真實(shí)值的26%~50%,只有少部分樣本超過(guò)了真實(shí)值的50%。
表1顯示了模型在不同模塊下的誤差情況。通過(guò)對(duì)比可以發(fā)現(xiàn),對(duì)PTX代碼中的基本塊進(jìn)行循環(huán)分析的模型相較于單純使用流水線(xiàn)的模型,其效果提升顯著。這一提升的主要原因在于,基本塊的循環(huán)復(fù)用改變了原有的指令依賴(lài),擴(kuò)展了線(xiàn)程的任務(wù)列表。這對(duì)流水線(xiàn)模擬器產(chǎn)生了巨大的影響,所以對(duì)基本塊的循環(huán)分析是必要的。內(nèi)存離散模塊對(duì)整體模型的提升在于考慮了程序的離散程度和分支分歧。
4.3 相關(guān)結(jié)果比較
使用相同的架構(gòu),從Polybench基準(zhǔn)測(cè)試中選擇部分核函數(shù)在多個(gè)線(xiàn)程總數(shù)下進(jìn)行對(duì)比,對(duì)比結(jié)果如表2所示。采用機(jī)器學(xué)習(xí)的模型1[8]的MAPE值要高于本文模型的MAPE值,達(dá)到了52%。機(jī)器學(xué)習(xí)的MAPE值分布比較分散,表明程序間差異性較大,機(jī)器學(xué)習(xí)并未完全提取特征,比如指令的依賴(lài)性。與采用靜態(tài)分析的模型2[9]相比,本文模型的MAPE值要更好一些,并且本文模型在預(yù)測(cè)執(zhí)行時(shí)間較長(zhǎng)的核函數(shù)時(shí),結(jié)果更貼近實(shí)際執(zhí)行時(shí)間。
5 結(jié)論(Conclusion)
本研究對(duì)PTX代碼進(jìn)行了深入分析,旨在實(shí)現(xiàn)模型在不同的架構(gòu)下的遷移。模型充分考慮了并行性與資源限制等因素,更好地捕捉到了核函數(shù)中的延遲隱藏。同時(shí),模型也考慮了離散程度以及分支分歧對(duì)時(shí)間的影響,符合核函數(shù)的實(shí)際執(zhí)行情況。實(shí)驗(yàn)結(jié)果表明,本文模型對(duì)核函數(shù)執(zhí)行時(shí)間的預(yù)測(cè)結(jié)果具有較高的準(zhǔn)確性??傮w而言,本文模型在靜態(tài)分析下能夠達(dá)到較好的預(yù)測(cè)效果,這不僅有助于任務(wù)調(diào)度的優(yōu)化,還能為開(kāi)發(fā)人員提供有力的支持,助力其進(jìn)行更為高效的代碼優(yōu)化工作。
作者簡(jiǎn)介:
張建定(1998-),男,碩士生。研究領(lǐng)域:并行計(jì)算。
陳根浪(1978-),男,博士,教授。研究領(lǐng)域:大數(shù)據(jù)及人工智能,并行計(jì)算,生命健康。
明宗禹(1999-),男,碩士生。研究領(lǐng)域:并行計(jì)算。