通过了解不同的成千上万的应用程序,我们发现shared memory可以解决议部分程序的问题,但是不能解决所有的问题。一些应用程序天然的就需要共享内存,有些应用程序需要cache,有的既需要shared memory也需要cache。优化的内存设计可以既提供shared memory也提供cache,可以让程序员根据自己的需求来做选择。Fermi的架构可以支持两种需求。
在Fermi的架构中,每个SM都包含64KB的高速RAM,可以配置为48KB的共享内存和16KB的L1缓存,也可以配置为16KB的共享内存和48KB的L1缓存。当使用48KB的共享内存的时候,程序可以动态的分配内存,(像electrodynamic的模拟)可以让程序有三倍性能的提升。有的程序访问的地址不是预先分配的,48KB的L1缓存就可以更好的支持直接访问DRAM的程序。 两种情况的配置,L1缓存都可以增加临时寄存器的使用,以避免溢出。以前的GPU架构都是直接把寄存器分配到对应的DRAM增加了访问的延迟。通过L1缓存,更好的支持了临时寄存器的使用。 Fermi有768KB的统一的L2缓存,可以支持所有的存取和纹理操作。L2缓存和所有的SM都相通。L2提供有效和高速的数据支持。有些算法不能在运行前就确定下来,像一些物理问题,光线跟踪,稀疏矩阵乘法,尤其需要缓存的支持。过滤器和转换器需要所有的SM都去读取相同数据的时候,缓存一样会有很大的帮助。
Fermi是第一款支持内存错误检查和修复(ECC)的CPU架构。在使用FPU做大数据量的处理和高性能计算的时候,ECC是有大量的需求。在医疗图像处理和大型集群中ECC是特别有需要的特性。
正常情况下的内存位的存储错误,都会引起软件的错误。ECC就是在上述错误没有多系统造成影响的情况下,用来检查和纠正这样的错误。由于这样的错误会根据系统的增大线性的增加,ECC就成为大型集群中必不可少的需求。