关于非临时写和写结合的技术,我已经将它写在写入组合:避免在写入之前读取哪条缓存行?
总结如下代码
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