gpgpu-sim卡分配程序設計實例分析

gpgpu-sim卡分配程序設計實例分析

運行代碼地址:https://github.com/gpgpu-sim/gpgpu-sim_distribution

一.概述

此文件包含有關安裝、生成和運行GPGPU Sim卡的說明。

有關GPGPU Sim卡型號、配置方法和源代碼指南的詳細文檔,請參閱:<http://gpgpu-sim.org/ manual/>.

下面是構建doxygen源代碼文檔的說明。

有關gpuwatch的詳細文檔(包括如何配置)和源代碼指南,請參閱:http://gpgpu-sim.org/gpuwatch/.

二. GPGPU Sim卡貢獻與歷史

GPGPU Sim是由不列顛哥倫比亞大學的Tor
Aamodt研究小組創建的。許多人直接參與了GPGPU Sim的開發,包括:Tor Aamodt、Wilson W.L.Fung、Ali Bakhoda、George Yuan、Ivan Sham、Henry Wong、Henry Tran、Andrew Turner、Aaron Ariel、Inderpret Singh、Tim Rogers、Jimmy Kwa、Andrew Boktor、Ayub Gubran Tayler Hetherington等。

GPGPU-Sim模擬了與非圖形應用程序相關的現代圖形處理器的功能。GPGPU-Sim的第一個版本在MICRO’07紙張中使用,隨後ACM-TACO紙張用於動態翹曲成形。該版本的GPGPU Sim使用SimpleScalar PISA指令集進行功能模擬,並使用各種配置文件指示哪些循環應作爲GPU上的內核生成,以及IMT執行爲CUDA提供一個simlar編程模型OpenCL.創建原始GPGPU-Sim仿真環境的基準測試是一個非常耗時的過程,一些人質疑GPU上CPU代碼生成的有效性。

這些問題促使開發一個直接運行CUDA應用程序的接口,以利用正在開發的越來越多的應用程序使用CUDA。隨後添加了對OpenCL的支持,並刪除了所有SimpleScalar代碼。
互連網絡是用斯坦福大學比爾·達利研究小組開發的booksim仿真環境模擬的。

生成與GPU上運行同一個CUDA程序的輸出相匹配的輸出,使用CUDA數學庫實現了幾個PTX指令(CUDA工具包的一部分)。與CUDA數學接口的代碼庫包含在cuda math.h中,還包括vector_types.h(CUDA頭文件之一)派生的幾個結構文件。

GPUwatch能量模型

GPUWattch(在gpu Sim 3.2.0中引入)是由不列顛哥倫比亞大學、德克薩斯大學奧斯汀分校和威斯康星大學麥迪遜分校的研究人員開發的。GPUwatch的貢獻者包括Tor Aamodt在不列顛哥倫比亞大學的研究小組:Tayler Hetherington和Ahmed Eltanawy;Vijay Reddi在德克薩斯大學奧斯汀分校的研究小組:Jingwen Leng;以及Nam Sung Kim在威斯康星大學麥迪遜分校的研究小組:Syed Gilani。

gpuwatch利用了在聖母大學、惠普實驗室、首爾國立大學和加州大學聖地亞哥分校的Sheng Li等人開發的McPAT。

論文鏈接地址:http://www.hpl.hp.com/research/mcpat/micro09.pdf。

三.安裝、構建和運行GPGPU Sim

假設系統上安裝了GPGPU Sim所需的所有依賴項,要構建GPGPU Sim,只需將以下行添加到~/.bashrc文件中(假設CUDA工具包安裝在/usr/local/CUDA中):

export CUDA_INSTALL_PATH=/usr/local/cuda

然後鍵入

bash

source setup_environment

make

如果上述操作失敗,請參閱下面的“步驟1”和“步驟2”。

如果上述方法有效,請參閱下面的“步驟3”,其中解釋瞭如何運行CUDA GPGPU Sim上的基準測試。

步驟1:依賴項

GPGPU-Sim是在SUSE-Linux上開發的(此版本在SUSE版本11.3中進行了測試),並已在其他幾個Linux平臺(32位和64位系統)上使用。原則上,只要滿足以下軟件依賴性,GPGPU Sim就應該與任何linux發行版一起工作。

下載並安裝CUDA工具包。建議將3.1版用於普通PTX模擬,將4.0版用於cuobjdump支持和/或使用PTXPlus(硬件指令集支持)。請注意,可以在單個系統上安裝多個版本的CUDA工具包——只需將安裝在不同的目錄中,然後將CUDA U install U PATH環境變量設置爲指向要使用的版本。

[可選項]

如果想在仿真環境上運行OpenCL,請從下載並安裝NVIDIA的OpenCL驅動程序http://developer.nvidia.com/opencl.

按照NVIDIA安裝腳本的指示更新路徑和LD_LIBRARY_PATH。注意,如果使用64位計算機,則需要使用lib64目錄。已經使用NVIDIA驅動程序版本256.40在GPGPU Sim上測試了OpenCL
http://developer.download.nvidia.com/compute/cuda/3_1/drivers/devdriver_3.1_linux_64_256.40.run

此版本的GPGPU Sim卡已更新,以支持更新版本的NVIDIA驅動程序(在版本295.20上測試)。

GPGPU-Sim dependencies:

  • gcc

  • g++

  • make

  • makedepend

  • xutils

  • bison

  • flex

  • zlib

  • CUDA Toolkit

GPGPU-Sim documentation dependencies:

  • doxygen

  • graphvi

AerialVision dependencies:

  • python-pmw

  • python-ply

  • python-numpy

  • libpng12-dev

  • python-matplotlib

使用gcc/g++版本4.5.1、bison版本2.4.1和flex版本2.5.35。

如果使用的是Ubuntu,除了CUDA工具包之外的依賴項,以下命令將安裝所有必需的。

GPGPU-Sim dependencies:

“sudo apt-get install build-essential xutils-dev bison zlib1g-dev flex libglu1-mesa-dev”

GPGPU-Sim documentation dependencies:

“sudo apt-get install doxygen graphviz”

AerialVision dependencies:

“sudo apt-get install python-pmw python-ply python-numpy libpng12-dev python-matplotlib”

CUDA SDK dependencies:

“sudo apt-get
install libxi-dev libxmu-dev libglut3-dev”

最後,確保CUDA_INSTALL_PATH設置爲安裝CUDA工具包的位置(例如/usr/local/CUDA),並且$CUDA_INSTALL_PATH/bin位於的路徑中。可能需要修改.bashrc文件以包含以下內容(這假定CUDA工具包安裝在/usr/local/CUDA中):

export CUDA_INSTALL_PATH=/usr/local/cuda

export PATH=PATH:PATH:CUDA_INSTALL_PATH/bin

步驟2:構建 (Step 2: Build)

要構建仿真環境,首先需要構建配置。從仿真環境的根目錄中,在bash shell中鍵入以下命令(可以通過運行命令“echo$shell”來檢查是否正在使用bashshell,該命令應打印“/bin/bash”):

source setup_environment <build_type>

將<build_type>替換爲debug或release。如果需要更快的模擬,請使用release;如果需要在gdb中運行模擬器,請使用debug。如果未指定任何內容,則默認情況下將使用release。
現在已經準備好構建仿真環境了,只要運行

make

make完成後,模擬器就可以使用了。要清理make,請運行

make clean

要生成doxygen生成的文檔,請運行

make docs

清理文檔,運行

make cleandocs

文檔位於doc/doxygen/html。

步驟3:運行(Step 3: Run)

將configs/QuadroFX5800/或configs/GTX480/的內容複製到應用程序的工作目錄。這些文件將微體系結構模型配置爲類似於各自的GPGPU體系結構。

要使用ptxplus(本機ISA),請將配置文件中的以下選項更改爲“1”(注意:需要CUDA版本4.0),如下所示:

-gpgpu_ptx_use_cuobjdump 1

-gpgpu_ptx_convert_to_ptxplus 1

現在要在仿真環境上運行CUDA應用程序,只需執行

source setup_environment <build_type>

使用與生成模擬器時使用的相同的<build_type>。然後像在硬件上運行一樣啓動可執行文件。通過運行“source setup_environment<build_type>”,可以將LD_LIBRARY_路徑更改爲指向GPGPU
Sim而不是CUDA或OpenCL runtime,這樣就不需要重新編譯應用程序,只需在GPGPU Sim上運行。

要恢復到在硬件上運行,請從LD_LIBRARY_PATH環境變量中刪除GPGPU Sim。
以下GPGPU Sim配置選項用於啓用GPUwatch

  • power_simulation_enabled 1 (1=Enabled, 0=Not enabled)

  • gpuwattch_xml_file .xml

使用與生成模擬器時使用的相同的<build_type>。然後像在硬件上運行一樣啓動可執行文件。通過運行“source etup_environment<build_type>”,可以將LD_LIBRARY_路徑更改爲指向GPGPU Sim而不是CUDA或OpenCL runtime,這樣就不需要重新編譯應用程序,只需在GPGPU Sim上運行。
gpuwatch XML配置文件名設置爲gpuwatch.xml文件默認情況下,當前僅爲GTX480提供(默認值爲gpuwatch_GTX480.xml)。
請參考http://gpgpu-sim.org/gpuwatch/更多信息。
運行OpenCL應用程序與運行CUDA應用程序是相同的。但是,爲了在運行時構建OpenCL,OpenCL應用程序需要與NVIDIA驅動程序通信。GPGPU Sim支持將此編譯卸載到遠程計算機。可以使用環境變量OPENCL_REMOTE_GPU_HOST指定此計算機的主機名。這個變量也應該通過setup_環境腳本設置。如果要卸載到遠程計算機,可能需要設置該計算機的無密碼ssh登錄,以避免每次執行OpenCL應用程序時都重新鍵入密碼。

如果需要在NVIDIA CUDA SDK代碼示例中運行應用程序集,則需要下載、安裝和構建SDK。
上面提到的ispass2009論文中的CUDA應用程序在github上根據repo is pass 2009基準分別發佈。

這個自述文件.ISPASS-2009年與基準一起發佈的文件現在包含了在GPGPU Sim v3.x上運行基準的更新說明。

以下GPGPU Sim配置選項用於啓用GPUwatch

四.(可選)更新GPGPU Sim卡(僅限高級用戶)

如果已經對模擬器進行了修改,並且希望合併後續版本中的新功能/錯誤修復,以下說明可能會有所幫助。只是作爲一個起點,只推薦給那些有修改和調試GPGPU-Sim經驗的用戶使用源代碼管理。

警告:在執行以下步驟之前,請備份對GPGPU Sim卡的修改。

以下過程可能會導致丟失所有更改。一般來說,合併代碼更改可能需要手動干預,甚至在合併自動進行的情況下,也可能會引入錯誤。

如果進行了許多編輯,合併過程可能是一個痛苦的手動過程。因此,如果需要重新開始,幾乎肯定希望在執行以下過程之前擁有代碼的副本。在出現任何複雜情況時,除了這些說明之外,還需要參考git的文檔。

STOP. BACK UP YOUR CHANGES BEFORE PROCEEDING. YOU HAVE BEEN WARNED. TWICE.

要更新GPGPU Sim卡,需要在系統上安裝git。下面假設運行以下命令以獲取GPGPU Sim的源代碼:

git clone git://dev.ece.ubc.ca/gpgpu-sim

自運行上述命令以來,已進行了本地更改,已將更改發佈到上述git服務器上的GPGPU Sim。已經查看了所做的更改,查看了新的更改文件,甚至可能查看了源代碼差異。決定要將的更改合併到修改後的GPGPU Sim版本中。

在更新源代碼之前,建議刪除任何對象文件:

make clean

Then, run the following command in the root directory of
GPGPU-Sim:

git pull

當git正在提取最新的更改時,可能會由於所做的更改與最新的更新衝突而產生衝突。在這種情況下,需要手動解決這些衝突。可以使用喜愛的文本編輯器直接編輯衝突文件,也可以使用以下命令打開圖形合併工具進行合併:

git mergetool

3.1測試更新版的GPGPU Sim卡

現在應該測試合併的版本是否“有效”。這意味着遵循在new自述文件(而不是此版本)中構建GPGPU Sim的步驟,因爲可能已更改。假設代碼編譯時沒有錯誤/警告,下一步是執行一些迴歸測試。在UBC,有一組廣泛的迴歸測試,當進行變化。

在未來,可能會公開進行這組迴歸測試可用。現在,需要編譯合併後的代碼並重新運行關心的所有應用程序(這意味着這些應用程序在進行合併之前已經爲工作)。在進行進一步的更改以識別由於代碼合併過程而發生的任何編譯時或運行時錯誤之前,需要執行此操作。

3.2(可選)更新Intersim2(僅限高級用戶)

Booksim 2.0由斯坦福大學的並行VLSI架構小組維護

(https://nocs.stanford.edu/cgi-bin/trac.cgi/wiki/Resources/BookSim).

Intersim2是帶有擴展名的Booksim 2.0。Booksim 2.0仍在積極開發中,更新通常會帶來最新的特性和錯誤修復。

如果想要這些新功能或錯誤修復,可以從Booksim 2.0服務器中提取更新並將更新應用到Intersim2。可以按照下面的說明使用新的Booksim 2.0更新Intersim2。

如上所述,應該在繼續之前備份更改。

Booksim 2.0使用svn源代碼管理。首先,轉到終端中的Intersim2根目錄($gpusim_root/src/Intersim2)。然後,在終端中運行以下命令:

svn update

當svn使用Booksim 2.0 svn服務器的最新更改更新Intersim2的本地副本時,可能會由於使用最新更新所做的更改而產生衝突。在這種情況下,svn將提示使用默認文本編輯器編輯衝突文件,或者可以推遲編輯,然後使用喜愛的合併工具來解決衝突文件。
更新Intersim2之後,應該按照第3.1節中的說明測試合併的版本。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章