底层计算单元的改进和效果
虽然在CUDA概念里,CUDA core或者SP就是一个内核,但是从目前实现的硬件整体而言,CUDA core其实只是一个功能单元而已。真正能比较接近于我们常说的内核,则是CUDA core的上一级——Streaming Multiprocessor(简写为SM),因为目前只有在SM这一级才具备Program Counter(程序计数器)、调度资源以及分离的寄存器堆块。
一个CUDA Core运算核心的构成
Fermi的每个SM拥有32个高性能CUDA Core——这是四倍于G80/GT200的设计,每个CUDA core都有全流水线化的整数算术逻辑单元(ALU)和浮点单元(FPU)。Fermi的ALU几乎采用完新的设计,支持64bit和扩展的精确的指令运算,同时支持计算,移位,布尔值,比较,转化和更多的指令操作。
Fermi的所有流处理器现在都符合IEEE 754-2008浮点算法(AMD的Cypress架构也是如此)和完整的32位整数算法,而后者在过去只是模拟的,事实上仅能计算24-bit整数乘法;同时Fermi全面引入了积和熔加运算(Fused Multiply-Add/FMA),每循环操作数单精度512个、单精度256个(G200仅支持单精度FMA)。所有一切都符合业界标准,计算结果不会产生意外偏差。
和MAD(multiply-add)指令相比,Fermi所支持的FMA指令在做乘运算和加运算的时候只在最后运算的时候作一次舍入,不会在执行加法的时候就出现精度损失,精度比把操作分离执行更高。当然我们需要了解的是,GT200在执行双精度浮点运算的时候,使用的是FMA指令,这就证明GT200时代SM中的DPU双精度单元已经成熟满足了FMA指令所需的硬件要求。