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

        ?

        GPGPU-Sim兼容性問題解決方案及腳本自動(dòng)化運(yùn)行方法的研究

        2023-10-09 01:44:30曹建立仲怡寧趙晨陽
        關(guān)鍵詞:程序

        曹建立, 仲怡寧, 趙晨陽

        (洛陽師范學(xué)院 數(shù)學(xué)科學(xué)學(xué)院, 河南 洛陽 471934)

        0 引言

        GPGPU-Sim是一款用CPU來模擬GPU運(yùn)行過程的模擬器軟件[1]. 該模擬器的運(yùn)行統(tǒng)計(jì)結(jié)果可以達(dá)到時(shí)鐘周期的精度, 其代碼和配置文件可根據(jù)用戶需求來修改, 并且提供了可視化工具Aerial Vision[2]來幫助用戶直觀地觀察Kerne內(nèi)核的運(yùn)行狀態(tài), 此外, 還集成了可以提供功耗報(bào)告的功耗分析模塊GPUWattch[3]. 因此, GPGPU-Sim成為大量學(xué)者研究GPU體系結(jié)構(gòu)、驗(yàn)證GPU新設(shè)計(jì)方案和調(diào)度算法的工具. 如Sahoo等[4]利用GPGPU-Sim來研究GPU緩存管理方案, Li等[5]利用GPGPU-Sim來研究Bypass技術(shù)在GPU上的應(yīng)用效果, Mu等[6]利用GPGPU-Sim來研究GPU中的內(nèi)存調(diào)度優(yōu)化.

        該模擬器基于Ubuntu10.10開發(fā), 在Ubuntu 10.10版本和12.04版本上運(yùn)行良好,但在16.04及之后的版本上運(yùn)行時(shí), 會(huì)出現(xiàn)動(dòng)態(tài)鏈接庫(kù)不兼容的問題. Ubuntu 10.10版本和12.04版本的操作系統(tǒng)分別于2010年10月和2012年4月發(fā)布, 目前看來已經(jīng)比較陳舊, 大量主流的計(jì)算機(jī)硬件已經(jīng)不再支持該版本的安裝與運(yùn)行. 于是, 對(duì)于眾多通過GPGPU-Sim來研究GPU體系結(jié)構(gòu)的學(xué)者來說, 繼續(xù)使用該軟件存在兩個(gè)問題: 一方面, 目前主流的計(jì)算機(jī)硬件具備較高的運(yùn)算能力, 但是因?yàn)椴恢С諹buntu12.04之前的版本, 所以無法直接運(yùn)行GPGPU-Sim; 另一方面, 能運(yùn)行老版本Ubuntu系統(tǒng)的硬件大多比較陳舊, 且運(yùn)行GPGPU-Sim時(shí)效率十分低下. 雖然這些問題可以通過在新硬件上運(yùn)行虛擬機(jī)來解決, 但是經(jīng)過實(shí)驗(yàn)對(duì)比, 虛擬機(jī)的運(yùn)行效率很低, 性能大約是直接在硬件上運(yùn)行時(shí)的2/3. 因此, 研究讓GPGPU-Sim可以在新的軟硬件平臺(tái)上直接運(yùn)行的方法, 對(duì)于廣大模擬器使用者和研究者有著現(xiàn)實(shí)意義.

        1 模擬器原理

        GPGPU-Sim小組在說明文件中指出了開發(fā)GPGPU-Sim的目的: 一方面可以讓研究者分析CUDA程序瓶頸或者分析調(diào)度算法的效果; 另一方面可以讓沒有安裝Nvidia硬件的計(jì)算機(jī)也可以運(yùn)行CUDA程序. 因此GPGPU-Sim提供了性能模擬和功能模擬兩個(gè)模式: 功能模擬僅輸出和真實(shí)硬件相同的運(yùn)行結(jié)果; 性能模擬則在輸出結(jié)果的同時(shí), 還輸出大量GPU內(nèi)部寄存器、緩存、通信網(wǎng)絡(luò)和功耗等信息.

        GPGPU-Sim開發(fā)小組在內(nèi)存中利用堆棧、隊(duì)列、數(shù)組等數(shù)據(jù)結(jié)構(gòu)模擬了GPU硬件中的流水線、緩存和寄存器等部件, 并利用CPU來模擬GPU中Kernel程序的數(shù)據(jù)流動(dòng)和指令執(zhí)行的過程. GPGPU-Sim編譯后會(huì)產(chǎn)生libcudart.so和libOpenCL.so兩個(gè)動(dòng)態(tài)鏈接庫(kù). 之后使用這兩個(gè)庫(kù)替代系統(tǒng)中的默認(rèn)庫(kù), 則應(yīng)該由GPU硬件來執(zhí)行的PTX指令會(huì)被攔截, 轉(zhuǎn)由CPU來模擬執(zhí)行[7]. Kernel程序的硬件執(zhí)行方式和軟件模擬調(diào)用關(guān)系如圖1所示.

        圖1 Kernel程序的硬件執(zhí)行方式和軟件模擬調(diào)用關(guān)系

        對(duì)于安裝有Nvidia硬件的平臺(tái), 在運(yùn)行時(shí)也可以選擇使用真實(shí)硬件運(yùn)行. 切換方式是修改名為L(zhǎng)D_LIBRARY_PATH的系統(tǒng)變量, 根據(jù)要求指向驅(qū)動(dòng)程序的動(dòng)態(tài)鏈接庫(kù), 或者GPGPU-Sim產(chǎn)生的動(dòng)態(tài)鏈接庫(kù).

        2 兼容性問題及解決方案

        研究者通過修改GPGPU-Sim的源代碼來實(shí)現(xiàn)新的資源調(diào)度算法、新的緩存置換策略和新的設(shè)計(jì)的過程中, 往往需要用gdb來追蹤、調(diào)試代碼. 這就要求虛擬機(jī)調(diào)用的動(dòng)態(tài)鏈接庫(kù)以源碼編譯的方式得到, 且調(diào)試時(shí)能訪問到源代碼.

        GPGPU-Sim的編譯過程已經(jīng)有大量的文獻(xiàn)可以借鑒, 在此不再贅述. 在Ubuntu 12.04之前的版本上, 經(jīng)過編譯與環(huán)境變量配置, 即可順利用模擬器來替代GPU硬件, 以實(shí)現(xiàn)CUDA程序的模擬.

        但是在Ubuntu 16.04版本以及之后的版本上, 按照傳統(tǒng)的方法安裝配置后, 啟動(dòng)基準(zhǔn)程序可能導(dǎo)致運(yùn)行錯(cuò)誤.

        此時(shí)可以使用gdb調(diào)試工具加載程序錯(cuò)誤產(chǎn)生的core文件, 并用bt命令查看調(diào)用堆棧, 會(huì)顯示大量同C++動(dòng)態(tài)鏈接庫(kù)相關(guān)的錯(cuò)誤報(bào)告信息.

        究其原因, 是因?yàn)镚PGPU-Sim基于GCC 4.X.X版本開發(fā), 而較新版本的Ubuntu系統(tǒng)使用了高版本的GCC和GC++編譯器(5.X.X), 不同版本的CC++的動(dòng)態(tài)運(yùn)行庫(kù)文件之間存在不兼容的問題, 從而導(dǎo)致了調(diào)用運(yùn)行庫(kù)出錯(cuò). 其核心問題是GPGPU-Sim要求CC++動(dòng)態(tài)鏈接庫(kù)版本不能超過6.0.14.

        解決該問題的常用辦法是通過編譯低版本GC++編譯器源碼, 或者用apt-get install命令通過參數(shù)指定低版本的方式來重裝GCC和GC++編譯器, 然后重新編譯GPGPU-Sim. 該方法的缺點(diǎn)是操作比較復(fù)雜和耗時(shí). 更重要的是, 將系統(tǒng)的GCC和GC++編譯器強(qiáng)制降低版本后, 可能給其他軟件的編譯和運(yùn)行帶來諸多問題.

        經(jīng)過反復(fù)比較和實(shí)驗(yàn), 筆者發(fā)現(xiàn)了一種便捷、不干擾其他程序運(yùn)行的解決辦法: 在運(yùn)行GPGPU-Sim前, 用低版本GC++的庫(kù)文件替代當(dāng)前系統(tǒng)的庫(kù)文件; 待運(yùn)行結(jié)束后, 再將庫(kù)文件替換回來. 替換操作無需反復(fù)復(fù)制和刪除文件, 可以通過靈活的鏈接命令來實(shí)現(xiàn).

        例如, 本文實(shí)驗(yàn)平臺(tái)中, 使用locate命令查找, 發(fā)現(xiàn)GPGPU-Sim需要的GC++動(dòng)態(tài)鏈接庫(kù)文件libstdcC++.so.6位于/usr/lib/x86_64-linux-gnu/目錄下, 該文件其實(shí)是一個(gè)鏈接文件, 指向同目錄下的庫(kù)文件libstdcC++.so.6.0.21. 替換操作步驟如下.

        (1)將老版本的動(dòng)態(tài)鏈接庫(kù)文件libstdcC++.so.6.0.14復(fù)制備份到庫(kù)目錄下, 該版本的鏈接庫(kù)文件可以從GPGPU-Sim官網(wǎng)提供的虛擬機(jī)中提取.

        (2)運(yùn)行GPGPU-Sim前, 先將系統(tǒng)默認(rèn)的鏈接文件libstdcC++.so.6刪除, 然后重建該鏈接文件并指向低版本的動(dòng)態(tài)鏈接庫(kù)文件libstdcC++.so.6.0.14. 可以使用下面命令:

        cd /usr/lib/x86_64-linux-gnu/

        rm libstdcC++.so.6

        ln -s libstdcC++.so.6.14 libstdcC++.so.6

        (3)此時(shí)可以順利運(yùn)行GPGPU-Sim, 采集和分析GPU模擬數(shù)據(jù).

        (4)運(yùn)行完成后, 需要把動(dòng)態(tài)庫(kù)修改回來, 否則可能造成其他程序運(yùn)行不正常甚至操作系統(tǒng)不正常. 可以使用下面命令:

        cd /usr/lib/x86_64-linux-gnu/

        rm libstdcC++.so.6

        ln-s libstdcC++.so.6.21 libstdcC++.so.6

        如果忘記了將鏈接指向高版本的動(dòng)態(tài)庫(kù), 并且進(jìn)行了關(guān)機(jī)或者重啟操作, 可能導(dǎo)致系統(tǒng)再次啟動(dòng)時(shí)發(fā)生異常, 并無法進(jìn)入圖形界面. 此時(shí)需要按下Ctrl+Alt+F1(F1到F6的文本模式均可, F7是正常啟動(dòng)的圖形界面)切換到文本模式終端, 然后執(zhí)行上面第(4)步的修改鏈接操作, 重新啟動(dòng)即可.

        筆者還建議將第(2)步和第(4)步的命令寫入shell腳本, 賦予執(zhí)行權(quán)限, 并將第(2)步腳本加入系統(tǒng)啟動(dòng)服務(wù), 在第(4)步加入系統(tǒng)關(guān)閉、重啟服務(wù), 讓這些操作自動(dòng)執(zhí)行, 以避免忘記. 待對(duì)GPGPU-Sim的研究完成后, 再移除這些腳本.

        3 動(dòng)態(tài)鏈接庫(kù)執(zhí)行方式

        通過對(duì)GPGPU-Sim編譯過程和運(yùn)行過程的分析, 發(fā)現(xiàn)編譯源代碼的目標(biāo)是獲得libcudart.so、libOpenCL.so兩個(gè)動(dòng)態(tài)鏈接庫(kù). 因此, 對(duì)于只需要運(yùn)行模擬器獲得輸出結(jié)果, 而無需在運(yùn)行期間追蹤模擬器代碼的應(yīng)用場(chǎng)景, 可以省略下載、編譯源碼這一步, 即直接將編譯好的動(dòng)態(tài)鏈接庫(kù)復(fù)制到本機(jī), 并經(jīng)過適當(dāng)?shù)沫h(huán)境配置(CUDA路徑、so動(dòng)態(tài)鏈接庫(kù)路徑和環(huán)境變量等)來運(yùn)行模擬器. 當(dāng)然, 模擬器運(yùn)行所需要的其他依賴庫(kù)也要提前安裝.

        具體步驟如下:

        (1)復(fù)制已經(jīng)編譯好的libcudart.so、libOpenCL.so庫(kù)文件目錄到本計(jì)算機(jī).

        (2)配置LD_LIBRARY_PATH環(huán)境變量, 指向復(fù)制來的動(dòng)態(tài)鏈接庫(kù)文件, 替代系統(tǒng)中原有的庫(kù)文件(在安裝GPU硬件和驅(qū)動(dòng)程序的情況下).

        (3)復(fù)制GPGPU-Sim配置文件: gpgpusim.config、gpuwattch_gtx480.xml、config_fermi_islip.icnt到CUDA程序同一目錄下. 該步驟建議使用鏈接文件完成, 避免冗余文件.

        (4)啟動(dòng)CUDA程序.

        該方法適合使用多臺(tái)計(jì)算機(jī)來并行模擬基準(zhǔn)測(cè)試程序的研究者, 可以有效避免在多臺(tái)計(jì)算機(jī)上傳輸代碼和編譯代碼的重復(fù)工作.

        4 并行執(zhí)行方式

        GPGPU-Sim利用軟件來模擬硬件執(zhí)行過程, 大約有10萬左右的減速因子, 每個(gè)benchmark過程需要執(zhí)行時(shí)間少則幾十分鐘, 多則幾天. 如果采用串行的方式來執(zhí)行幾十個(gè)benchmark, 則每輪測(cè)試會(huì)消耗數(shù)周時(shí)間, 這對(duì)使用者來說是非常高的時(shí)間成本. 目前無論服務(wù)器、臺(tái)式機(jī)還是筆記本電腦, 大都配備了多核處理器, 合理利用多核并行, 能大大加速測(cè)試過程. 并行執(zhí)行的關(guān)鍵是使用后臺(tái)執(zhí)行操作符nohup &, 并使用awk和grep工具將輸出數(shù)據(jù)中的重要數(shù)據(jù)篩選出來, 存入指定的文件中, 以備分析. 以最常使用的ISPASS-2009基準(zhǔn)程序集為例, 其腳本內(nèi)容如下: 讀取benlist文件中保存的需要運(yùn)行的基準(zhǔn)程序所在的文件夾名字, 然后進(jìn)入文件夾, 并用后臺(tái)方式執(zhí)行README.GPGPU-Sim腳本, 以創(chuàng)建一個(gè)執(zhí)行腳本時(shí)指定的名字的文件, 之后將輸出結(jié)果中關(guān)于L1緩存、GPU運(yùn)行周期數(shù)、Kernel名字的信息保存到該文件中. 其他的基準(zhǔn)程序集也可用該技術(shù)來并行執(zhí)行. 其主要代碼如下:

        #! /bin/bash

        if [ -z MYM1 ]

        then

        echo "input log file name."

        else

        curdir=′pwd′

        num=′wc -l benlist|awk ′{print MYM1}

        for (( benno=1; benno <= MYMnum ; bennoC++))

        do

        xxx=′sed -n "MYM{benno} p" benlist′

        echo "MYMbenno == MYM{xxx}"

        if [ -d MYM{xxx} ]

        then

        cd MYMxxx

        nohup ./README.GPGPU-Sim | egrep "g_fetch_access_L1I | gpu_sim_cycle| kernel_name">>MYM1 &

        end=MYM(date +%s)

        cd MYMcurdir

        else

        echo -e "MYM{benno} MYM{xxx} not run."

        fi

        done

        fi

        待模擬運(yùn)行完成后, 可以編寫腳本, 將不同benchmark的多個(gè)指標(biāo)提取出來, 以表格的方式顯示, 方便對(duì)比. 其主要代碼如下:

        #! /bin/bash

        fsource1=MYM1

        outfile=MYMfsource1.get

        echo -e "name pre_mem tot_cycle tot_insn" >>MYMoutfile

        num=′wc -l benlist|awk′{print MYM1}

        for (( i=1; i <= MYMnum ; iC++))

        do

        xxx=′sed -n "MYM{i} p" benlist′

        if [ -d MYM{xxx} ]

        then

        tail -n 19 MYM{xxx}/MYMfsource1 |grep "gpu_tot_sim_cycle" |awk ′{printf("%d ", MYM6) }′ >>MYMoutfile

        tail -n 19 MYM{xxx}/MYMfsource1 |grep "gpu_tot_sim_insn" |awk ′{printf("%d ", MYM6) }′ >>MYMoutfile

        tail -n 19 MYM{xxx}/MYMfsource1 lgrep "gpu_tot_ipc" |awk ′{printf("%f ", MYM6) }′ >>MYMoutfile

        fi

        done

        研究者有時(shí)需要研究不同參數(shù)配置下的性能指標(biāo), 需要進(jìn)行多輪的修改配置文件、運(yùn)行benchmark過程. 此時(shí)需要提前修改好多個(gè)配置文件, 以不同名字命名, 然后在每輪測(cè)試開始前將鏈接指向不同的配置文件, 并利用sleep命令等待最長(zhǎng)的benchamark完成. 這樣可以自動(dòng)化完成多種配置下整個(gè)基準(zhǔn)程序集的模擬. 其主要代碼如下:

        run_dir=/home/sim/ispass2009-benchmarks #指向基準(zhǔn)程序所在目錄

        config_dir=/home/sim/configs/GTX480 #指向GPUSim配置文件所在目錄

        for n in 4 8 16

        do

        cd MYMconfig_dir

        rm gpgpusim.config

        ln -s gpgpusim.config.ori.MYM{n}kL1I gpgpusim.config #指向不同配置文件

        cd MYMrun_dir

        ./runall.sh out_MYM{n}kL1I_lrr.txt#調(diào)用腳本后臺(tái)運(yùn)行全部測(cè)試程序

        sleep 2h # 等待本輪全部測(cè)試完成

        done

        5 中間文件和log文件分析

        GPGPU-Sim運(yùn)行過程中會(huì)先使用CUDA SDK的cuobjdump工具來分析CUDA程序, 從中提取出GPU Kernel的PTX和SASS代碼, 并寫入中間文件, 然后讀取這些指令進(jìn)行模擬. 在默認(rèn)配置下, 這些文件會(huì)保留下來. 研究這些中間文件的內(nèi)容, 對(duì)理解GPGPU-Sim的工作原理, 以及程序的運(yùn)行狀況有很大幫助. 例如, Liang等[8]基于PTX指令集的load.global指令展開研究, 設(shè)計(jì)了緩存Bypass編譯器框架. Cao等[9]利用PTX指令文件分析了CUDA程序中Kernel容量的分布情況, 并設(shè)計(jì)了指令緩存預(yù)取機(jī)制.

        log文件中記錄了GPU各部件的功耗狀況, 可用于GPU功耗研究. 中間文件和log文件含義如表1所示.

        表1 中間文件和log文件含義

        6 結(jié)語

        本文分析了在高版本Ubuntu系統(tǒng)上運(yùn)行GPGPU-Sim、調(diào)用動(dòng)態(tài)庫(kù)時(shí)發(fā)生的兼容性問題, 并提出了解決方案, 之后介紹了一種無需編譯源代碼即可運(yùn)行GPGPU-Sim的簡(jiǎn)單方法. 以ISPASS-2009為例, 給出了可以自動(dòng)運(yùn)行測(cè)試、采集結(jié)果的腳本參考文件. 該方法可以極大提高工作效率.

        猜你喜歡
        程序
        給Windows添加程序快速切換欄
        電腦愛好者(2020年6期)2020-05-26 09:27:33
        試論我國(guó)未決羈押程序的立法完善
        失能的信仰——走向衰亡的民事訴訟程序
        “程序猿”的生活什么樣
        英國(guó)與歐盟正式啟動(dòng)“離婚”程序程序
        基于VMM的程序行為異常檢測(cè)
        偵查實(shí)驗(yàn)批準(zhǔn)程序初探
        我國(guó)刑事速裁程序的構(gòu)建
        創(chuàng)衛(wèi)暗訪程序有待改進(jìn)
        恐怖犯罪刑事訴訟程序的完善
        青青草在线免费观看视频 | 久久6国产| 99久久久精品国产性黑人| 丰满老熟女性生活视频| 色综合久久久无码中文字幕| 色综合中文综合网| 国产精品激情综合久久| 蜜桃在线视频一区二区| 天天做天天摸天天爽天天爱| 亚洲乱码国产一区三区| 亚洲嫩草影院久久精品| 射进去av一区二区三区| 久久偷看各类wc女厕嘘嘘偷窃| 99久久国产露脸精品竹菊传媒| 中文字幕亚洲无线码a| 国产人妖伦理视频在线观看| 97se狠狠狠狠狼鲁亚洲综合色| 国产免费一区二区三区在线观看| 亚洲乱码一区AV春药高潮| 日本视频一区二区三区观看| 丰满少妇高潮惨叫久久久一| 国产精品密播放国产免费看| 激情一区二区三区视频| 久久综网色亚洲美女亚洲av| 免费观看又色又爽又黄的| 97福利视频| 亚洲av资源网站手机在线| 又湿又紧又大又爽a视频国产| 久久精品亚洲乱码伦伦中文| 蜜桃视频色版在线观看| 中文字幕精品一区二区三区| 高潮迭起av乳颜射后入| 亚洲精品理论电影在线观看| 亚洲精品一区二在线观看 | 国产国拍精品av在线观看按摩| 久久国产精品视频影院| 国产精品高清视亚洲一区二区| 国产两女互慰高潮视频在线观看| 亚洲依依成人综合在线网址| 亚洲中文字幕诱惑第一页| 国产国产精品人在线视|