SIMD固有和内存总线大小 - CPU如何在单个内存中获取所有128/256位



你好论坛 - 我有一些有关SIMD内在的类似/相关的问题,我在线搜索了其中包括stackoverflow,但没有找到好的答案,因此请求您的帮助。

基本上,我试图了解64位CPU如何在单个读取中获取所有128位,而对此类操作的要求是什么。

  1. CPU将在单个内存操作中从内存中获取所有128位,还是会进行两个64位读取?
  2. CPU是否需要一定的内存总线大小,例如,对于64位CPU,英特尔是否需要128位总线来进行SSE内存绑定操作?
  3. 这些操作是否取决于内存总线大小,通道数量和内存模块数量?

加载/商店不会直接转到到存储器(除非您在不可移动的内存区域上使用它们)。甚至NT商店都进入了写入组合的补充缓冲区。

负载/商店在执行单元和L1D缓存之间进行。CPU在内部具有从缓存到执行单元以及从L1D到外部缓存的广泛数据路径。看到卡奇怎么会这么快?关于电子ivybridge。

例如。IVB在执行单元和L1D之间具有128B数据路径。哈斯韦尔将其扩大到256位。只要不越过高速线边界,未对齐的负载/商店就具有完整的性能。Skylake-avx512将其扩大到512位,因此可以在单个时钟周期内进行2个64字节的负载和64字节的商店。(只要数据在L1D缓存中很热)。

AMD CPU在128B块中包括Ryzen手柄256B矢量(即使在执行单元中,与奔腾M之后的Intel不同)。较旧的CPU(例如Pentium III和Pentium-M)将128B载荷/商店(和Vector Alu)分为两个64位的半部分,因为它们的负载/存储执行单元只有64位宽。

>

内存控制器是DDR2/3/4。公共汽车的宽度为64位,但使用突发模式,突发大小为64个字节(偶然地,是缓存线的大小。)

是" 64位"CPU与任何内部或外部数据总线的宽度无关。过去,该术语确实被用于其他CPU,但即使是P5 Pentium也有64位数据总线。(在p5的距离上,确保原子的8字节负载/商店可以保证原子质,例如x87或mmx。)64位在中,案例指的是指针的宽度和整数寄存器的宽度。。P>


进一步阅读:

  • David Kanter的Haswell Deep Dive比较了Haswell vs. SNB内核中的数据路径宽度。

  • 每个程序员对内存都应该了解的知识(但请注意,许多软件挑选内容都过时了,现代CPU的HW预赠器比Pentium4更好)。仍然必不可少的阅读,特别是如果您想了解CPU如何连接到DDR2/3/4内存。

  • x86标签Wiki中的其他性能链接。

  • 增强了有关memcpy的REP MOVSB,以获取有关X86内存带宽的更多信息。特别注意,单线程带宽可以受到max_concurrency/Latency的限制,而不是由DRAM控制器,尤其是在多核Xeon上(L3/Memory的延迟更高)。

相关内容

  • 没有找到相关文章

最新更新