双通道内存有什么优点和缺点?

双通道内存有什么优点和缺点?

优点:

缺点:主板布线复杂。

带宽翻倍这事情,并不如一般人想象中那么厉害——因为延迟并没有改变。

以DDR4 2666内存为例,DRAM颗粒频率333.33MHz,8n预取,位宽64bit。按照JEDEC标准的CL19计算,每个内存时钟周期3ns,不考虑其它因素,从CPU发送指令到传输数据,需要3×19=57ns。虽然内存理论上支持按字节访问,然而现代CPU都有多级缓存,只有缓存命中失败的时候才访问内存——并且每次访问最少替换一个Cache Line,大小为64Byte。而单通道DDR4内存传输64字节只需要一个内存时钟周期:64bit就是8字节,8n预取就是8×8=64字节,也就是3ns。如果需要一次性传输4个Cache Line,单通道需要57+3×4=69ns;双通道需要57+3×4÷2=63ns,性能提高9.52%——远低于带宽提升的100%。

可能有人觉得9.52%也不少了,然而前提是你需要保证需要替换的4个Cache Line对应的地址刚好平均分布在两个通道上——实际情况是:

综合计算下来,平均性能提升进一步降低到5.75%。

然而这不是最终性能提升,相对于CPU来说内存的性能是如此的低——57ns的延迟,对于4GHz的CPU来说就是228个时钟周期。因此CPU有大量的机制来降低这个影响,除了多级缓存外,还有指令/数据预取、乱序执行等。现代CPU的缓存命中率是相当高的,虽然根据不同应用不同场景有所不同,但三级缓存命中率在95%以上是相当常见的。虽然不能直接按照5.75%×0.05来算,因为95%命中的L3访问延迟比内存访问延迟低的多。例如Skylake的L3延迟最短是42个时钟周期,对于4GHz CPU来说就是10.5ns。如果不考虑L1/L2命中率和指令执行时间,这个性能提升会降低到1.42%。

当然,上面是仅仅就4个Cache Line替换的情况来计算,如果是进行大量的数据处理,缓存数据需要大量的迅速替换的场景,内存带宽提升带来的性能提升还是比较明显的。但这个即使是相同的应用相同的场景,不同版本也是不同的。某些应用可能原来比较依赖内存带宽,对预取机制进行优化后很可能就是另一种情况了。

现代计算机中有多个设备都需要访问内存数据,例如CPU的多个核心、核显、各种支持DMA(Direct Memory Access,直接内存访问)的IO设备如独立显卡、硬盘控制器、网卡等。在一个设备A读写内存时,如果有另外一个设备B需要访问另一个内存地址,单通道内存就必须等前面的访问结束后才能访问;双通道的话,如果设备B访问的地址正好在另外一个通道上,则可以马上进行访问无需等待。

这是为什么双通道对于核显性能影响比较明显的原因——大部分核显并没有独立显存,也是通过内存控制器访问内存作为显存读写数据,如果这个时候CPU需要访问内存需要等待核显访问结束;反之亦然。Intel最新的Ice Lake的内存控制器从之前的2×64bit新增4×32bit模式,也是出于这个考虑,毕竟Ice Lake的Gen11核显性能更强大,读写内存更为频繁,更容易和CPU冲突。

而独立显卡虽然有自己独立的显存,访问内存没有核显那么频繁,但独显工作往往是在运行大型游戏或者一些大数据量的运算,也更容易和CPU发生内存访问冲突。因此在很多大型游戏中,低分辨率下性能瓶颈不在显卡的时候,双通道内存对帧速的影响可能会比较明显。此外,大部分游戏笔记本上,虽然有独立显卡进行画面渲染,但游戏画面是通过核显输出到内置屏幕中,独显与核显之间也是通过内存交换数据的,更容易和CPU发生内存访问冲突,因此游戏本玩游戏的时候,双通道的性能提升会更明显一些。说句题外话,某些笔记本支持独显直接输出到内置屏幕如ROG冰刃、联想拯救者2019,或者其它型号可以通过独显直接输出到外置屏幕的时候,性能也有一定幅度提升。

不过双通道内存可以缓解内存访问冲突的前提是双通道运行在Unganged模式(两个独立的64bit位宽的内存通道),如果是两个64bit位宽通道合并为一个128bit位宽的Ganged模式,物理内存地址每8个字节交错分布的话,是无法获得这个优势的,因为几乎所有的内存访问都需要两个内存通道处理。两种模式区别如下图所示:

Ganged模式的优势在于即使是单个Cache Line替换的64bit访问,也能获得双通道的带宽优势。也就是说几乎任何情况下,在前面4个Cache Line替换的性能计算中都可以直接使用9.52%来计算,最终结果是2.29%。

内存通道是现代电脑上唯一保留的高速并行总线了,CPU对外的其它总线现在都是串行总线,如连接显卡的PCIe总线、连接芯片组的DMI总线、CPU之间互联的QPI/UPI总线、连接外置设备的USB总线、连接硬盘的SATA/SAS总线都是串行总线。

并行总线本来就不利于布线,因为并行的多根线路上的信号需要同步。事实上现在的DDR4内存,因为DDR~DDR4都是双倍速率,因此总线频率减半。JEDEC标准的DDR4最高规格是DDR4 3200,总线频率才1600 MHz。作为对比,PCIe 3.0总线频率是8GT/s,PCIe 4.0是16GT/s;连接外置设备的USB 3.0是5 GT/s,都远高于内存总线的频率。原因就在于64根内存总线信号同步难度太高。主板上内存插槽附近有大量的蛇形走形,就是为了保证64根总线的导线长度一致。随便从炮村找张主板内存的特写图:

而双通道共计128根数据通道的信号同步难度自然就更高了。不过其实对消费者来说问题不大,这是主板厂商的事。

不过如果用户想要对内存超频的话,双通道会比单通道难,这个就不展开了。