gpt4 book ai didi

c++ - std::alignas 如何优化程序的性能?

转载 作者:太空狗 更新时间:2023-10-29 20:35:53 43 4
gpt4 key购买 nike

在32位机器中,一个内存读取周期得到4个字节的数据。
因此,对于下方缓冲区的读取,读取下面提到的 128 个 bytes 缓冲区需要 32 个读取周期。

char buffer[128];

现在,假设如果我已经按照下面提到的方式对齐了这个缓冲区,那么请告诉我它如何使读取速度更快?

alignas(128) char buffer[128];

我假设内存读取周期将仅保持 4 个字节。

最佳答案

用于内存访问的寄存器的大小只是故事的一部分,另一部分是缓存行的大小。

如果缓存行是 64 字节并且您的 char[128] 自然对齐,则 CPU 通常需要操作三个不同的缓存行。使用 alignas(64)alignas(128),只需要触及两个缓存行。

如果您正在使用内存映射文件,或者在交换条件下,则下一级对齐开始:内存页面的大小。这将需要 4096 或 8192 字节对齐。

但是,如果指定的对齐方式大于编译器使用的自然对齐方式,我严重怀疑 alignas() 是否有任何显着的积极影响:它会显着增加内存消耗,这可能就足够了首先触发更多的缓存行/内存页面。只有小的偏差需要避免,因为它们可能会在某些 CPU 上引发巨大的减速,或者在其他 CPU 上可能是完全非法的/不可能的。

因此,真理只存在于测量中:如果你需要你能得到的所有加速,试试看,测量运行时差异,看看它是否有效。

关于c++ - std::alignas 如何优化程序的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40527255/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com