《CUDA C编程权威指南》——2.2节给核函数计时

本文涉及的产品
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
简介:

本节书摘来自华章社区《CUDA C编程权威指南》一书中的第2章,第2.2节给核函数计时,作者[美] 马克斯·格罗斯曼(Max Grossman) ,更多章节内容可以访问云栖社区“华章社区”公众号查看

2.2 给核函数计时
在内核的性能转换过程中,了解核函数的执行需要多长时间是很有帮助并且十分关键的。衡量核函数性能的方法有很多。最简单的方法是在主机端使用一个CPU或GPU计时器来计算内核的执行时间。在本节,你需要设置一个CPU计时器,并学习使用NVIDIA分析工具来计算执行时间。第6章将教你如何使用CUDA特定的计时程序。
2.2.1 用CPU计时器计时
可以使用gettimeofday系统调用来创建一个CPU计时器,以获取系统的时钟时间,它将返回自1970年1月1日零点以来,到现在的秒数。程序中需要添加sys/time.h头文件,如代码清单2-5所示。


0eb0f59e902d41d380133fbfbe5eee5455c8daf7


7601694035989d6f70771e9e7fc30fba7a8aa155


7062bd3baf5d506e540ee195314df0b64ed2bc09

了解自身局限性
在调整执行配置时需要了解的一个关键点是对网格和块维度的限制。线程层次结构中每个层级的最大尺寸取决于设备。
CUDA提供了通过查询GPU来了解这些限制的能力。在本章的2.4节有详细的介绍。
对于Fermi设备,每个块的最大线程数是1 024,且网格的x、y、z三个方向上的维度最大值是65 535。

2.2.2 用nvprof工具计时
自CUDA 5.0以来,NVIDIA提供了一个名为nvprof的命令行分析工具,可以帮助从应用程序的CPU和GPU活动情况中获取时间线信息,其包括内核执行、内存传输以及CUDA API的调用。其用法如下。


177044e1af85000a4f06be538da00c46a99e6a63

以上结果的前半部分来自于程序的输出,后半部分来自于nvprof的输出。可以注意到,CPU计时器显示消耗的内核时间为3.26ms,而nvprof显示消耗的内核时间为2.90ms。在这个例子中,nvprof的结果更为精确,因为CPU计时器测量的时间中包含了来自nvprof附加的时间。
nvprof是一个能帮助你理解在执行应用程序时所花费的时间主要用在何处的强大工具。可以注意到,在这个例子中,主机和设备之间的数据传输需要的时间比内核执行的时间要多。图2-8所描绘的时间线(未按比例绘制),显示了在CPU上消耗的时间、数据传输所用的时间以及在GPU上计算所用的时间。


545590b89f80785b021ad848418a170e1dc54589

对于HPC工作负载,理解程序中通信比的计算是非常重要的。如果你的应用程序用于计算的时间大于数据传输所用的时间,那么或许可以压缩这些操作,并完全隐藏与传输数据有关的延迟。如果你的应用程序用于计算的时间少于数据传输所用的时间,那么需要尽量减少主机和设备之间的传输。在第6章中,你将会学习如何使用CUDA流和事件来压缩计算量和通信量。
比较应用程序的性能将理论界限最大化
在进行程序优化时,如何将应用程序和理论界限进行比较是很重要的。由nvprof得到的计数器可以帮助你获取应用程序的指令和内存吞吐量。如果将应用程序的测量值与理论峰值进行比较,可以判定你的应用程序的性能是受限于算法还是受限于内存带宽的。以Tesla K10为例,可以得到理论上的比率:
Tesla K10单精度峰值浮点运算次数
745 MHz核心频率 2 GPU/芯片(8个多处理器 192个浮点单元 32核心/多处理器)* 2 OPS/周期=4.58 TFLOPS(FLOPS表示每秒浮点运算次数)
Tesla K10内存带宽峰值
2 GPU/芯片 256位 2 500 MHz内存时钟* 2 DDR / 8位/字节=320 GB/s
指令比∶字节
4.58 TFLOPS/ 320 GB/s,也就是13.6个指令:1个字节
对于Tesla K10而言,如果你的应用程序每访问一个字节所产生的指令数多于13.6,那么你的应用程序受算法性能限制。大多数HPC工作负载受内存带宽的限制。

相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
相关文章
|
11月前
|
存储 并行计算 程序员
【CUDA学习笔记】第二篇:CUDA C并行化编程【上半部分】(附案例代码下载方式)
【CUDA学习笔记】第二篇:CUDA C并行化编程【上半部分】(附案例代码下载方式)
247 0
|
11月前
|
并行计算 计算机视觉 异构计算
【CUDA学习笔记】第三篇:CUDA C并行化编程【下半部分】(附案例代码下载方式)(二)
【CUDA学习笔记】第三篇:CUDA C并行化编程【下半部分】(附案例代码下载方式)(二)
120 0
【CUDA学习笔记】第三篇:CUDA C并行化编程【下半部分】(附案例代码下载方式)(二)
|
11月前
|
缓存 并行计算 API
【CUDA学习笔记】第三篇:CUDA C并行化编程【下半部分】(附案例代码下载方式)(一)
【CUDA学习笔记】第三篇:CUDA C并行化编程【下半部分】(附案例代码下载方式)(一)
127 0
|
并行计算 API