●4个特殊功能单元Four Special Function Units (SFU)
特殊函数处理单元处理超越函数,包括sin、cosine、求倒数、平方根。每一个SFU在一个周期内每一个线程可以执行一个指令操作,每一个warp执行需要8个周期。指令分发器可以按照当前SFU的运行情况来分发指令,当一个SFU在进行运算的时候,可以将指令分发到其他的SFU处理单元。
●双精度设计Designed for Double Precision
Fermi的双精度浮点(FP64)性能也大幅度提升,峰值执行率可以达到单精度浮点(FP32)的1/2,而过去只有1/8,AMD现在也不过1/5,比如Radeon HD 5870分别为单精度2.72TFlops、双精度544GFlops。由于最终核心频率未定,所以暂时还不清楚Fermi的具体浮点运算能力(双精度预计可达624GFlops)。
双精度的浮点计算在高性能计算中有着核心的重要位置,在求解线性代数中,数值计算量子化学中都会需要双精度浮点运算。Fermi架构为支持双精度浮点运算进行了特别设计每一个SM在一个时钟周期内可以完成16个双精度浮点数的FMA操作。是在GT200架构以后又一激动人心的设计。
双精度运算中Fermi架构的性能提升
●快速原子内存操作
在多进程(线程)的操作系统中不能被其它进程(线程)打断的操作就叫原子操作,文件的原子操作是指操作文件时的不能被打断的操作。原子操作在并行计算中非常重要,它可以让线程对共享的内存结构做正确的读写操作。
原子操作包括add、min、比较和交换、读、修改和写操作,它们都不用打断其他的正在运行的线程。原子操作被大量使用在并行存储、缩减和并行的建立数据结构中,而不需要锁定线程的执行。
大量原子操作单元和L2缓存的使用,大大增强了FermiGPU架构中的原子操作能力。在相同位置的原子操作,Fermi的速度比GT200快20倍,连续的内存操作是GT200的7.5倍。
在GPU支持的内存寻址空间方面,GT80/GT200都是32-bit的,最多搭配4GB GDDR3显存,而Fermi一举支持64-bit寻址,即使实际寻址只有40-bit,支持显存容量最多也可达惊人的1TB,目前实际配置最多6GB GDDR5——仍是Tesla。
同时Fermi统一了寻址空间,简化为一种指令,内存地址取决于存储位置:最低位是本地,然后是共享,剩下的是全局。这种统一寻址空间是支持C++的必需前提。而以前的架构里多种不同载入指令,取决于内存类型:本地(每线程)、共享(每组线程)、全局(每内核)。这就和指针造成了麻烦,程序员不得不费劲清理。