服务器 频道

全新视觉盛宴 Fermi架构Quadro显卡横评

    OpenCL和Directcomputer和CUDA的编程模型很相近,几乎使用相同的线程,block组织的grid同步同一个block里面共享内存,全局内存,还有操作。Fermi第三代支持CUDA的架构,很自然很好的优化支持了这些API。更特别的,Fermi利用标准的转换方式,从硬件上支持OpenCL和DirectCompute的接口指令,可以让图形计算和通用计算很简单的操作在相同的数据上。PTX 2.0 ISA同样增加了对DirectCompute的指令population count,append和bit‐reverse。

OpenCL和IEEE 32bit

  单精度的浮点数由硬件默认的支持,包括四个IEEE 754-2008支持的标准(无限趋近,零,最大值和最小值)。在浮点系统中,Subnormal是处于最大值和最小值之间的数。在较早的的GPU架构中,通常情况下把这一范围的浮点数归于0,这样一般都会损失精度或者让程序发生一些意想不到的错误。CPU通常情况下都要通过额外的软件方式来处理,一般需要上千个的周期。Fermi是通过硬件来处理subnormal浮点数,可以精确的计算小于0的浮点数而没有精度损失。

  通常情况下在GPU上完成的计算,像线性代数,一些科学常用的程序,都是两个数相乘然后加上第三个数,例如:D=A*B+C。以前的GPU架构通常情况下都是利用乘加指令来完成(MAD),可以让两个操作在一个指令周期内完成。MAD指令使用了分断的乘法,然后使用了取整的加法。Fermi使用了更高精度的FMA指令,不但可以支持32bit的单精度的操作,也满足64bit双精度的需求。(GT200只支持双精度的FMA)在这样的精度保证下面,更多的算法都可以受益,像渲染算法,一些迭代的数学算法,更快的除法和求平方根的算法。

  在PTX 2.0 ISA中所有指令都增加了预处理,这样可以更快更容易执行可以运行的部分。在执行if-else的时候,SM会计算每一条分支需要执行的条件,增加一个可以满足的条件,硬件都会执行那个分支。有了分支预测以后就可以更多的分支一起运行,比一条分支一条的执行会更有效果。Fermi的架构增加的条件判断隐藏了分支运算中的overhead。

0
相关文章