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:$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 <filename>.xml
使用与生成模拟器时使用的相同的<build_type>。然后像在硬件上运行一样启动可执行文件。通过运行“source setup_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 ispass2009基准分别发布。
这个自述文件.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节中的说明测试合并的版本。