流式处理加载和非 USWC 内存

streaming loads and non USWC memory

本文关键字:USWC 内存 加载 处理      更新时间:2023-10-16

我刚刚读了这篇相当有趣的文章,复制加速视频解码帧缓冲区。

他们解释了如何使用流式加载尽可能快地从 USWC 内存进行复制。

我的问题是为什么这种技术不能从非 USWC 内存中加速正常副本?

流式加载将一次性读取整个缓存行,而不是一次仅加载 16 字节的常规加载。我错过了什么?从填充缓冲区复制到将写入缓存的"缓存缓冲区"不会有太大的开销,不是吗?

来自 http://software.intel.com/en-us/articles/increasing-memory-throughput-with-intel-streaming-simd-extensions-4-intel-sse4-streaming-load/

"流加载指令旨在加速来自USWC内存类型的数据传输。对于其他内存类型,如可缓存 (WB) 或不可缓存 (UC),该指令的行为类似于典型的 16 字节 MOVDQA 加载指令。但是,未来的处理器可能会使用其他内存类型(如WB)的流加载指令作为提示,即预期的缓存行应从内存直接流式传输到内核,同时最大限度地减少缓存污染。

也就是说,"正常"内存是WB,因此与正常加载/存储相比,使用非时间加载/存储没有任何优势。此外,对于普通的可缓存内存,缓存行的第一次加载会将整个缓存行拉入 L1,类似于第一次非临时加载将整个缓存行拉入特殊的"非临时缓冲区"。

正如上面引用的那样,未来的处理器可能会使用非临时加载/存储作为提示,以免污染缓存。在某些情况下,这可能是一个好主意,但对于通用 memcpy() 实现来说可能不是正确的选择?