SIMD intrinsics: _mm_stream_load_si128 vs _mm_load_si128

SIMD intrinsics: _mm_stream_load_si128 vs _mm_load_si128

本文关键字:load si128 mm vs intrinsics stream SIMD      更新时间:2023-10-16

我什么时候应该使用流媒体版本,当SSE2 vs _mm_load_si128?性能权衡是什么?

流加载内部(mm_stream_load_si128)执行加载"使用非临时内存提示"(根据Intel intrinsic Guide)。这意味着加载的值不会导致从缓存中删除任何内容。

如果你将大量的数据聚集在一起,你将立即对这些数据进行操作,并且在很长一段时间内不会再查看这些数据,这是很有用的。这通常发生在流操作期间。当我知道我要对一个大数据集执行一个简单的操作时,我就会使用它,因为我知道数据无论如何都会很快从缓存中取出。memcpy等操作也属于这一类。

非流负载(mm_load_si128)将检索该值,并且它将服从正常的缓存规则。如果需要,它可以清除旧的缓存条目,并且可以从缓存中检索,直到它被清除。

如果您希望在正常的缓存清除发生之前再次使用数据,则首选非流加载。如果您正在操作一个大数据集,其中给定的数据块在被踢出缓存之前不会被再次访问,则首选流加载。