Intel 的 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 相比,英特尔的 Nehalem 处理器实际上降低了 L2 缓存的容量,部分原因是为了改善其延迟,从而带来更高的性能。* 如果我们不太关心延迟,那么就没有理由将内存放在封装上,
还应该注意的是,大多数工作负载的缓存命中率非常高:在几乎所有实际情况下都远高于 90%,甚至超过 99% 的情况也不少见。因此,在芯片上包含更大内存的好处本质上仅限于减少这百分之几的未命中的影响。用于企业服务器市场的处理器(例如 POWER)通常具有巨大的缓存,并且可以有利地包括 eDRAM,因为它对于容纳许多企业工作负载的大型工作集很有用。Haswell 有它来支持 GPU,因为纹理很大并且无法容纳在缓存中。这些是当今 eDRAM 的用例,而不是典型的高速缓存层次结构很好地服务于典型的桌面或 HPC 工作负载。
为了解决评论中提出的一些问题:
这些 eDRAM 高速缓存不能用于代替主存储器,因为它们被设计为 L4 受害者高速缓存。这意味着它们是易失的并且是有效的内容可寻址的,因此存储在其中的数据不会被视为驻留在任何特定位置,并且可能随时被丢弃。这些属性很难与 RAM 直接映射和持久化的要求相协调,但更改它们会使缓存无法达到预期目的。当然可以嵌入更传统设计的存储器,就像在微控制器中所做的那样,但这对于具有大存储器的系统是不合理的,因为低延迟在主存储器中不如在高速缓存中有益,因此扩大或者添加缓存是一个更有价值的提议。
至于具有千兆字节量级容量的超大缓存的可能性,缓存只需要最多为应用程序工作集的大小。HPC 应用程序可以处理 TB 数据集,但它们具有良好的时空局部性,因此它们的工作集通常不是很大。具有大型工作集的应用程序例如数据库和 ERP 软件,但针对此类工作负载优化的处理器市场有限。除非软件真的需要它,否则添加更多缓存会带来非常迅速的收益递减。最近我们看到处理器获得了预取指令,因此可以更有效地使用缓存:可以使用这些指令来避免由于内存访问模式的不可预测性而不是工作集的绝对大小而导致的未命中,
*延迟的改善不仅是由于缓存的物理尺寸更小,还因为关联性降低了。由于几个不同的原因,Nehalem 中的整个缓存层次结构发生了重大变化,并非所有这些都专注于提高性能。因此,虽然这足以作为示例,但它并不是一个完整的帐户。