關於非臨時寫和寫結合的技術,我已經將它寫在寫入組合:避免在寫入之前讀取哪條緩存行?
總結如下代碼
void setbytes(char *p, int c) { __m128i i = _mm_set_epi8(c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c); _mm_stream_si128((__m128i *)&p[0], i); _mm_stream_si128((__m128i *)&p[16], i); _mm_stream_si128((__m128i *)&p[32], i); _mm_stream_si128((__m128i *)&p[48], i); }
從here
拍攝,該代碼序列不僅避免在讀取高速緩存 線被寫之前,它也避免了污染緩存,這可能不是可能很快就需要 數據。這在 某些情況下可以有很大的好處。
我的問題是:避免其高速緩存行寫?用於存儲i變量或p指針指向的緩存行的內容的緩存行(之後會被修改)?
我得到的,但關於它說:「這個代碼序列,不僅可避免在讀取高速緩存線被寫之前」的部分是什麼?你向我解釋了這部分「它也避免了可能不需要的數據污染緩存」 – 2013-03-22 21:36:50
@JohnnyPauling:'i'將被分配給一個寄存器,這意味着生成的代碼中沒有內存負載,因此它在使用時不會觸發並緩存爲其創建的行。 – Necrolis 2013-03-23 05:27:40
你說得對,謝謝你向我解釋:D – 2013-03-23 10:02:15