我什么时候应该使用流媒体版本以及何时使用SSE2和_mm_load_si128?什么是表现权衡?
答案 0 :(得分:5)
流媒体负载固有(mm_stream_load_si128
)执行加载"使用非时间内存提示" (根据Intel Intrinsics Guide)。这意味着加载的值不会导致任何内容从缓存中逐出。
如果您要将大量数据组合在一起以便立即进行操作,而不是再次查看" long"时间。最常见的情况是在流操作期间发生。当我知道我在大型数据集上执行简单操作时,我已经使用过它,我知道数据很快就会从缓存中逐出。 memcpy
等操作也属于此类别。
非流式加载(mm_load_si128
)将检索该值,并且它将受到正常缓存规则的约束。如果需要,它可以驱逐旧的缓存条目,并且可以从缓存中检索,直到被驱逐为止。
如果您希望在发生正常的缓存逐出之前再次使用数据,则首选非流式加载。如果您在大型数据集上进行操作,在该数据集中,在将某个数据块从高速缓存中踢出之前不会再次访问该数据集,则首选流式负载。