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节中的说明测试合并的版本。
gpgpu-sim卡分配程序设计实例分析的更多相关文章
- Android开发之获取手机SIM卡信息
TelephonyManager是一个管理手机通话状态.电话网络信息的服务类.该类提供了大量的getXxx(),方法获取电话网络的相关信息. TelephonyManager类概述: 可用于訪问有关设 ...
- SIM卡中UCS2编码的三种格式(80,81,82)分析
网上看到一篇比较好的说ucs2编码的文章,保存一下,原文地址: http://hi.baidu.com/youren4548/blog/item/fa08bd1bf61005058618bf1d.ht ...
- (转)实例分析:MySQL优化经验
[IT专家网独家]同时在线访问量继续增大,对于1G内存的服务器明显感觉到吃力,严重时甚至每天都会死机,或者时不时的服务器卡一下,这个问题曾经困扰了我半个多月.MySQL使用是很具伸缩性的算法,因此你通 ...
- 部分SIM卡被曝存安全漏洞:7.5亿部手机受牵连
7月22日消息,据国外媒体报道,一安全研究人员发现部分移动SIM卡所使用的加密方式存在一个安全漏洞,可能会导致手机被黑客远程控制. DES数据加密标准的SIM卡——DES是一种较旧的标准,目前正被部分 ...
- SIM卡
SIM卡是(Subscriber Identity Module 客户识别模块)的缩写 也称为用户身份识别卡.智能卡,GSM数字移动电话机必须装上此卡方能使用.在电脑芯片上存储了数字移动电话客户的信息 ...
- 【工具类】获取手机sim卡的运营商
加入权限:<uses-permission android:name="android.permission.READ_PHONE_STATE" /> package ...
- android 读取用户号码,手机串号,SIM卡序列号
简介: IMSI:international mobiles subscriber identity国际移动用户号码标识,这个一般大家是不知道,GSM必须写在卡内相关文件中:MSISDN:mobile ...
- 【双模卡的相关知识】解SIM卡前需要知道的信息(SIM年分和厂商识别)
<ignore_js_op> 二.SIM版本问题SIM卡的版本有两种说法,一是有些是制造厂制定的,二是电信公司的制定.下面以移动为例,目前我们手里的SIM有几种版本:v0.v1.v2.v3 ...
- 手机SIM卡知识大科普
SIM卡 SIM卡是(Subscriber Identity Module 客户识别模块)的缩写,也称为智能卡.用户身份识别卡,GSM数字移动电话机必须装上此卡方能使用.它在一电脑芯片上存储了数字移动 ...
随机推荐
- JAVA WEB应用目录
目录 Tomcat目录 MyEclipse目录 部署启动应用 Tomcat目录 首先,官方下载 tomcat 安装包,解压.得到下面的目录 bin 目录是tomcat启动和关闭目录.startup.b ...
- 神经网络与机器学习 笔记—Rosenblatt感知机
Rosenblatt感知机器 感知器在神经网络发展的历史上占据着特殊位置:它是第一个从算法上完整描述的神经网络.它的发明者Rosenblatt是一位心里学家,在20世纪60年代和70年代,感知器的启发 ...
- Day007 递归
递归 定义 A方法调A方法!就是自己调自己 作用 利用递归可以用简单的程序来解决一些复杂的问题.它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程 ...
- jupyter中那些神奇的第三方拓展魔术命令
1 简介 无论是jupyter notebook还是jupyter lab,都可以使用ipython中的众多自带魔术命令来实现丰富的辅助功能,诸如%time之类的. 这些都已经是老生常谈的知识没什么好 ...
- 使用jenkins一键打包发布vue项目
jenkins的安装 Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建.测试和部署软件. Jenkins 支持各种运行方式,可通过系统包.Docker 或者通过一个独立 ...
- Yii2访问gii模块403
出现问题 访问Yii2的gii模块没有权限,403 找到原因 在Yii2-gii源码文件中(vendor/yiisoft/yii2-gii/src/Module.php)可以看到有一个配置项$allo ...
- python三元(三目)运算
传统的if,else写法 三元运算 name="alex" if 1==1 else "SB"
- window下批量删除指定后缀文件
例子: 批量删除当前路径下后缀为 .jpg和 .json del /a /f /s /q "*.jpg" "*.json" *为通配符/a /f 是强制删除所有 ...
- SQL必学必会笔记 —— 基础篇
基础篇 SQL语言按照功能划分 DDL(DataDefinitionLanguage),也就是数据定义语言,它用来定义我们的数据库对象,包括 数据库.数据表和列.通过使用DDL,可以创建,删除和修改数 ...
- 用户对象/GDI对象/内核对象
对象的分类 Windows的对象可以分为三种,分别是用户对象,GDI对象和内核对象.系统使用用户对象支持窗口管理,使用GDI对象支持图形,并使用内核对象支持内存管理,进程执行和进程间通信(IPC) . ...