Time CUDA测量每个gpu内核的执行时间
我对cuda编程非常陌生(几周前才开始),我有一项任务,就是将大尺寸矩阵(如960x960)相乘,并测量整个gpu内核和每个gpu内核的执行时间。我查看了安装工具包时附带的CUDA示例(更准确地说是0_Simple文件夹中的项目matrixMul)。我改变了样本,使之与大矩阵相乘。该示例本身具有测量执行时间的实现,但我的问题是如何测量每个gpu内核的执行时间。我很困惑Time CUDA测量每个gpu内核的执行时间,time,cuda,execution,measure,Time,Cuda,Execution,Measure,我对cuda编程非常陌生(几周前才开始),我有一项任务,就是将大尺寸矩阵(如960x960)相乘,并测量整个gpu内核和每个gpu内核的执行时间。我查看了安装工具包时附带的CUDA示例(更准确地说是0_Simple文件夹中的项目matrixMul)。我改变了样本,使之与大矩阵相乘。该示例本身具有测量执行时间的实现,但我的问题是如何测量每个gpu内核的执行时间。我很困惑 同样,重要性较低的是,为什么本例中的内核函数在最多300次迭代的for函数中被调用 每个CUDA设备都有多个流式多处理器(SMs
同样,重要性较低的是,为什么本例中的内核函数在最多300次迭代的for函数中被调用 每个CUDA设备都有多个流式多处理器(SMs)。每个SM可以有多个warp调度程序和多个执行单元。CUDA核心是执行单元,而不是“核心”,因此我将在接下来的讨论中避免使用它们 NVIDIA分析工具
- CUDA命令行分析器
- nvprof命令行分析器(CUDA 5.0中新增)
- 可视轮廓仪
- Nsight VSE CUDA分析器
nvprof --print-gpu-trace matrixMul.exe
======== NVPROF is profiling matrixMul.exe...
======== Command: matrixMul.exe
[Matrix Multiply Using CUDA] - Starting...
GPU Device 0: "GeForce GTX 480" with compute capability 2.0
MatrixA(320,320), MatrixB(640,320)
Computing result using CUDA Kernel...
done
Performance= 39.40 GFlop/s, Time= 3.327 msec, Size= 131072000 Ops, WorkgroupSize= 1024 threads/block
Checking computed result for correctness: OK
Note: For peak performance, please refer to the matrixMulCUBLAS example.
======== Profiling result:
Start Duration Grid Size Block Size Regs* SSMem* DSMem* Size Throughput Device Context Stream Name
267.83ms 71.30us - - - - - 409.60KB 5.74GB/s 0 1 2 [CUDA memcpy HtoD]
272.72ms 139.20us - - - - - 819.20KB 5.88GB/s 0 1 2 [CUDA memcpy HtoD]
272.86ms 3.33ms (20 10 1) (32 32 1) 20 8.19KB 0B - - 0 1 2 void matrixMulCUDA<int=32>(float*, float*, float*, int, int)
277.29ms 3.33ms (20 10 1) (32 32 1) 20 8.19KB 0B - - 0 1 2 void matrixMulCUDA<int=32>(float*, float*, float*, int, int)
nvprof——打印gpu跟踪矩阵mul.exe
=======NVPROF正在分析matrixMul.exe。。。
=======命令:matrixMul.exe
[使用CUDA进行矩阵乘法]-正在启动。。。
GPU设备0:“GeForce GTX 480”,计算能力为2.0
MatrixA(320320),MatrixB(640320)
使用CUDA内核的计算结果。。。
完成
性能=39.40千兆次/秒,时间=3.327毫秒,大小=131072000次操作,工作组大小=1024个线程/块
检查计算结果的正确性:OK
注:有关峰值性能,请参考matrixMulCUBLAS示例。
=======分析结果:
开始持续时间网格大小块大小Regs*SSMem*DSMem*大小吞吐量设备上下文流名称
267.83ms 71.30us----409.60KB 5.74GB/s 01 2[CUDA memcpy HtoD]
272.72ms 139.20us----819.20KB 5.88GB/s 01 2[CUDA memcpy HtoD]
272.86ms 3.33ms(20 10 1)(32 32 1)20 8.19KB 0B--0 1 2无效矩阵mulcuda(float*,float*,float*,int,int)
277.29ms 3.33ms(20 10 1)(32 32 1)20 8.19KB 0B--0 1 2无效矩阵mulcuda(float*,float*,float*,int,int)
以便在其他工具中收集
nvprof——活动事件\u周期——聚合模式关闭matrixMul.exe
=======NVPROF正在分析matrixMul.exe。。。
=======命令:matrixMul.exe
[使用CUDA进行矩阵乘法]-正在启动。。。
GPU设备0:“GeForce GTX 480”,计算能力为2.0
MatrixA(320320),MatrixB(640320)
使用CUDA内核的计算结果。。。
完成
性能=12.07 GFlop/s,时间=10.860毫秒,大小=131072000次操作,工作组大小=1024个线程/块
检查计算结果的正确性:OK
注:有关峰值性能,请参考matrixMulCUBLAS示例。
=======分析结果:
设备上下文流、事件名称、内核、值
0 1 2,有效循环,无效矩阵MULCUDA(浮点*,浮点*,浮点*,整数,整数),2001108 2001177 2000099 2002857 2152562 2153254 2001086 215043 2001015 2001192 2000065 2154293 2000071 2000238 2154905
0 1 2,有效循环,无效矩阵mulcuda(float*,float*,float*,int,int),2155340 2002145 2155289 2002374 2003336 2002498 2001865 215503 2156271 2156429 2002108 2002836 2002461 2002695 2002098
每个CUDA设备都有多个流式多处理器(SMs)。每个SM可以有多个warp调度程序和多个执行单元。CUDA核心是执行单元,而不是“核心”,因此我将在接下来的讨论中避免使用它们
NVIDIA分析工具
- CUDA命令行分析器
- nvprof命令行分析器(CUDA 5.0中新增)
- 可视轮廓仪
- Nsight VSE CUDA分析器
nvprof --print-gpu-trace matrixMul.exe
======== NVPROF is profiling matrixMul.exe...
======== Command: matrixMul.exe
[Matrix Multiply Using CUDA] - Starting...
GPU Device 0: "GeForce GTX 480" with compute capability 2.0
MatrixA(320,320), MatrixB(640,320)
Computing result using CUDA Kernel...
done
Performance= 39.40 GFlop/s, Time= 3.327 msec, Size= 131072000 Ops, WorkgroupSize= 1024 threads/block
Checking computed result for correctness: OK
Note: For peak performance, please refer to the matrixMulCUBLAS example.
======== Profiling result:
Start Duration Grid Size Block Size Regs* SSMem* DSMem* Size Throughput Device Context Stream Name
267.83ms 71.30us - - - - - 409.60KB 5.74GB/s 0 1 2 [CUDA memcpy HtoD]
272.72ms 139.20us - - - - - 819.20KB 5.88GB/s 0 1 2 [CUDA memcpy HtoD]
272.86ms 3.33ms (20 10 1) (32 32 1) 20 8.19KB 0B - - 0 1 2 void matrixMulCUDA<int=32>(float*, float*, float*, int, int)
277.29ms 3.33ms (20 10 1) (32 32 1) 20 8.19KB 0B - - 0 1 2 void matrixMulCUDA<int=32>(float*, float*, float*, int, int)
nvprof——打印gpu跟踪矩阵mul.exe
=======NVPROF正在分析matrixMul.exe。。。
=======命令:matrixMul.exe
[使用CUDA进行矩阵乘法]-正在启动。。。
GPU设备0