我刚刚阅读了AVX (Wikipedia),它让我想到了这个问题。
2 回答
我不确定您的问题是否完全清楚,但我想您是在问在执行单个 x86 指令时可以将多少数据传输到 L1 缓存或从 L1 缓存传输?
如果是这样,这是一个不恰当的问题。缓存结构,甚至缓存作为一个概念都不是 x86 规范的一部分。这意味着,答案完全取决于底层硬件。如果您想到了特定的处理器,您可能可以在数据表中找到答案。您正在寻找的是缓存块大小,因为缓存管理器喜欢一次写入和读取整个块。但是,x86 扩展(例如 AVX 和 SSE)中有专门处理大型内存事务的指令,它们可以根据需要/方便地写入或读取缓存。
您从未明确地读取或写入任何缓存级别,但是根据对您的意思的任何合理解释,在我看来,如果您从 L1$ 读取,则该值被读入寄存器,并且如果您'正在写入 L1$,值是从寄存器写入的,因此出于所有实际目的,基本答案始终是“您正在使用的寄存器的大小”作为相关架构指令的源/目标。
实际上,它比这要复杂一些,因为它取决于 MOB(内存顺序缓冲区)和 L1$ 之间的路径宽度,这是特定微架构的一个特征。最近,英特尔 CPU(例如 Core、Nehalem)有从 MOB 到 L1$ 的 128 位路径,但我不知道最新的(例如 Haswell)是否已将其提升到 256 位以匹配 AVX 寄存器大小。这是一种可能性。另一个是 256 位 AVX 寄存器的单个架构存储可能在后端解码为两个 128 位微操作(微操作)。对于 Sandy 和 Ivy Bridge 来说,后者似乎更有可能,因为“双联”使用两个 128 位执行单元来实现 256 位 AVX 操作。我对 Haswell 微架构的了解还不够,无法推测它可能会做什么。