首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >了解CPU是如何决定什么加载到缓存内存中的

了解CPU是如何决定什么加载到缓存内存中的
EN

Stack Overflow用户
提问于 2013-09-02 08:32:22
回答 1查看 2.3K关注 0票数 7

假设一台计算机有64k的L1缓存和512 K的L2缓存。

程序员已经在主存中创建/填充了一个数组,例如10 3d的数据(例如,3D模型的顶点/索引数据)。

数组可能包含一系列结构,如:

代码语言:javascript
复制
struct x
{
  vec3 pos;
  vec3 normal;
  vec2 texcoord;
};

接下来,程序员必须对所有这些数据执行一些操作,例如,在将数据传递到GPU之前执行一次常规计算。

CPU如何决定如何将数据加载到L2缓存中?

程序员如何检查缓存行对于任何给定体系结构的大小?

程序员如何确保将数据组织成适合高速缓存行的数据?

数据对齐到字节边界是唯一可以帮助这个过程的事情吗?

程序员能做些什么来减少缓存丢失呢?

有哪些分析工具可以帮助可视化windows和linux平台的优化过程?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-02 09:12:53

这里有很多问题,所以我会保持简短的回答。

CPU如何决定如何将数据加载到L2缓存中?

不管你用什么,都要上膛。L2的行为与L1一样,只是有更多的,混叠(这可能导致提前驱逐)更常见,因为更大的线条和较少的集合相联性。有些CPU只加载L2中的数据,这些数据正被从L1中排挤出来,但对程序员并没有太大的影响。

大多数MMU都有用于非缓存内存的工具,但这是用于设备驱动程序的。我不记得曾经看到过禁用L2而不禁用L1的选项。没有缓存,就没有性能。

程序员如何检查缓存行对于任何给定体系结构的大小?

通过查阅用户手册。有些操作系统提供了像sysctl这样的查询工具。

程序员如何确保将数据组织成适合高速缓存行的数据?

关键思想是空间局部性。同时,通过相同的内环访问的数据应该进入相同的数据结构。最佳组织是将该结构安装到缓存线上,并将其与缓存行大小对齐。

除非你仔细地使用你的分析器作为向导,否则不要惹麻烦。

数据对齐到字节边界是唯一可以帮助这个过程的事情吗?

不,另一部分是避免用无关的数据填充缓存。如果某些字段仅供其他算法使用,则在当前算法运行时,它们正在浪费缓存空间。但是,您不可能一直优化所有的东西,重新组织数据结构需要编程的努力。

程序员能做些什么来减少缓存丢失呢?

使用真实世界的数据进行概要分析,并将过多的错误视为错误.

有哪些分析工具可以帮助可视化windows和linux平台的优化过程?

Cache差使很不错,但使用了虚拟机。英特尔V调使用你的实际硬件,无论好坏。我还没用过后者。

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

https://stackoverflow.com/questions/18568768

复制
相关文章

相似问题

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