对于非常低端的CPU来说,拥有比CPU更快的内存是愚蠢的,因为更快的内存更昂贵,而且您正在为无法使用的功能付费。
DDR5-6400的传输速率约为73.57 GB/s;这是73×109 bs。你可能认为,现代5Ghz芯片的单核需要5×109Bs,但这是错误的。首先,大多数操作数都是4个字节长,因此我们使用20×109Bs。这只是数据。对于x64,指令是长字节序列(我们需要8个字节来保存一个地址!)我不知道平均指令长度,所以我给出了几个值作为比较。一个典型的指令可以在一个时钟周期内执行。
- Avg Len Clock B/s
- 10 5*10^9 5*10^10
- 12 5*10^9 6*10^10
- 14 5*10^9 7*10^10
一个现代的CPU每个时钟周期可能会发出多达6个指令,所以我们有:
- Avg Len Clock Concurrency B/s
- 10 5*10^9 6 30*10^9 (3 * 10^10)
- 12 5*10^9 6 36*10^9 (3.6 * 10^10)
- 14 5*10^9 6 42*10^9 (4.2 * 10^10)
因此,我们现在正在研究能够将7.3×1010Bs交付给只需要3×1010Bs到4.2×1010Bs的CPU的内存。但这只是传递指令。我们有2×109潜在的数据字节。
我又撒了些谎。这是每核。8个核需要8倍的内存带宽,所以是24×1010Bs或2.4×1011Bs。所以我们现在将7.3×1010Bs内存带宽与2.4×1011Bs消耗进行比较。内存比电脑慢三倍。情况可能比这更糟。考虑一下12核或16核处理器。考虑到下一代(我已经记不清了,它可能已经在这里了)正在关注9条指令并发。我在20世纪70年代经常担心这个问题,在21世纪10年代就不太担心了,现在是21世纪20年代,我仍然不担心。内存远远落后于cpu。我们欺骗,用两到三层缓存,所以CPU看不到多少真正的内存延迟。但如果我知道缓存算法,我可以打败它,得到一个病态的程序,不断搅动缓存。我可能会损失20倍的性能,因为我可以强制CPU以内存速度运行。