有关GPGPU-SIM,GPU模型和体系结构的存在,如何配置以及源代码指南的详细文档,可以在此处找到。此外,可以在此处找到有关Accelwattch的详细文档,以收集用于子组件的功耗指标和源代码指南。
GPGPU-SIM依赖性:
gcc, g++, make, makedepend, xutils, bison, flex, zlib, CUDA Toolkit
(可选) gpgpu-sim文档依赖性:doxygen, graphvi
(可选的)航空视频依赖性:python-pmw, python-ply, python-numpy, libpng12-dev, python-matplotlib
cuda sdk依赖性:libxi-dev, libxmu-dev, libglut3-dev
安装先决条件库以正确运行模拟器后,克隆模拟器的AccelWattch实现(GPGPU-SIM 4.2)。然后,您应该按照模拟器目录内的以下命令来构建模拟器。
user@GPPRMon:~ $ source setup_environment < build_type >
# That command sets the environment variables so that the simulator can find related executables in the linkage path.
# If you want to debug the simulator (as written in C/C++), you should specify build_type as ` debug ` .
# Otherwise, you do not need to specify it ; blank as empty. It will automatically build the executables with ` release ` version. user@GPPRMon:~ $ make # To compile source files, create and link the executable files of the simulator.
user@GPPRMon:~ $ make clean # To clean the simulator executables此外,如果要生成将依赖项指定为可选的文档文件,则必须首先安装依赖项。之后,您可以获取文档
user@GPPRMon:~ $ make docs # Generates doxygen files describing simulator elements
user@GPPRMon:~ $ make cleandocs # Deletes pre-generated doxygen files if they exist.带有doxygen的生成文档可以简化模拟器对类,模板,功能等的理解。
在模拟过程中,模拟器在下面的路径中创建内存访问信息。
user@GPPRMon/runtime_profiling_metrics/memory_accesses:~ $要启用内存访问度量集合,必须在gpgpusim.config文件中指定以下标志。
| 标志 | 描述 | 默认值 |
|---|---|---|
| -mem_profiler | 启用收集内存访问指标 | 0 = OFF |
| -mem_runtime_stat | 确定公制收集的采样频率 | 100(每100个GPU周期后记录) |
| -ipc_per_prof_interval | 记录每个度量收集样本的IPC率 | 0 =不要收集 |
| -instruction_monitor | 录制问题/说明的完成统计 | 0 =不要收集 |
| -l1d_metrics | 录制L1D缓存访问的指标 | 0 =不要收集 |
| -l2_metrics | L2缓存访问的录音指标 | 0 =不要收集 |
| -dram_metrics | 录制DRAM访问的指标 | 0 =不要收集 |
| -store_enable | 记录商店和加载说明的指标 | 0 =仅记录负载的指标 |
| -accumulate_stats | 累积收集的指标 | 0 =不要累积 |
在模拟过程中,模拟器在以下路径中记录功耗指标。
user@GPPRMon/runtime_profiling_metrics/energy_consumption:~ $模拟器将在运行时为每个内核创建单独的文件夹和电源分析指标。目前,支持下面的功耗指标,但是这些指标可能会进一步增强以独立研究子单元。
GPU
核
执行单元(注册FU,调度程序,功能单元等)
加载存储单元(横梁,共享内存,共享MEM MISS/FOLID BUFFER,CACHE,CACHE PREFETCH缓冲区,Cache写入Buffer,Cache Miss Miss Buffer等)
指令功能单元(指令缓存,分支目标缓冲区,解码器,分支预测器等)网络上的芯片
L2缓存
DRAM +内存控制器前端引擎
记忆控制器和DRAM之间的PHY
交易引擎(后端引擎)
德拉姆
| 标志 | 描述 | 默认值 |
|---|---|---|
| -power_simulation_enabled | 启用收集功耗指标 | 0 = OFF |
| -gpgpu_runtime_stat | 根据GPU循环确定采样频率 | 1000个周期 |
| -power_per_cycle_dump | 在每个样品中倾倒详细的功率输出 | 0 = OFF |
| -dvfs_enabled | 打开/关闭电源模型的动态电压频率缩放 | 0 =未启用 |
| -aggregate_power_stats | 录制问题/说明的完成统计 | 0 =不要汇总 |
| -steady_power_levels_enabled | 生产稳定功率水平的文件 | 0 = OFF |
| -steady_state_definition | 允许偏差:样品数量 | 8:4 |
| -power_trace_enabled | 生成功率跟踪的文件 | 0 = OFF |
| -power_trace_zlevel | 功率跟踪输出日志的压缩水平 | 6,(0 = no comp,9 =最高) |
| -power_simulation_mode | 开关性能计数器输入用于电源模拟 | 0,(0 = SIM,1 = HW,2 = HW-SIM Hybrid) |
我们的可视化器工具采用了通过GPU内核的运行时模拟获得的.CSV文件,并生成了三种不同的可视化方案。当前,模拟器支持GTX480_FERMI, QV100_VOLTA, RTX2060S_TURING, RTX2060_TURING, RTX3070_AMPERE, TITAN_KEPLER, TITANV_VOLTA, TITANX_PASCAL GPUS。由于每个GPU都有不同的内存层次结构,因此我为每个层次结构设计了不同的方案。但是,我将SM和GPU可视化设计为一种,使它们的设计适用于每个GPU。

第一个可视化显示了第1个CTA的指令,该指令映射到第一个SM。当PC显示了指令的PC时,OPCODE显示了第一线程块的指令的操作代码。操作数显示了指令的相应操作码的寄存器ID。
在最右边的列(发行/完成),可视化器分别在第一行和第二行中显示每个纱的发行和完成信息。例如,第一个指令是CVTA.TO.GLOBAL.U64的PC为656,是在第7个扭曲时在第55557个周期发行的,并在第55563个周期完成。
该方案显示了在预定周期间隔内发布并完成的指示。在上面的示例中,此间隔为[55500,56000)。
此外,可能会看到SMS子组件的L1D缓存使用情况和消耗的运行时功率测量值。 RunTimedyNM参数表示每个部分的总消耗功率。执行,功能和负载/商店单元以及空闲核心是SM功耗的主要子部分。另外,底部显示IPC每SM。

第二个可视化显示了L1D,L2缓存(作为hits, hit_reserved_status, misses, reservation_failures, sector_misses, and mshr_hits )和DRAM分区(作为row buffer hits and row buffer misses )在模拟器间隔内的访问。对于缓存,访问说明如下:
对于DRAM,访问说明如下:
GPU主要由SMS组成,其中包括功能单元,寄存器文件和卡车,NOC和内存分区,其中DRAM Banks和L2 Caches存在。对于配置的体系结构,L1D缓存的数量等于SMS(SIMT核心群集),DRAM库的数量等于内存分区的数量,L2缓存的数量等于内存分区的两倍。

第三个可视化显示了内存使用度量指标中的On-A-A-L1D,L2 CACHE和DRAM访问统计信息,主动SMS中的平均IPC以及NOC的功耗指标,L2缓存和MC+DRAM的存储器分区以及SMS。
除了上述运行时可视化选项外,我们还为以下单元之间的平均运行时内存访问统计信息和IPC与功率耗散提供了一个显示选项。 要获得平均运行时内存访问统计信息和IPC与功率耗散:
user@GPPRMon/runtime_visualizer:~ $ python3 average_disp.py param1 param2 param3 param4我们已经在GV100和RTX2060上使用页面排名算法(PR)进行了实验。此外,我们还配置了Jetson Agx Xavier和Xavier NX GPU的GPU,并使用快速傅立叶变换算法对它们进行了实验。实验分析和显示结果太大,无法在此处上传。但是,我们将它们固定在本地服务器上。如果需要,我们可以发送这些结果。请随时与我们联系以寻求任何帮助和结果。