- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试对执行图像处理的代码进行性能优化。例如,unsharp masking .它以光栅顺序对图像每个像素周围的正方形区域应用计算。
我想检查将几行图像复制到专用的“工作区”,同时绕过缓存是否会有帮助。这个想法是,图像中的数据不会从缓存中逐出其他有用的数据,这应该会提高性能。
如何实现不更新缓存的特殊形式的memcpy
?
我不使用 OpenCV,但如果它有这样的支持,我准备尝试一下。
我不想将整个图像标记为未缓存区域,因为我有很多算法在上面运行,我想衡量我的优化尝试对一种算法的影响。
最佳答案
完全按照您的意愿行事的方法是结合使用 MOVNTDQA 指令和 WC 内存类型。这从内存中读取到流加载缓冲区而不是缓存中。从流式加载缓冲区提供对同一流式传输线的后续流式加载。请参阅 SDM 第 1 卷中的第 12.10.3 节。此指令是随 SSE4.1 添加的。
其他引用资料:
https://software.intel.com/en-us/articles/copying-accelerated-video-decode-frame-buffers
https://www.embedded.com/print/4007238
(请注意,我还没有彻底阅读这些内容,所以我不知道它们有多大用处。)
请注意,MOVNTDQA 未针对来自其他核心的写入进行排序,但根据您的描述,这在您的情况下似乎不是问题。
您绝对不想使用 UC 内存类型,因为正如 Peter 所提到的,每次访问都会导致单独的 DRAM 读取,更糟糕的是,UC 访问是序列化的,破坏了代码中的任何并行性。
关于c++ - 如何在不污染缓存的情况下读取大量数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54953619/
我是一名优秀的程序员,十分优秀!