当字大小改变时,数据总线宽度大小会改变吗?
我认为它会改变,因为数据总线宽度通常是字大小的倍数。因此,如果字长发生变化,数据总线宽度也会发生变化。
我说错了吗?
答案 0 :(得分:1)
不一定。 8086/8088的字大小都是16位。 8086的数据总线为16位,但8088只有8位。 80186/80188和80386 / 80386SX相似。
答案 1 :(得分:1)
是的,如果您使用9位字节/ 36位" dword"制作了x86的变体,那么它的内部和外部总线将是它的倍数而不是64位的倍数。
但否则不行,字大小与内部/外部总线宽度之间的比率是灵活的。当你扩大各种公共汽车或增加字数时,你可以让这个比例发生变化" (或非整数寄存器的寄存器宽度)。
x86 since P5 Pentium is architecturally required have atomic 64-bit loads/stores for aligned pointers.到目前为止,最简单的方法是使用64位/ 128位/ 256位/ 512位数据总线。英特尔能够在P5中基本上免费提供原子性保证,因为它们将外部和内部数据总线扩展到64位。所以即使对于" 32位"如果想要与Pentium兼容,那一代的x86 CPU,32位总线不是一个选择。
现代x86 CPU具有高达512位(64字节)宽的内部数据路径。例如Skylake在L2和L1缓存之间有一个64字节宽的路径。 Skylake-AVX512具有64字节加载/存储单元。即它可以一次加载/存储整个缓存行。 (外部数据总线是64位DDR3 / 4 DRAM,可以对整个64字节高速缓存线进行突发传输。当然,对于非DRAM访问,传输通过PCIe进行传输)
Sandybridge / Ivybridge将AVX 256位加载/存储为两个128位(16字节)的两半,因为从执行单元到L1D的数据路径只是寄存器大小的一半。见How can cache be that fast?
AMD推土机系列和Ryzen将所有256位操作分成128位,因此它实际上是两个独立的加载到两个独立的向量寄存器中,这些寄存器被视为一个架构YMM寄存器。这与SnB / IvB不同,其中vaddps ymm
是单个uop,只是加载/存储在加载/存储执行单元中需要两个周期,因为总线不像物理登记。
具有不同的FPU和SIMD寄存器宽度,整数寄存器宽度和"字大小"没有以前那么有意义!相同的概念适用,但它只是注册宽度而不是"字大小"这很重要。