SIMD内在函数:_mm_stream_load_si128 vs _mm_load_si128

时间:2015-08-18 08:20:57

标签: c++ intrinsics

我什么时候应该使用流媒体版本以及何时使用SSE2和_mm_load_si128?什么是表现权衡?

1 个答案:

答案 0 :(得分:5)

流媒体负载固有(mm_stream_load_si128)执行加载"使用非时间内存提示" (根据Intel Intrinsics Guide)。这意味着加载的值不会导致任何内容从缓存中逐出。

如果您要将大量数据组合在一起以便立即进行操作,而不是再次查看" long"时间。最常见的情况是在流操作期间发生。当我知道我在大型数据集上执行简单操作时,我已经使用过它,我知道数据很快就会从缓存中逐出。 memcpy等操作也属于此类别。

非流式加载(mm_load_si128)将检索该值,并且它将受到正常缓存规则的约束。如果需要,它可以驱逐旧的缓存条目,并且可以从缓存中检索,直到被驱逐为止。

如果您希望在发生正常的缓存逐出之前再次使用数据,则首选非流式加载。如果您在大型数据集上进行操作,在该数据集中,在将某个数据块从高速缓存中踢出之前不会再次访问该数据集,则首选流式负载。