gpt4 book ai didi

c++ - 如何预取不常用的代码?

转载 作者:太空狗 更新时间:2023-10-29 19:53:15 24 4
gpt4 key购买 nike

我想预取一些代码到指令缓存中。代码路径不常使用,但我需要它在指令缓存中,或者至少在 L2 中,以用于极少数使用它的情况。我有一些关于这些罕见案例的预先通知。 _mm_prefetch 是否适用于代码?有没有办法在缓存中获取这个不常用的代码?对于这个问题,我不关心可移植性,所以即使是 asm 也可以。

最佳答案

答案取决于您的 CPU 架构。

也就是说,如果您使用的是 gcc 或 clang,则可以使用 __builtin_prefetch指令尝试生成预取指令。在 Pentium 3 和更高版本的 x86 类型架构上,这将生成一个 PREFETCHh 指令,该指令请求加载到数据缓存层次结构中。由于这些架构具有统一的 L2 和更高级别的缓存,这可能会有所帮助。

函数如下所示:

__builtin_prefetch(const void *address, int locality);

locality 参数应在 0...3 范围内。假设 locality 直接映射到 PREFETCHh 指令的 h 部分,你想传递 1 或 2,这要求加载数据进入二级缓存和更高级别的缓存。参见 Intel® 64 and IA-32 Architectures Software Developer's ManualVolume 2B: Instruction Set Reference, M-Z (PDF)第 4-277 页。 ( Find other volumes here .)

如果您使用的是另一个没有 __builtin_prefetch 的编译器,请查看它是否有 _mm_prefetch 函数。您可能需要包含头文件才能获得该功能。例如,在 OS X 上,该函数和 locality 参数的常量在 xmmintrin.h 中声明。

关于c++ - 如何预取不常用的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16218757/

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