Caching 写合并:写入前避免读取哪个缓存线?

Caching 写合并:写入前避免读取哪个缓存线?,caching,memory,x86-64,intrinsics,Caching,Memory,X86 64,Intrinsics,关于非时态写入和写入组合技术,我有以下代码 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[

关于非时态写入和写入组合技术,我有以下代码

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);
}
取自

据说

总而言之,此代码序列不仅可以避免读取缓存 在写入之前,它还可以避免使用 可能不会很快需要的数据。这会在未来带来巨大的好处 某些情况


我的问题是:避免写入哪个缓存线?存储i变量内容的缓存线或p指针指向的缓存线,如果目标地址不在缓存中,则流式传输可防止污染缓存,否则,它只会根据需要使用由该缓存线支持的地址写入的新值更新缓存


因此,在您的示例中,如果您没有从p中读取,或者您使用CLFLUSH从缓存中刷新了它,流式存储将防止数据写入p点指向的地址的缓存中,即:不会为写入的地址创建cachline。

如果目标地址尚未在缓存中,流式存储将防止污染缓存,否则,它只会根据需要使用由该缓存线支持的地址写入的新值更新缓存


因此,在您的示例中,如果您没有从p中读取,或者您使用CLFLUSH从缓存中刷新了它,流式存储将防止数据写入p指向的地址的缓存中,即:不会为写入的地址创建缓存线。

关于:避免在写入缓存线之前读取缓存线


此语句引用用于处理未命中缓存的写入的“写入分配”策略。所有现代x86处理器都这样做。它是这样的:软件使用普通mov指令写入内存。如果该地址已被缓存,则缓存将被更新,并且根本不存在DRAM访问。但是,如果数据不在缓存中,处理器将从DRAM读取该缓存线。然后,来自mov指令的数据被合并到缓存中的数据中。处理器将尽可能长时间延迟将数据写回DRAM。最终结果与直觉相反:软件执行写入mov指令,而单个DRAM读取突发结果。如果这种模式重复,缓存最终将变满,需要逐出来为读取腾出空间。在这种情况下,在读取软件正在写入的地址之后,将出现一个不相关缓存线地址的DRAM写入突发。这解释了为什么非时态存储的性能大约是填充大缓冲区性能的2倍。与使用mov填充缓冲区相比,只有一半的DRAM访问发生。

关于:避免在写入缓存线之前读取缓存线


此语句引用用于处理未命中缓存的写入的“写入分配”策略。所有现代x86处理器都这样做。它是这样的:软件使用普通mov指令写入内存。如果该地址已被缓存,则缓存将被更新,并且根本不存在DRAM访问。但是,如果数据不在缓存中,处理器将从DRAM读取该缓存线。然后,来自mov指令的数据被合并到缓存中的数据中。处理器将尽可能长时间延迟将数据写回DRAM。最终结果与直觉相反:软件执行写入mov指令,而单个DRAM读取突发结果。如果这种模式重复,缓存最终将变满,需要逐出来为读取腾出空间。在这种情况下,在读取软件正在写入的地址之后,将出现一个不相关缓存线地址的DRAM写入突发。这解释了为什么非时态存储的性能大约是填充大缓冲区性能的2倍。与使用mov填充缓冲区相比,只有一半的DRAM访问发生。

我知道了,但是它说这个代码序列不仅避免了在写入缓存线之前读取缓存线,这部分怎么办?您向我解释了它还可以避免用可能不需要的数据污染缓存的部分soon@JohnnyPauling:i将被分配到寄存器,这意味着生成的代码中没有内存加载,因此,当它使用时,它不会触发并缓存为它创建的行。我明白了,但是它说这个代码序列不仅避免了在写入之前读取缓存行,这一部分呢?您向我解释了它还可以避免用可能不需要的数据污染缓存的部分soon@JohnnyPauling:i将被分配到寄存器,这意味着生成的代码中没有内存负载,因此在使用时不会触发并缓存为其创建的行。