虽然我已经阅读了有关此的 movntdqa 指令,但已经找到了一种干净的方法来表示不可缓存的内存范围或读取数据,以免污染缓存。
我想从海湾合作委员会做到这一点。我的主要目标是交换到大型数组中的随机位置。由于数据恢复很少,希望通过避免缓存来加速此操作。
我认为你所描述的是内存类型范围寄存器。您可以在 Linux 下控制这些(如果可用并且您是用户 0)使用/proc/mttr
/ ioctl(2)
see here举个例子。因为它工作在physical地址范围 我认为您将很难以合理的方式使用它。
更好的方法是查看编译器内在函数 GCCprovides并找到一个或多个能够表达您的意图的。看看 Ulrich Drepper 的系列文章“每个程序员都应该了解内存”,特别是part 5它涉及绕过缓存。看起来像_mm_prefetch(ptr, _MM_HINT_NTA)
可能适合您的需求。
一如既往,当谈到绩效时——衡量、衡量、再衡量。 Drepper 的系列有出色的部分详细说明了如何做到这一点(part 7)以及代码示例和其他在加快代码的内存性能时可以尝试的策略。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)