2014-01-28 61 views
0

假設我有兩個數組結構(結構具有相同的類型,大小,字段偏移量等),並且我想將第一個數組中的所有結構的第一個字段複製到結構的第一個字段中第二個陣列。受歡迎的CPU/CPU指令集是否支持分步數據訪問?

現代英特爾,AMD,ARM和其他CPU是否支持這些操作,而不是通過對每個相應結構對的加載和存儲指令序列進行操作?

如果答案是「是」,那麼怎麼樣的情況,其中,目標結構具有相同的類型,規模和領域(即當源數據步幅的不同,除目標數據步幅,但都知道)?

回答

1

沒有特殊的加載/存儲指令,但硬件預取機制將檢測到stripped訪問並在檢測到模式(並假設有空閒帶寬)時開始自動預取。

+0

那麼,如果我的數組是一百萬個元素,我仍然需要循環超過一百萬個元素。亂序執行和預取可能對我有些幫助,但只有這麼多。 – einpoklum

+0

AVX-512對分散/聚集的支持可能允許這樣做是矢量化的,但加載/存儲端口數仍然會限制吞吐量。如果AoS可以在不干擾普通操作的情況下作爲陣列結構進行改造,那麼這種複製將變得簡單;但據推測OP已經知道這一點。 –