CUDA(一) GPU计算性能的相关计算公式
此博客为博主的自学笔记 ,欢迎大家共同交流,如果有错误的地方欢迎留言指正。
今天开始重新学习CUDA,虽然之前也写过一段程序。可因为种种原因没有继续,加之使用的硬件版本比较低端和英伟达的不断创新进步,发现自己已经处于CUDA的菜鸟乐园中。
闲话不多说---------开干。
今天先将最基本的计算方法重新理解一下,为以后的性能优化打下坚实的基础!!!!
GPU设备的单精度计算能力的理论峰值计算公式:
单精度计算能力的峰值 = 单核单周期计算次数 × 处理核个数 × 主频
例如: 以GTX680为例, 单核一个时钟周期单精度计算次数为两次,处理核个数 为1536, 主频为1006MHZ,那他的计算能力的峰值P 为
P = 2 × 1536 × 1006MHZ = 3.09TFLOPS
这里1MHZ = 1000000HZ, 1T为1兆,也就是说,GTX680每秒可以进行超过3兆次的单精度运算。
同样,双精度的处理核为64个,不难算出,GTX680的双精度运算能力为0.13TFLOPS。
GPU设备的数据通信时间的计算公式:
通信时间 = 通信量 ÷ 通信速度
例如,单个处理核的输入数据以4个4byte为例,输出为1个4byte,GTX680所有处理核100%利用的情况下,通信量为5× 4 × 1536 byte,GTX680的通信速度为192..2GB/S,所以它的通信时间为
5× 4 × 1536 byte ÷ 192.2GB/S = 1.49e-7 s
如果这4个4byte的数据进行10次运算的话,以GTX680为例,他的主频为1006MHZ,也就是他每1e-9s为一个时钟周期,每个周期可进行两次单精度计算,也就是5个时钟周期即5e-9s可完成计算,为通信时间的几十分之一,故可忽略不计。所以,从内存访问看计算能力:
单精度计算能力 = 单核单精度符点计算次数 × 处理核个数 ÷ ( 通信时间 + 计算时间) 注:此处计算时间忽略不计
即 10 × 1536 ÷ 1.49e-7s = 103GFLOPS
即为普通PC10倍的计算速度。