【发布时间】:2015-11-11 01:58:02
【问题描述】:
什么时候应该使用流媒体版本,什么时候使用 SSE2 与 _mm_load_si128?什么是性能权衡?
【问题讨论】:
标签: c++ intrinsics
什么时候应该使用流媒体版本,什么时候使用 SSE2 与 _mm_load_si128?什么是性能权衡?
【问题讨论】:
标签: c++ intrinsics
流式加载内在函数 (mm_stream_load_si128) “使用非临时内存提示”执行加载(根据 Intel Intrinsics Guide)。这意味着加载的值不会导致从缓存中清除任何内容。
如果您将要立即操作的大量数据组合在一起,并且“长时间”不再查看,这将非常有用。这通常发生在流操作期间。当我知道我正在对一个大型数据集执行一个简单的操作时,我就使用了它,我知道数据无论如何都会很快从缓存中被逐出。 memcpy 等操作也属于这一类。
非流式加载 (mm_load_si128) 将检索该值,并将受制于正常缓存规则。如果需要,它可能会逐出旧的缓存条目,并且能够从缓存中检索直到它被逐出。
如果您希望在正常缓存逐出发生之前再次使用数据,则首选非流式加载。如果您在大型数据集上操作,其中给定的数据在被踢出缓存之前预计不会再次被访问,则首选流式加载。
【讨论】: