我有以下類型的代碼SIMD店延遲
short v[8] __attribute__ ((aligned(16)));
...
// in an inlined function :
_mm_store_si128(v, some_m128i_value);
... // some more operation (4 additions)
outp[0] = v[1]/2; // <- first access of v since the previous store
當我詮釋這個代碼PERF,這一條線上的佔18%,整個取樣 !當我說行時,它是在彙編級別,即從v計數移動到18%後立即執行的指令。
它是否是緩存未命中?我如何測試?
我並不真的需要存儲結果,但是我怎樣才能避免往返內存,並且仍然單獨訪問構成我的m128i值的8條短文。
更新: 如果我使用_mm_extract_epi16,那麼整體性能不會更好,但是等待會在每次訪問之間平均分配,而不是隻打到第一個。
你測試哪個CPU? –
core2duo家族,32位操作系統 – shodanex
您有存儲轉發問題。您可能會在英特爾優化手冊中看到詳細信息。總之,你可以嘗試去加載v的第一個雙字,並將它轉換成第二個單詞。 –