我正在阅读Dobb 博士关于 CUDA 的文章
在我的系统中,全局内存带宽略高于 60 GB/s。在您考虑到此带宽必须为 128 个硬件线程提供服务之前,这非常好——每个线程都可以提供大量的浮点运算。由于 32 位浮点值占用四 (4) 个字节,因此此硬件上的全局内存带宽受限应用程序将只能提供大约 15 GF/s - 或仅占可用性能能力的一小部分。
问题:GF/s 表示每秒 Giga flops?
我正在阅读Dobb 博士关于 CUDA 的文章
在我的系统中,全局内存带宽略高于 60 GB/s。在您考虑到此带宽必须为 128 个硬件线程提供服务之前,这非常好——每个线程都可以提供大量的浮点运算。由于 32 位浮点值占用四 (4) 个字节,因此此硬件上的全局内存带宽受限应用程序将只能提供大约 15 GF/s - 或仅占可用性能能力的一小部分。
问题:GF/s 表示每秒 Giga flops?
每秒 Giga flops 就是它!
GF/s 或 GFLOPS 是 GigaFlops 或每秒 10^9 次浮动操作。(GF/s 是 GigaFLOP/S = GigaFLOPS 的一个不寻常的缩写,请参见此处“Gigaflops (GF/s) = 10^9 flops”或此处“gigaflops per second (GF/s)”)。
我很清楚 GF/s 不是 GFLOPS/s(不是加速度)。
您应该记住,CPU 和 GPU 上的浮动操作通常以不同的方式计算。对于大多数 CPU,通常会计算 64 位浮点格式操作。而对于 GPU - 32 位,因为 GPU 在 32 位浮点中具有更高的性能。
计算哪些类型的操作?加法,减法和乘法都是。加载和存储数据不计算在内。但是加载和存储数据对于从内存中获取数据是必要的,有时它会限制在实际应用中实现的 FLOPS(您引用的文章提到了这种情况,“内存带宽限制应用”,当 CPU/GPU 可以提供大量 FLOPS 时但内存不能这么快读取所需的数据)
某些芯片或计算机如何计算 FLOPS?有两个不同的指标,一个是这个芯片的理论 FLOPS 上限。它是通过将每个 CPU 滴答的核心数、芯片频率和浮点运算相乘来计算的(Core2 为 4,Sandy Bridge CPU 为 8)。
其他指标类似于现实世界的失败,通过运行 LINPACK 基准(解决巨大的线性方程组)来计算。该基准测试大量使用矩阵-矩阵乘法,并且是对真实世界触发器的一种近似。Top500 超级计算机是通过并行版本的 LINPACK 基准 HPL 来衡量的。对于单 CPU,linpack 可以有高达 90-95% 的理论失败率,对于大型集群,它在 50-85% 的范围内。
在这种情况下,GF 是 GigaFLOPS,但 FLOPS 是“每秒浮点操作数”。我相当肯定作者并不是说 F/s 是“每秒每秒的浮点运算”,所以 GF/s 实际上是一个错误。(除非您谈论的是在运行时提高性能的计算机,否则我猜)作者可能是指GFLOPS。