gpt4 book ai didi

optimization - NASM 预取

转载 作者:行者123 更新时间:2023-12-03 17:08:07 25 4
gpt4 key购买 nike

我在 NASM 文档中遇到了以下说明,但我无法完全理解它们。可悲的是,关于这些指令的英特尔文档也有些缺乏。

PREFETCHNTA m8                ; 0F 18 /0        [KATMAI] 
PREFETCHT0 m8 ; 0F 18 /1 [KATMAI]
PREFETCHT1 m8 ; 0F 18 /2 [KATMAI]
PREFETCHT2 m8 ; 0F 18 /3 [KATMAI]

谁能提供一个简明的指令示例,比如在给定地址缓存 256 个字节?提前致谢!

最佳答案

这些指令是用来建议 CPU 尝试将缓存行预取到缓存中的提示。因为它们是提示,所以 CPU 可以完全忽略它们。

如果 CPU 确实支持它们,那么 CPU 将尝试预取,但如果涉及 TLB 未命中,它将放弃(并且不会预取)。这是大多数人弄错的地方(例如,未能执行“预加载”,您插入一个虚拟读取以强制 TLB 加载,这样预取就不会被阻止工作)。

预取的数据量为 32 字节或更多,具体取决于 CPU 等。您可以使用 CPUID 来确定实际大小(CPUID 函数 0x00000004,EBX 位 0 到 31 中返回的“系统一致性行大小”)。

如果预取太晚则没有帮助,如果预取太早,数据可能会在使用前从缓存中逐出(这也无济于事)。 Intel 的“IA-32 Intel 体系结构优化引用手册”中有一个附录,描述了如何计算何时进行预取,称为“预取调度距离的数学”,您可能应该阅读。

另外不要忘记预取会降低性能(例如,导致需要驱逐数据以腾出空间)并且如果您不预取任何内容,CPU 有一个硬件预取器可能无论如何都会为您完成.您可能还应该阅读有关此硬件预取器如何工作(以及何时不工作)的信息。例如,对于顺序读取(例如 memcmp()),硬件预取器会为您完成,使用显式预取主要是浪费时间。对于 CPU 的硬件预取器不能/不会预测的“随机”(非顺序)访问,可能只值得为显式预取烦恼。

关于optimization - NASM 预取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14189484/

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