单个x86指令读取或写入L1缓存的最大数据量是多少?

时间:2014-03-06 17:25:22

标签: assembly x86 sse avx avx2

我刚读了AVX (Wikipedia),它就把这个问题带到了我的脑海里。

2 个答案:

答案 0 :(得分:3)

我不确定你的问题是否完全清楚,但我想你在询问执行单个x86指令时可以向L1缓存传输多少数据?

如果是这样,那就是一个不好的问题。缓存结构,甚至作为概念的缓存都不是x86规范的一部分。这意味着,答案完全取决于底层硬件。如果您有一个特定的处理器,您可以在数据表中找到答案。您正在寻找的是缓存块大小,因为缓存管理器喜欢一次写入和读取整个块。但是,x86扩展中的指令(例如AVX和SSE)专门处理大内存事务,并且可以根据需要/方便地写入或读取缓存。

答案 1 :(得分:1)

您从未明确地读取或写入任何缓存级别,但根据您的意思,在我看来,如果您从L1 $读取,则该值将被读入寄存器,如果您正在写入L1 $,则该值是从寄存器写入的,因此,出于所有实际目的,基本答案始终是“您正在使用的寄存器的大小”作为架构指令的源/目标问题。

实际上,它有点复杂,因为它取决于MOB(内存顺序缓冲区)和L1 $之间路径的宽度,这是特定微体系结构的一个特征。最近,英特尔CPU(例如Core,Nehalem)拥有从MOB到L1 $的128位路径,但我不知道最新的(例如Haswell)是否已经将其增加到256位以匹配AVX寄存器大小。这是一种可能性。另一个是256位AVX寄存器的单个架构存储可能会在后端解码为两个128位μop(微操作)。由于使用两个128位执行单元实现256位AVX操作的“双联”,后者似乎更有可能用于Sandy和Ivy Bridge。我不太了解Haswell微体系结构,以推测它可能会做什么。