英特尔的Haswell(或至少包含Iris Pro 5200 GPU的那些产品)以及IBM的POWER7和POWER8都包含嵌入式DRAM,即“ eDRAM”。
导致eDRAM直到最近才普遍出现的一个重要问题是DRAM的制造过程与逻辑过程本身并不兼容,因此当需要eDRAM时,必须包括额外的步骤(这会增加成本并降低成品率)。因此,必须有一个令人信服的理由要合并它,以抵消这种经济上的不利影响。另外,也可以将DRAM放置在独立的芯片上,该芯片独立于CPU制造,然后集成到与CPU相同的封装中。这提供了本地化的大多数好处,而没有以真正的集成方式制造两者的困难。
另一个问题是,DRAM与SRAM不同,它在通电时不会无限期地存储其内容,读取它也会破坏存储的数据,然后必须将其写回。因此,必须定期且在每次读取后刷新它。而且,由于DRAM单元是基于电容器的,因此对其进行充分的充电或放电,以使泄漏不会在下次刷新之前花费有限的时间之前破坏其值。SRAM只是一个锁存器,不需要此充电时间。因此,它的时钟频率可以与CPU相同,而DRAM被限制在大约1 GHz,同时保持合理的功耗。这导致DRAM具有比SRAM更高的固有延迟,这使得除最大的高速缓存之外的所有缓存都无法使用,降低的未命中率将得到回报。
同样,就等待时间而言,困难的很大一部分是信号必须传播的物理距离。在3 GHz CPU的时钟周期内,光只能传播10厘米。当然,由于需要缓冲和扇出,信号不会在裸片上沿直线传播,也不会以接近光速的速度传播,这会导致传播延迟。因此,为了保持1个时钟周期的等待时间,内存与CPU的最大距离最多为几厘米,从而限制了可容纳在可用区域中的内存量。与Penryn相比,Intel的Nehalem处理器实际上减少了L2缓存的容量,从而部分地改善了延迟,从而提高了性能。*如果我们不太在意延迟,那么就没有理由将内存放在包装上,
还应注意,对于大多数工作负载,高速缓存命中率非常高:在几乎所有实际情况下,缓存命中率都远远超过90%,甚至在99%以上也不罕见。因此,将更大的内存包含在芯片上的好处本质上仅限于减少这百分之几的未命中的影响。面向企业服务器市场的处理器(例如POWER)通常具有巨大的缓存,并且可以从eDRAM中获利,因为它可以容纳许多企业工作负载的大型工作集。Haswell有它支持GPU,因为纹理很大并且无法容纳在缓存中。这些是当今eDRAM的用例,而不是典型的台式机或HPC工作负载,典型的缓存层次结构可以很好地满足这些需求。
要解决评论中提出的一些问题:
这些eDRAM缓存不能用作主内存,因为它们被设计为L4受害缓存。这意味着它们是易失性的,并且可以有效地进行内容寻址,因此存储在它们中的数据不会被视为驻留在任何特定位置,并且可以随时丢弃。这些属性很难与RAM进行直接映射和持久化的要求相一致,但是更改它们会使高速缓存无法达到其预期目的。当然,可以像在微控制器中那样嵌入更常规设计的存储器,但这对于具有大容量存储器的系统来说是不合理的,因为低延迟在主存储器中不如在高速缓存中那样有利,因此扩大了或添加缓存是更值得的建议。
至于容量可能达到千兆字节的超大型缓存的可能性,则仅要求缓存最大为应用程序工作集的大小即可。HPC应用程序可以处理TB级数据集,但是它们具有良好的时间和空间局部性,因此它们的工作集通常不是很大。具有较大工作集的应用程序是例如数据库和ERP软件,但是针对此类工作负载进行了优化的处理器的市场有限。除非软件真正需要它,否则添加更多缓存会非常迅速地减少回报。最近,我们看到处理器获得了预取指令,因此可以更有效地使用缓存:可以使用这些指令来避免由于内存访问模式的不可预测性(而不是工作集的绝对大小)而导致的未命中,
*延迟的改善不仅是由于缓存的物理尺寸较小,而且还因为关联性降低了。由于多种原因,Nehalem中的整个缓存层次结构发生了重大变化,并非所有原因都集中在提高性能上。因此,尽管这足以作为示例,但它不是一个完整的说明。