2016-09-27 38 views
0

当使用SSE指令/内在函数(比如256位寄存器)时,任何人都可以通过使用下一个32字节块上的预取指令来减少从内存加载扩展寄存器所花的时间,或通过其他技术?假设要加载的数据已经在内存中正确对齐。SSE 4内存负载优化

+2

x86已经能够做到这一点 - 如果你正在获取一组特定的完全有序的项目(在逻辑内存中),那么这个数据可能会在'mov'之前找到它在L2高速缓存上。 –

+0

是“4”在你的标题“for”这个词的简写中?你似乎没有在谈论SSE4的[MOVNTDQA](http://www.felixcloutier.com/x86/MOVNTDQA.html)加载指令,或者其他任何与SSE4专门做的事情。 (256b向量是AVX功能)。 –

+0

我的目的有些模糊,因为我们仍在讨论需要特定指令集的商业影响。所以,我的问题更多地是通过询问关于通过宽寄存器减少内存延迟的一般准则。我应该更清楚。 – lhs

回答

0

有关x86 CPU性能的更多信息,请参阅标记wiki。硬件预取器非常适合锁定顺序访问模式,所以通常不需要软件预取指令。

通常它不是一个胜利,做一个宽矢量加载解压到单独的整数寄存器。一旦你触及一条缓存线,从它的更多负载便宜,并且从L1缓存到寄存器的吞吐量通常不是问题。使用ALU指令将256b负载解压为单独的32位或64位整数只需要更多指令,这意味着您更可能在ALU吞吐量方面遇到瓶颈。