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卡分配程序设计实例分析的更多相关文章

  1. Android开发之获取手机SIM卡信息

    TelephonyManager是一个管理手机通话状态.电话网络信息的服务类.该类提供了大量的getXxx(),方法获取电话网络的相关信息. TelephonyManager类概述: 可用于訪问有关设 ...

  2. SIM卡中UCS2编码的三种格式(80,81,82)分析

    网上看到一篇比较好的说ucs2编码的文章,保存一下,原文地址: http://hi.baidu.com/youren4548/blog/item/fa08bd1bf61005058618bf1d.ht ...

  3. (转)实例分析:MySQL优化经验

    [IT专家网独家]同时在线访问量继续增大,对于1G内存的服务器明显感觉到吃力,严重时甚至每天都会死机,或者时不时的服务器卡一下,这个问题曾经困扰了我半个多月.MySQL使用是很具伸缩性的算法,因此你通 ...

  4. 部分SIM卡被曝存安全漏洞:7.5亿部手机受牵连

    7月22日消息,据国外媒体报道,一安全研究人员发现部分移动SIM卡所使用的加密方式存在一个安全漏洞,可能会导致手机被黑客远程控制. DES数据加密标准的SIM卡——DES是一种较旧的标准,目前正被部分 ...

  5. SIM卡

    SIM卡是(Subscriber Identity Module 客户识别模块)的缩写 也称为用户身份识别卡.智能卡,GSM数字移动电话机必须装上此卡方能使用.在电脑芯片上存储了数字移动电话客户的信息 ...

  6. 【工具类】获取手机sim卡的运营商

    加入权限:<uses-permission android:name="android.permission.READ_PHONE_STATE" /> package ...

  7. android 读取用户号码,手机串号,SIM卡序列号

    简介: IMSI:international mobiles subscriber identity国际移动用户号码标识,这个一般大家是不知道,GSM必须写在卡内相关文件中:MSISDN:mobile ...

  8. 【双模卡的相关知识】解SIM卡前需要知道的信息(SIM年分和厂商识别)

    <ignore_js_op> 二.SIM版本问题SIM卡的版本有两种说法,一是有些是制造厂制定的,二是电信公司的制定.下面以移动为例,目前我们手里的SIM有几种版本:v0.v1.v2.v3 ...

  9. 手机SIM卡知识大科普

    SIM卡 SIM卡是(Subscriber Identity Module 客户识别模块)的缩写,也称为智能卡.用户身份识别卡,GSM数字移动电话机必须装上此卡方能使用.它在一电脑芯片上存储了数字移动 ...

随机推荐

  1. hdu3594 强连通 tarjan

    题意: 判断是不是强连通图 ,同时每一条边必须只能在一个环里 思路:之前我的强连通用的全是双深搜,结果题目的第二个要求很难判断,一开始写了三个深搜加上并查集,结果越写越乱,其实就是在判断一个边是否只在 ...

  2. 查找和定位Android应用的按钮点击事件的代码位置基于Xposed Hook实现

    本文博客地址:https://blog.csdn.net/QQ1084283172/article/details/80956455 在进行Android程序的逆向分析的时候,经常需要通过Androi ...

  3. SQL Server 数据库基本使用技巧

    use master; #显示数据库 select top 3 * from spt_values; #显示去前3行 select * from test where id2 like '%1010% ...

  4. C++ STL 思维导图,脑图,树形图。

    https://blog.csdn.net/weixin_41743247/article/details/90635931

  5. nodejs-模块系统

    Node.js模块系统 为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统. 模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的.换言之,一个 Node. ...

  6. 神经网络与机器学习 笔记—LMS(最小均方算法)和学习率退火

    神经网络与机器学习 笔记-LMS(最小均方算法)和学习率退火 LMS算法和Rosenblatt感知器算法非常想,唯独就是去掉了神经元的压制函数,Rosenblatt用的Sgn压制函数,LMS不需要压制 ...

  7. 通过 Netty、ZooKeeper 手撸一个 RPC 服务

    说明 项目链接 微服务框架都包括什么? 如何实现 RPC 远程调用? 开源 RPC 框架 限定语言 跨语言 RPC 框架 本地 Docker 搭建 ZooKeeper 下载镜像 启动容器 查看容器日志 ...

  8. 找大于等于一个数的最小的2^n

    最近看hashmap源码时,发现给定初始capacity计算threshold的过程很巧妙. 1 static final int tableSizeFor(int cap) { 2 int n = ...

  9. Educational Codeforces Round 92 (Rated for Div. 2)

    A.LCM Problem 题意:最小公倍数LCM(x,y),处于[l,r]之间,并且x,y也处于[l,r]之间,给出l,r找出x,y; 思路:里面最小的最小公倍数就是基于l左端点的,而那个最小公倍数 ...

  10. Java_抽象

    抽象的基本使用 抽象的关键字是abstract,可以用来修饰类(抽象类),还可以修饰方法(抽象方法). 1 //抽象类 2 public abstract class Animal{ 3 //抽象方法 ...