2016-09-27 39 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吞吐量方面遇到瓶頸。