繁体   English   中英

内存对齐与页面对齐

Memory Alignment vs Page Alignment

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我们经常听到将变量与内存中的N字节边界对齐可以提高性能(通过防止CPU不得不将两个单独的“字”加载到缓存中来读取变量)。

另一方面,我们还(很少)听到将大块内存(数组/缓冲区)与一个不错的,2的整数次幂地址对齐可能是不好的,因为将内存地址分配给缓存地址的哈希函数是不再统一(这称为页面对齐)。

因此,我的问题是,关于何时应故意错位数据以避免页面对齐的问题是否存在某种规则或阈值点; 何时不使用,以获得标准内存对齐的好处?

2 个回复

我认为您无法为此获得一般规则。 这取决于您使用的处理器,即基础系统的MMU和缓存实现。 这将因系统而异。 因此,如果要获得最佳性能,则需要了解当前系统的所有底层细节。 通常,我希望将大内存块对齐到2的幂的边界的好处是有限的。

如果性能对于您的应用程序来说至关重要,并且您的应用程序通常在已知数据集(类型和大小)上进行迭代,那么了解和理解MMU,L缓存和缓存行的影响就很重要。 这不是因为您确实可以提前避免这些问题,而是因为您可能需要事后找出它们,同时盯着分析结果,并想弄清楚为什么事情花的时间比以前更长,或者“通常应该”。 而且-如果您很幸运,并且数据集在您的控制范围内,则可以进行调整以解决某种CPU缓存性能问题。

不幸的是,大多数应用程序并不具有遍历已知数据集并知道其目标硬件类型的奢侈性。 这是游戏和多媒体应用程序开发以及操作系统工程所独有的。 对于世界上大多数其他应用程序,改善某个特定大小的特定数据集的缓存配置文件意味着减少另一个特定数据集的缓存配置文件。

最后,即使有关“将变量对齐到N字节边界”的“经验法则”也受底层硬件的约束。 大多数较新的台式机级x86架构(大多数在2011年左右之后制造)更喜欢打包数据而不是对齐数据,因为加载跨缓存行边界打包的单词的成本比必须加载更多总缓存行来表示同一数据集要便宜。 但是在运行ARM的移动设备上? 对齐仍然很关键。

您可以搜索更多关键字以进行进一步教育: 缓存颜色缓存逐出 但是同样,这都非常依赖于目标CPU,不幸的是很少有(或没有)概括。

1 虚拟内存页面对齐

遇到此算法以计算给定地址的页面偏移量。 天真的方法简单,直观,但是更快的解决方案仅在页面大小为2的幂时才有效。例如, 我的问题是,当页面大小为2的幂以使valueToAlign & (~(pageSize-1)) “发生”以返回正确的对齐方式(例如24 valueToAl ...

2 内存页面对齐似乎不会影响性能......?

我正在开发一个性能是一个基本问题的应用程序。 特别是,我愿意组织一个树状结构,需要在与内存页面大小相同的块中快速遍历,这样可以减少到达叶子所需的缓存未命中数。 我是内存优化领域的新手。 据我了解,访问主内存的过程或多或少如下: CPU有几层缓存,其大小和速度都在下降。 ...

3 在numpy中获取页面对齐的内存

有没有办法在页面边界上分配numpy array的数据部分(即数据)? 为什么我关心,如果我在Intel设备上使用PyOpenCL,并且我想使用CL_MEM_USE_HOST_PTR创建一个缓冲区, 他们建议数据是1)页面对齐的,2)大小是缓存行的倍数。 在C中有多种分配页面对齐内存 ...

6 分配页面对齐的内存块有什么好处?

我意识到大多数CPU更擅长在对齐的内存地址读取数据,即内存地址是CPU字的倍数。 但是,在很多地方我都读过有关分配页面对齐内存的内容。 为什么有人想要获得页面对齐的内存地址? 它只是为了更大的表现吗? ...

7 堆上的页面对齐内存分配是否有任何优化或不同的 API?

我将要编写一个表示双端队列的类,就像std::dequeue ,但能够存储任何简单的可破坏类型,并且没有索引支持。 迭代或弹出操作只有知道之前存储的类型才能工作。 大多数情况下,它将被用作队列/堆栈之类的存储,由其他类型引用,因为引用保证保持有效,即使它被推送/弹出到两者之间的任一端。 内存的分配和 ...

8 如何从mingmap的operator new或malloc获取页面对齐的内存

有没有办法分配一块内存,使其起始地址与给定的页面大小对齐? 请注意,我不想在分配块之后计算对齐的地址。 原因是在某些时候我将不得不在块上调用mremap():mremap要求旧的地址参数是页面对齐的。 ...

9 页面对齐和div元素对齐

所以我试图建立一个这样的页面: 但它看起来像这样: 我尝试使用多个div并结合Row和Col来做到这一点,但它似乎一团糟。 一些更改也没有任何影响。 代码: CSS代码: 知道如何使它看起来像上面提供的页面吗? 此外,任何人都可以提供有关如何正确构建布局的良好资源。 我还想 ...

10 Linux 中的页面对齐

在 Windows 中,我可以分配 64K 的虚拟内存,返回的内存将与 64K 边界对齐。 这很有用,因为我可以将内存分配器中的任何地址四舍五入到 64K 边界并将其转换为“页眉”,在那里我保留预订信息。 我想在 Linux 中做同样的事情,但似乎我只能对页面大小(通常是 4K)执行此操作。 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM