[笔记] GPGPU-SIM的使用说明(一)
本文来自魏继增科学网博客:链接地址: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文件中添加如下所示的语句:
关于仿真的输出的更多信息参见“understanding simulationoutput”小节。
3.1.2Pure Functional Simulation
纯功能仿真比性能仿真的仿真速度更快,但是它仅能够执行CUDA/OpenCL程序,不能够收集任何性能统计信息。
为了选择纯功能仿真模式,在gpgpusim.config文件中添加如下所示的语句:
作为另一种选择,你可以设置环境变量PTX_SIM_MODE_FUNC为“1”。然后就可以利用性能仿真模式执行程序了。
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 |
显示帮助信息 |
在当前的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,可以在你的配置文件中添加如下配置信息:
为了打开PTXPlus仿真,在gpgpusim.config文件中添加如下所示的语句:
-gpgpu_ptx_convert_to_ptxplus 1
被转化的PTXPlus可以保存在名为“"_#NaNxplus”的文件中,在gpgpusim.config文件中添加如下所示的语句:
-gpgpu_ptx_save_converted_ptxplus 1
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所能发射的最大指令数 |
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) |
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
以上这个配置片断设置了一个一阶的蝶形互连网络,具有destination tag routing和18个节点。通常,蝶形和网状互连网络的网络节点总数应当是k*n。
你可以创建自己的映射通过修改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中配置选项要么被忽略或者保持默认状态不变。
[笔记] GPGPU-SIM的使用说明(一)相关推荐
- 推荐搜索炼丹笔记:SIM 用户行为序列点击率预估模型
作者:十方,公众号:炼丹笔记 Search-based User Interest Modeling with Lifelong Sequential Behavior Data for Click- ...
- (笔记)Bison 的使用说明
Bison 的使用说明 一.使用 Bison 的流程 1. 创建语言描述文件 (.y 文件) 2. 编写词法分析器函数 yylex() 3. 编写错误报告函数 yyerror() ...
- 微擎应用笔记3--manifest.xml文件使用说明
微擎在安装或卸载模块时会根据manifest.xml生成(或删除)数据库中相应记录,并执行manifest.xml里指定的脚本. manifest.xml文件内容详细介绍如下: manifest - ...
- [转]微擎应用笔记3--manifest.xml文件使用说明
本文转自:https://blog.csdn.net/seven_north/article/details/79508121 微擎在安装或卸载模块时会根据manifest.xml生成(或删除)数据库 ...
- gpgpu-sim卡分配程序设计实例分析
gpgpu-sim卡分配程序设计实例分析 运行代码地址:https://github.com/gpgpu-sim/gpgpu-sim_distribution 一.概述 此文件包含有关安装.生成和运行 ...
- Zemax学习笔记(16)- ZEMAX_分析>报告使用说明
Zemax学习笔记(16)- ZEMAX_分析>报告使用说明 总述 1.报告图 2.数据报告 3.摘要数据 总述 在ZEMAX中,想要获取系统最直接的参数,最方便的工具不失为系统分析>报告 ...
- Mask_RCNN翻译和详解笔记一(原文翻译+源代码+代码使用说明)
Mask_RCNN翻译和详解笔记一(原文翻译+源代码+代码使用说明) 2018年06月01日 23:45:47 阅读数:332 原文:https://github.com/matterport/Mas ...
- k64 datasheet学习笔记12---System Integration Module (SIM)
1.前言 Features of the SIM include: System clocking configuration (1)System clock divide values (2) Ar ...
- stm32笔记02——ST-Link下载器使用说明
<-----------------------------------------------------------------------------> 以前经常使用的仿真器是j-l ...
- 工作笔记:Android高德定位使用说明
高德定位模块使用说明 权限和KEY 在AndroidManifest.xml添加权限,如果仅使用定位功能,其他不需要的权限可去掉. <!-- Normal Permissions 不需要运行时注 ...
最新文章
- token验证_java基于token的身份验证?读完之后,大部分程序员收藏了...
- 【图神经网络】基于GNN的不同变种及其应用
- ITK:遍历具有成形邻域的图像区域
- .NET 6 使用 string.Create 提升字符串创建和拼接性能
- Fastest way to duplicate mongodb collection
- linux没有root密码xshell,LINUX终端免密登陆(以Xshell为例)
- 使用 SqlDataSource 插入、更新和删除数据49
- 标识符——Python
- java数组查找算法_JAVA数组中查找算法中equals和==的问题
- service下载任务
- Java实现仿QQ登陆、好友界面(可连接数据库)
- 串灯控制盒去掉怎么接_彩灯控制器原理图大全
- 线上MySQL慢查询现象案例--Impossible WHERE noticed after reading const tables
- 变换AABB的快速算法
- Spring 配置数据库动态密码
- openlayers4+中台风路径播放优化
- Maven之Nexus局域网私服的搭建以及上传下载的测试
- 常见电平类型:TTL电平,CMOS电平,232/485电平,OC门,OD门
- 计算机网络原理实验运城学院,运城学院力学精品课程--实验教学
- c语言sleep作用,c语言sleep用法是什么?
热门文章
- 程序员崩溃了!想拿的年终奖怎么说黄就黄?!
- 【转】拜占庭政治经济体
- 深信服上网行为管理系统如何配置短信?
- 两行轨道根数norad_极客历史记录的本周:NORAD跟踪圣诞老人,第一个HTTP测试,巴贝奇诞辰...
- python-藏头诗与成语接龙(爬虫)
- Android 腾讯手机管家 报毒 a.gray.PiggyGoldcoin.a
- 需求分析挑战之旅(疯狂的订餐系统)(4)——没完没了的“新需求”
- java8中 Collectors.groupingBy用法
- PythonGUI 使用Tkinter写一个简单时间间隔计算器
- 华硕k5555l拆解图解_华硕k555l拆机图解