本文来自魏继增科学网博客:链接地址:http://blog.sciencenet.cn/blog-1067211-726653.html

3.1 Simulation Modes

默认情况下,大多数的使用者使用GPGPU-Sim 3.x评估GPU运行一个应用所需要的时钟周期数。这就是性能仿真模型。当尝试在GPGPU-Sim上运行一个新的应用,则有可能该应用的运行结果不正确,即可能产生错误的数据。为了帮助调试应用,GPGPU-Sim 3.x还支持快速的功能仿真。GPGPU-Sim 3.x还支持在NVIDIA GPU上执行本地硬件ISA,通过一种扩展的PTX语法,称为PTXPlus。下面各小节将依次介绍这些特征。

3.1.1 Performance Simulation

性能仿真是仿真器默认的仿真模式,它能够收集各种性能参数,但仿真速度较慢。GPGPU-Sim仿真在Microarchitecture Model一节中描述的微架构。

为了选择性能仿真模式,在gpgpusim.config文件中添加如下所示的语句:

-gpgpu_ptx_sim_mode 0

关于仿真的输出的更多信息参见“understanding simulationoutput”小节。

3.1.2Pure Functional Simulation

纯功能仿真比性能仿真的仿真速度更快,但是它仅能够执行CUDA/OpenCL程序,不能够收集任何性能统计信息。

为了选择纯功能仿真模式,在gpgpusim.config文件中添加如下所示的语句:

-gpgpu_ptx_sim_mode1

作为另一种选择,你可以设置环境变量PTX_SIM_MODE_FUNC为“1”。然后就可以利用性能仿真模式执行程序了。

仅仅仿真一个GPU设备的功能,GPGPU-Sim纯功能仿真模式执行CUDA/OpenCL程序就好像他们运行在一个真实的GPU设备上,所以在这种模式里不会收集任何性能统计信息,仅仅一个GPU程序的常规输出被显示。纯功能仿真模式比性能仿真快很多(大约快5~10倍)。

这个模式非常有用,假如你想快速的验证你的代码在GPGPU-Sim上是否工作正确,或者假如你想在没有真正的GPU计算设备的情况下增加CUDA/OpenCL的编程经验。纯功能仿真和性能仿真一样,对于PTXPlus支持同样版本的CUDA(CUDA v3.1和V2.3)。纯功能仿真以warp为单位执行程序,每个Cooperative Thread Array(CTA)中的warp执行直到所有都执行完毕或者等待在一个barrier处,对于后一种情况,一旦所有的warp等待在barrier,他们被清理并跨越barrier继续执行。

3.1.3Interactive Debugger Mode

交互式调试模式提供一个类似GDB的接口对GPGPU-Sim中的功能行为进行调试。然后,当前它只能工作在性能仿真模式下。

为了使用交互调试模式,设置环境变量GPGPUSIM_DEBUG为“1”。其所支持的命令如下所示:

Command

Description

dp  <id>

显示流水线:显示编号为<id>的SIMT核心的流水线中的内容

q

退出

b  <file>:<line> <thread uid>

对于线程id为<uid>的线程,在<file>:<line>处设置断点

d  <uid>

删除断点

s

对于所有的核心单步执行到下一个core cycle

c

采用非单步方式继续执行下去

w  <address>

在地址<address>设置监测点(watchpoint)

l

在当前断点列出PTX指令

h

显示帮助信息

调试功能的实现在文件debug.h和debug.cc中。

3.1.4Cuobjdump Support

在当前的GPGPU-Sim 3.1.0版本中,对于cuobjdump的使用支持被添加。Cuobjdump是一个由NVIDIA提供的软件,它能够从二进制文件中抽取SASS和PTX信息。GPGPU-Sim支持使用cuobjdump抽取它运行SASS或PTX所需要的信息,以替代从cubin文件中获取这些信息。使用cuobjdump仅支持CUDA 4.0。Cuobjdump默认是打开的,假如仿真器是在CUDA 4.0下被编译的。为了打开/关闭cuobjdump,可以在你的配置文件中添加如下配置信息:

# disable cuobjdump

-gpgpu_ptx_use_cuobjdump 0

# enable cuobjdump

-gpgpu_ptx_use_cuobjdump 1

3.1.5PTX vs. PTXPlus

默认情况下,GPGPU-Sim 3.x仿真PTX指令。然而,当在一个实际的GPU上执行时,PTX被重新编译为本地的GPU ISA(SASS)。这个重编译并不能用正常的PTX指令进行解释。为了解决这个问题,我们创建了PTXPlus。PTXPlus是GPGPU-Sim 3.x引入的一种PTX扩展模式,它从GT200 SASS指令到PTXPlus指令的1对1映射。它引入了在PTX中不存在的新指令和寻址模式。当转化到PTXPlus设置被激活,构成程序的SASS指令被转化为PTXPlus指令,然后可在GPGPU-Sim上进行仿真。使用PTXPlus转化设置可以得到更加精确仿真结果。然而,到PTXPlus的转化并不支持所有可以通过PTX进行仿真的程序。当前,仅高于4.0的CUDA Toolkit支持到PTXPlus的转化。

为了从可执行文件转化为SASS,GPGPU-Sim cuobjdump,一个NVIDIA CUDA toolkit提供的软件可以从CUDA可执行文件中抽取PTX,SASS和其他的信息。GPGPU-Sim 3.x包含一个单机程序,叫做cuobjdump_to_ptxplus,被调用将cuobjdump的输出转化为GPGPU-Sim可以仿真的PTXPlus。cuobjdump_to_ptxplus是一个C++程序。一个关于PTXPlus转化过程的详细描述请参见“PTXPlus Conversion”一节。当前,cuobjdump_to_ptxplus支持SASS的转化对于sm版本<sm_20。

为了打开PTXPlus仿真,在gpgpusim.config文件中添加如下所示的语句:

-gpgpu_ptx_convert_to_ptxplus 1

被转化的PTXPlus可以保存在名为“"_#NaNxplus”的文件中,在gpgpusim.config文件中添加如下所示的语句:

-gpgpu_ptx_save_converted_ptxplus 1

如果想关掉任何一个中设置,可以删除相应的行或将值从“1”改为“0”。更多关于PTXPlus的细节可以参照“PTXPlus support”一节。如果上述的设置都是打开的,GPGPU-Sim试图将SASS代码转化为PTXPlus,然后运行PTXPlus。然而,如上所述,并不是所有的程序都支持这种模式。

3.3Configuration Options

配置参数被传入GPGPU-Sim通过gpgpusim.config和一个互连网络配置文件(通过在gpgpusim.config中设置-inter_config_file)。GPGPU-Sim 3.0.2中的configs文件夹内包含了NVIDIA GT200(configs/QuadroFX5800/)和Fermi架构(configs/Fermi/)的配置文件。

所有的配置参数如下列表所示:

Simulation Run Configuration

Option

Description

-gpgpu_max_cycle <# cycles>

经过了<# cycles>个cycle后,终止GPGPU-Sim仿真(0=no limit)

-gpgpu_max_insn <# insns>

经过了<# insns>个指令后,终止GPGPU-Sim仿真(0=no limit)

-gpgpu_ptx_sim_mode  <0=performance (default), 1=functional>

选择性能仿真模型或功能仿真模型

-gpgpu_deadlock_detect <0=off,  1=on (default)>

在死锁的时候停止仿真

-gpgpu_max_cta

可以在GPU上并发运行的cta数目(0=no limit)

-gpgpu_max_concurrent_kernel

可以在GPU上并发运行的最大的kernel数目

Statistics Collection  Options

Option

Description

-gpgpu_ptx_instruction_classification  <0=off, 1=on (default)>

打开指令分类

-gpgpu_runtime_stat  <frequency>:<flag>

显示运行时统计信息

-gpgpu_memlatency_stat

收集存储器延迟统计信息(0x2 enables MC, 0x4  enables queue logs)

-visualizer_enabled <0=off, 1=on  (default)>

打开visualizer输出(使用AerialVision可视化工具画出log文件中保存的数据曲线)

-visualizer_outputfile  <filename>

为visualizer指定输出文件

-visualizer_zlevel <compression  level>

Visualizer输出log文件的压缩级别(0=no compression, 9=max  compression)

-save_embedded_ptx

将二进制文件中的PTX保存为<n>NaNx

-enable_ptx_file_line_stats  <0=off, 1=on (default)>

打开PTX源文件统计剖析功能

-ptx_line_stats_filename <output  file name>

指定PTX源文件统计剖析信息的输出文件

-gpgpu_warpdistro_shader

指定某个shader core收集warp size的分布情况

-gpgpu_cflog_interval

控制流记录器(logger)中每个快照(snopshot)的间隔

-keep

保存GPGPU-Sim产生的中间文件

High-Level Architecture Configuration (See ISPASS  paper for more details on what is being modeled)

Option

Description

-gpgpu_n_mem <# memory  controller>

DRAM控制器(DRAM通道)的数目。在进行这个设置前,请先阅读“#Topology Configuration”小节

-gpgpu_clock_domains <Core  Clock>:<Interconnect Clock>:<L2 Clock>:<DRAM Clock>

设置4个时钟域

-gpgpu_n_clusters

设置核心簇的数目

-gpgpu_n_cores_per_cluster

设置每个核心簇中SIMD核心的数目

Additional Architecture  Configuration

Option

Description

-gpgpu_n_cluster_ejection_buffer_size

Ejection buffer中包的数目

-gpgpu_n_ldst_response_buffer_size

LD/ST单元ejection buffer中响应包的数目

-gpgpu_coalesce_arch

合并架构(default = 13, anything else is off for now)

Scheduler

Option

Description

-gpgpu_num_sched_per_core

每个核心warp调度器的数目

-gpgpu_max_insn_issue_per_warp

每个cycle内每个warp所能发射的最大指令数

Shader Core Pipeline Configuration

Option

Description

-gpgpu_shader_core_pipeline <#  thread/shader core>:<warp size>:<pipeline SIMD width>

Shader核心的流水线设置

-gpgpu_shader_registers <#  registers/shader core, default=8192>

每个shader核心的最大寄存器数目,被并发的CTA数目所限制

-gpgpu_shader_cta <# CTA/shader  core, default=8>

每个shader核心中能够并发的cta数目

-gpgpu_simd_model <1=immediate  post-dominator, others are not supported for now>

SIMD分支分叉的处理策略

Memory Sub-System  Configuration

Option

Description

-gpgpu_perfect_mem <0=off  (default), 1=on>

开启完美存储器模式(不发生cache miss并且存储器延迟为“0”)

-gpgpu_tex_cache:l1  <nsets>:<bsize>:<assoc>:<rep>:<wr>:<alloc>,<mshr>:<N>:<merge>,<mq>

纹理Cache配置。Evict policy: L = LRU, F = FIFO, R = Random

-gpgpu_const_cache:l1  <nsets>:<bsize>:<assoc>:<rep>:<wr>:<alloc>,<mshr>:<N>:<merge>,<mq>

常量Cache配置。Evict policy: L = LRU, F = FIFO, R = Random

-gpgpu_cache:il1  <nsets>:<bsize>:<assoc>:<rep>:<wr>:<alloc>,<mshr>:<N>:<merge>,<mq>

L1指令Cache配置。Evict policy: L = LRU, F = FIFO, R = Random

-gpgpu_cache:dl1  <nsets>:<bsize>:<assoc>:<rep>:<wr>:<alloc>,<mshr>:<N>:<merge>,<mq>  -- set to "none" for no DL1 --

L1数据Cache配置。Evict policy: L = LRU, F = FIFO, R = Random

-gpgpu_cache:dl2  <nsets>:<bsize>:<assoc>:<rep>:<wr>:<alloc>,<mshr>:<N>:<merge>,<mq>

统一的分bank的L2 Cache的配置。它指明了一个Memory Partion中L2 Cache bank的配置。L2 Cache的总容量 = <nsets> x <bsize> x <assoc> x  <# memory controller>

-gpgpu_shmem_size <shared memory  size, default=16kB>

每个shader核心中共享memory的大小

-gpgpu_shmem_warp_parts

对于共享memory bank冲突检测,warp被划分的数目。

-gpgpu_flush_cache <0=off  (default), 1=on>

在每个kernel调用的结束阶段Flush Cache

-gpgpu_local_mem_map

从本地memory存储空间地址到GPU仿真的物理空间地址的映射(默认为开启)

-gpgpu_num_reg_banks

寄存器堆的bank数目

-gpgpu_reg_bank_use_warp_id

将寄存器映射为bank时使用warp id(默认为关闭)

-gpgpu_cache:dl2_texture_only

L2 Cache仅用于纹理(0=no, 1=yes, default=1)

Operand Collector Configuration

Option

Description

-gpgpu_operand_collector_num_units_sp

Collector  unit的数目。(默认 = 4)

-gpgpu_operand_collector_num_units_sfu

Collector  unit的数目。(默认 = 4)

-gpgpu_operand_collector_num_units_mem

Collector  unit的数目。(默认 = 2)

-gpgpu_operand_collector_num_units_gen

Collector  unit的数目。(默认 = 0)

-gpgpu_operand_collector_num_in_ports_sp

Collector  unit输入端口的数目(默认 = 1)

-gpgpu_operand_collector_num_in_ports_sfu

Collector  unit输入端口的数目(默认 = 1)

-gpgpu_operand_collector_num_in_ports_mem

Collector  unit输入端口的数目(默认 = 1)

-gpgpu_operand_collector_num_in_ports_gen

Collector unit输入端口的数目(默认 = 0)

-gpgpu_operand_collector_num_out_ports_sp

Collector unit输出端口的数目(默认 = 1)

-gpgpu_operand_collector_num_out_ports_sfu

Collector unit输出端口的数目(默认 = 1)

-gpgpu_operand_collector_num_out_ports_mem

Collector unit输出端口的数目(默认 = 1)

-gpgpu_operand_collector_num_out_ports_gen

Collector unit输出端口的数目(默认 = 0)

DRAM/Memory Controller  Configuration

Option

Description

-gpgpu_dram_scheduler <0 = fifo,  1 = fr-fcfs>

DRAM调度器的类型

-gpgpu_dram_sched_queue_size <#  entries>

DRAM调度对列的大小(0 = unlimited (default);  # entries per chip)

-gpgpu_dram_buswidth <# bytes/DRAM bus  cycle, default=4 bytes, i.e. 8 bytes/command clock cycle>

在command总线频率下一个DRAM芯片的总线带宽(default = 4 bytes (8 bytes  per command clock cycle))。每个MC的DRAM芯片数目由-gpgpu_n_mem_per_ctrlr选项确定。每个memory partition有(gpgpu_dram_buswidth X  gpgpu_n_mem_per_ctrlr)位DRAM数据pin脚。例如,Quadro FX5800有512位DRAM数据总线,被划分为8个memory partition。每个memory partition有一个512/8 = 64bit数据总线。64位总线被划分为两个DRAM芯片。每个芯片有32位 = 4字节DRAM总线宽度。因此设置-gpgpu_dram_buswidth为“4”。

-gpgpu_dram_timing_opt  <nbk:tCCD:tRRD:tRCD:tRAS:tRP:tRC:CL:WL:tWTR>

DRAM时序参数

-gpgpu_mem_address_mask <address  decoding scheme>

选择不同的地址译码策略对不同的memory bank进行访问。(0 = old addressing mask, 1 = new addressing mask, 2 =  new add. mask + flipped bank sel and chip sel bits)

-gpgpu_mem_addr_mapping dramid@<start  bit>;<memory address map>

将存储地址映射到DRAM模型:

l  <start bit> = 用来指定DRAM通道ID的起始bit位(这意味着下Log2(#DRAM channel)bit位被用来作为DRAM通道ID,整个的地址映射被转换取决于有多少bit位被使用)

l  <memory address  map> = 一个64个字符的字符串指名存储器地址中每一位是如何被映射为行(R),列(C),bank(B)地址的。部分处于DRAM突发中的地址应该用(S)指名

-gpgpu_n_mem_per_ctrlr <# DRAM  chips/memory controller>

每个MC中DRAM芯片的数量(即DRAM通道)

-gpgpu_dram_partition_queues

i2::2d:d2::2i

-rop_latency <# minimum cycle  before L2 cache access>

指定最小的延迟(以核心的时钟周期为单位)从一个存储请求到达memory partition到它访问L2 Cache/进入DRAM访问队列。它建模了最小的L2 Cache命中延迟。

-dram_latency <# minimum cycle  after L2 cache access and before DRAM access>

指定最小的延迟(以核心的时钟周期为单位)从一个存储请求访问L2 Cache到它被送入DRAM调度器。这个设置和-rop_latency一起建模最小的DRAM访问延迟(= rop_latency +  dram_latency)。

Interconnection  Configuration

Option

Description

-inter_config_file <Path to  Interconnection Config file>

这个文件包含了互连网络仿真器的设置

-network_mode

互连网络模型(默认 = 1)

PTX Configurations

Option

Description

-gpgpu_ptx_use_cuobjdump

使用cuobjdump抽取ptx/sass (0=no, 1=yes) 仅对CUDA 4.0有效。

-gpgpu_ptx_convert_to_ptxplus

将嵌入的ptx转化为ptxplus (0=no, 1=yes)

-gpgpu_ptx_save_converted_ptxplus

将转化的ptxplus保存到文件(0=no, 1=yes)

-gpgpu_ptx_force_max_capability

强迫使用最大计算能力 (默认为“0”)

-gpgpu_ptx_inst_debug_to_file

将执行指令的调试信息dump到文件(0=no, 1=yes)

-gpgpu_ptx_inst_debug_file

指定调试信息的输出文件

-gpgpu_ptx_inst_debug_thread_uid

指令调试信息的线程id UID

3.3.1Interconnection Configuration

GPGPU-Sim 3.x使用booksim router simulator建模互连网络。可以参考booksim文档配置互连网络。然而,下面我们列出一些特殊的考虑需要被重视以确定你的修改可以和GPGPU-Sim一起工作。

3.3.1.1Topology Configuration

注意,在互连网络配置文件中指定的网络节点总数目必须与GPGPU-Sim中的总节点数目相匹配。GPGPU-Sim的节点数目为SIMT核心簇数目与MC数目之和。如,QuadroFX5800配置中有10个SIMT核心簇和8个MC。因此一共有18个节点。因此,互连网络配置文件中也有18个节点,如下所示:

topology = fly;

   k = 18;

   n = 1;

routing_function = dest_tag;

以上这个配置片断设置了一个一阶的蝶形互连网络,具有destination tag routing和18个节点。通常,蝶形和网状互连网络的网络节点总数应当是k*n。

注意,如果选择使用网状互连网络,你需要考虑配置MC的放置。在当前版本中,有一些预定义映射,可以通过设置“use_map=1;”开启。特别是ISPASS 2009文章中使用的网状互连网络可以通过这个进行设置,拓扑结构为:

l  a 6x6 mesh network(topology=mesh, k=6, n=2) : 28 SIMT cores + 8 dram channels assuming the SIMTcore Cluster size is one

你可以创建自己的映射通过修改interconnect_interface.cpp中的create_node_map(),并设置use_map=1。

3.3.1.2Booksim options added by GPGPU-Sim

3.3.1.3Booksim Options ignored by GPGPU-Sim

注意,下面booksim中配置选项要么被忽略或者保持默认状态不变。

l  Traffic Options:injection_rate,injection_process, burst_alpha, burst_beta, "const_flit_per_packet",traffic

l  Simulation parameters:sim_type, sample_period,warmup_periods, max_samples, latency_thres, sim_count, reorder

[笔记] GPGPU-SIM的使用说明(一)相关推荐

  1. 推荐搜索炼丹笔记:SIM 用户行为序列点击率预估模型

    作者:十方,公众号:炼丹笔记 Search-based User Interest Modeling with Lifelong Sequential Behavior Data for Click- ...

  2. (笔记)Bison 的使用说明

    Bison 的使用说明 一.使用 Bison 的流程 1. 创建语言描述文件 (.y 文件)     2. 编写词法分析器函数 yylex()     3. 编写错误报告函数 yyerror()   ...

  3. 微擎应用笔记3--manifest.xml文件使用说明

    微擎在安装或卸载模块时会根据manifest.xml生成(或删除)数据库中相应记录,并执行manifest.xml里指定的脚本. manifest.xml文件内容详细介绍如下: manifest - ...

  4. [转]微擎应用笔记3--manifest.xml文件使用说明

    本文转自:https://blog.csdn.net/seven_north/article/details/79508121 微擎在安装或卸载模块时会根据manifest.xml生成(或删除)数据库 ...

  5. gpgpu-sim卡分配程序设计实例分析

    gpgpu-sim卡分配程序设计实例分析 运行代码地址:https://github.com/gpgpu-sim/gpgpu-sim_distribution 一.概述 此文件包含有关安装.生成和运行 ...

  6. Zemax学习笔记(16)- ZEMAX_分析>报告使用说明

    Zemax学习笔记(16)- ZEMAX_分析>报告使用说明 总述 1.报告图 2.数据报告 3.摘要数据 总述 在ZEMAX中,想要获取系统最直接的参数,最方便的工具不失为系统分析>报告 ...

  7. Mask_RCNN翻译和详解笔记一(原文翻译+源代码+代码使用说明)

    Mask_RCNN翻译和详解笔记一(原文翻译+源代码+代码使用说明) 2018年06月01日 23:45:47 阅读数:332 原文:https://github.com/matterport/Mas ...

  8. k64 datasheet学习笔记12---System Integration Module (SIM)

    1.前言 Features of the SIM include: System clocking configuration (1)System clock divide values (2) Ar ...

  9. stm32笔记02——ST-Link下载器使用说明

    <-----------------------------------------------------------------------------> 以前经常使用的仿真器是j-l ...

  10. 工作笔记:Android高德定位使用说明

    高德定位模块使用说明 权限和KEY 在AndroidManifest.xml添加权限,如果仅使用定位功能,其他不需要的权限可去掉. <!-- Normal Permissions 不需要运行时注 ...

最新文章

  1. token验证_java基于token的身份验证?读完之后,大部分程序员收藏了...
  2. 【图神经网络】基于GNN的不同变种及其应用
  3. ITK:遍历具有成形邻域的图像区域
  4. .NET 6 使用 string.Create 提升字符串创建和拼接性能
  5. Fastest way to duplicate mongodb collection
  6. linux没有root密码xshell,LINUX终端免密登陆(以Xshell为例)
  7. 使用 SqlDataSource 插入、更新和删除数据49
  8. 标识符——Python
  9. java数组查找算法_JAVA数组中查找算法中equals和==的问题
  10. service下载任务
  11. Java实现仿QQ登陆、好友界面(可连接数据库)
  12. 串灯控制盒去掉怎么接_彩灯控制器原理图大全
  13. 线上MySQL慢查询现象案例--Impossible WHERE noticed after reading const tables
  14. 变换AABB的快速算法
  15. Spring 配置数据库动态密码
  16. openlayers4+中台风路径播放优化
  17. Maven之Nexus局域网私服的搭建以及上传下载的测试
  18. 常见电平类型:TTL电平,CMOS电平,232/485电平,OC门,OD门
  19. 计算机网络原理实验运城学院,运城学院力学精品课程--实验教学
  20. c语言sleep作用,c语言sleep用法是什么?

热门文章

  1. 程序员崩溃了!想拿的年终奖怎么说黄就黄?!
  2. 【转】拜占庭政治经济体
  3. 深信服上网行为管理系统如何配置短信?
  4. 两行轨道根数norad_极客历史记录的本周:NORAD跟踪圣诞老人,第一个HTTP测试,巴贝奇诞辰...
  5. python-藏头诗与成语接龙(爬虫)
  6. Android 腾讯手机管家 报毒 a.gray.PiggyGoldcoin.a
  7. 需求分析挑战之旅(疯狂的订餐系统)(4)——没完没了的“新需求”
  8. java8中 Collectors.groupingBy用法
  9. PythonGUI 使用Tkinter写一个简单时间间隔计算器
  10. 华硕k5555l拆解图解_华硕k555l拆机图解