GPU_Tool工具需求规格说明书
1. 简介
1.1 目的
本文阐述了GPU_Tool工具的开发需求。用于指导GPU_Tool工具的开发人员进行设计、开发和测试,是整个项目后续的工作基础。
1.2 范围
本项目输出产品名称为GPU_Tool,是基于CUDA的一款GPU性能监控工具,在这个工具中将实现以下特性,并按实现优先级从高到底对其进行排序,其中本工具第一版本优先实现第1和2项特性。
- 支持对GPU设备的物理信息进行查询和检测。
- 支持监控GPU设备上运行程序的动态信息。
- 支持前台手动和后台自动检测GPU进程。
- 支持用户指定检测选项。
- 支持对检测GPU进程进行总结和概括。
- 支持以控制终端形式输出检测信息。
- 支持以文件形式输出和保存检测信息。
- 支持对GPU进程的kernel函数进行追踪。
- 支持对CUDA进程的API调用进行追踪。
GPU_Tool不支持以下特性:
- 不能够以图形界面启动。
- 不支持对被检测GPU进程进行调式。
- 不支持NVIDIA 以外GPU设备的信息检测。
2. 总体概述
2.1 软件概述
随着GPU应用的逐渐增多,特别是高性能与并行计算的广泛应用。对于软件的普通用户需要对GPU设备上运行的程序进行实时监控,对于CUDA开发工程师需要对程序进行性能监测,从而进行软件优化。GPU_Tool工具提供了详细的GPU设备物理信息和GPU进程运行的动态信息,通过这些信息可以了解GPU的处理能力和当前工作负载。
2.2 产品环境介绍
GPU_Tool工具是一款应用软件,与GPU应用一样是用户级的软件,GPU_Tool工具与GPU应用之间不存在层次关系,两者互相独立,即本工具和被检测GPU应用是分别独立编译完成的可执行应用,两者分别在CPU和GPU上执行。为了实现对GPU应用进行监控,也为方便工程师对GPU进行优化,
图 1.png
3. 软件功能
========
GPU_Tool工具能够查询当前GPU静态的物理信息,以及能够监控GPU设备的动态信息和收集在当前GPU上执行进程的运行信息,包括核函数执行、内存传输、内存设置和CUDA进程的
API调用。同时,能够提供多种监控方式和检测模式。
3.1 监控方式
GPU_Tool与被监控的GPU应用之间是互相独立,即GPU_Tool和被监控应用是分别独立编译完成的可执行应用,两者分别在CPU和GPU上执行。为了实现对GPU应用进行监控,也为方便工程师对GPU进行优化,所以本工具提供两种工作方式:手动和自动。
- 手动方式
手动方式是指GPU_Tool工具在前台执行,并且需要用户通过GPU_Tool手动将GPU应用加载到系统上执行,进而用户自己筛选需要的选项,从而检测GPU应用相关的静态或动态信息。
- 自动方式
自动方式是指GPU_Tool在后台执行,并实时监控所有在GPU上执行的进程信息。这种工作方式相比手动方式要更加独立,对于GPU进程来说GPU_Tool是透明的,即GPU进程根本不知GPU_Tool的存在;但比手动方式要被动,即该工具进程将一直驻留在后台中,并对所有GPU进程进行实时检测,类似Windows中的任务管理器。
3.3 检测模式
检测模式是指用户能够根据需要对特定信息进行监控,即不同的检测模式对GPU进程的监控关注点不同,从而用户能够快速获得特定的需求信息。其中有如下几种检测模式,每种检测模式都可以是手动或自动方式下工作。
- 物理模式
所谓物理模式是指GPU_Tool只获得当前GPU硬件的静态信息,而对GPU进程的运行动态信息则进行忽略。如在该模式下能够获得GPU的CUDA能力、GPU版本号、驱动版本号,而忽略进程的block和wrap数。
- 总结模式
总结模式是指GPU_Tool只对GPU进程的动态运行信息进行监控,并提供每个kernel函数的运行信息和内存的传输信息,对于每个kernel函数,监控工具能够输出所有实体的运行总时间,以及内存传输的平均、最小和最大时间,而且GPU_Tool能够打印出所有的CUDA
运行API和驱动API的调用信息。
- 追踪模式
追踪模式能够提供所有在GPU设备上发生的所有活动的时间轴顺序,即能够输出在GPU上运行的kernel函数或API的调用顺序,包括kernel函数的参数、共享内存的使用情况和内存的传输量。
- 测量模式
测量模式为用户提供多种选项完成特定信息的测量,比如GPU进程执行的block或thread数量、kernel函数在GPU上执行的利用率、内存的使用情况等动态信息。用户可以根据自己需要进行监控,或者监控全部信息。
4. 检测信息
4.1 物理信息
每种硬件平台都有其固有物理限制,无法在软件层进行修改。GPU设备也受到这种限制,并且GPU_Tool能够查询这些物理信息。本GPU_Tool工具能够提供的查询能力和信息,参考deviceQuery应用程序和cudaDeviceProp数据结构,列出如表
1所示的物理信息。
表 1
结构 | 语义 |
---|---|
Device num | GPU 设备数量 |
Device name | GPU 设备名字 |
CUDA Driver Version | CUDA 驱动版本 |
CUDA Runtime Version | CUDA 运行库版本 |
CUDA Capability Major version number | CUDA设备的主计算功能集的主版本号 |
CUDA Capability Minor version number | CUDA设备的主计算功能集的次版本号 |
Total amount of global memory | 总共可用的全局空间 |
Multiprocessors | 流处理器数量 |
CUDA Cores/MP | 每个流处理器的CUDA 核心数量 |
GPU Max Clock rate | GPU最大时钟频率 |
Memory Clock rate | 内存时钟频率 |
Memory Bus Width | 内存总线带宽 |
L2 Cache Size | L2 Cache大小 |
Total amount of constant memory | 总共的constant存储空间 |
Total amount of shared memory per block | 每个block总共的share空间 |
Total number of registers available per block | 每个block的总共register空间 |
Warp size | 当前GPU中的warp大小 |
Maximum number of threads per multiprocessor | 每个流处理器中可承载的最大线程数量 |
Maximum number of threads per block | 每个block中可承载的最大线程数量 |
Max dimension size of a thread block (x,y,z) | 在启动核函数时,block三维向量中的每一维向量可用创建的最大长度 |
Max dimension size of a grid size (x,y,z) | 在启动核函数时,gird三维向量中的每一维向量可用创建的最大长度 |
Maximum memory pitch | 在内存复制中最大的修正量(Pitch) |
Concurrent copy and kernel execution | 描述设备是否支持在同一个上下文中同时执行多个核函数 |
Run time limit on kernels | 描述该设备上执行的核函数是否存在运行限制 |
Integrated GPU sharing Host Memory | 描述该设备是否是集成GPU |
Support host page-locked memory mapping | 描述设备是否将主机内存映射到CUDA设备地址空间 |
4.2 运行信息
运行信息是指GPU进程在执行时产生的动态信息,由于不同的kernel函数和API调用都产生不同的信息结构,并且不同的用户也有不同的需求,所以参考NVIDIA
eclipse富客户端应用程序展示的信息,列出表 2所示的动态信息。
表 2
检测内容 | 是否可实现 |
---|---|
GPU占有率 | NO |
GPU内存使用率 | YES |
GPU数据传输带宽 | NO |
CPU—GPU数据传输量 | NO |
GPU温度 | YES |
Fan值 | YES |
GPU Memory使用量 | YES |
GPU Memory空闲量 | YES |
流处理器中可用的最大shared 值 | NO |
32位流处理器中最大可用registers值 | NO |
获得GPU运行进程 | YES |