首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不污染缓存的情况下读取大量数据?

如何在不污染缓存的情况下读取大量数据?
EN

Stack Overflow用户
提问于 2019-03-01 23:18:43
回答 1查看 148关注 0票数 1

我正在尝试对我的代码进行性能优化,该代码负责图像处理。例如,不清晰掩蔽。它按栅格顺序对图像的每个像素周围的正方形区域进行计算。

我想检查一下,在绕过缓存的同时,将图像的几行复制到一个专用的“工作区”是否有帮助。其思想是,来自图像的数据不会从缓存中排除其他有用的数据,这将提高性能。

如何实现一种不更新缓存的特殊形式的memcpy

我不使用OpenCV,但是如果它有这样的支持,我已经准备好尝试了。

我不想把整个图像标记为一个未处理的区域,因为我有很多算法在上面运行,我想测量我的优化尝试对一个算法的影响。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-02 01:56:16

完全按照您的要求进行操作的方法是结合WC内存类型使用MOVNTDQA指令。这将从内存中读取到流加载缓冲区,而不是缓存中。从流负载缓冲器提供到同一流行的后续流负载。见“可持续发展机制”第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访问正在序列化,破坏代码中的任何并行性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54953619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档