虽然我已经阅读了有关movntdqa的说明,但已经想出了一种清晰的方法来表示内存范围、不可缓存或读取数据,这样就不会污染缓存。我想从gcc那里做这个。我的主要目标是切换到大数组中的随机位置。希望通过避免缓存来加速这一操作,因为很少有数据可重复使用。
发布于 2011-09-18 09:09:15
我想你所描述的是内存类型范围寄存器。您可以使用/proc/mttr / ioctl(2) (如果可用,并且您是用户0)在Linux下控制这些代码,参见这里中的一个示例。由于它适用于物理地址范围,我认为您将很难以合理的方式使用它。
一个更好的方法是查看编译器的本质GCC 提供,并找到一个或多个表达您的意图。看看Ulrich关于“每个程序员都应该知道什么是关于内存的知识”的系列文章,特别是关于绕过缓存的第5部分。看起来,_mm_prefetch(ptr, _MM_HINT_NTA)可能适合您的需要。
与以往一样,当涉及到绩效时--衡量、衡量、衡量。Drepper系列的出色部分详细介绍了如何做到这一点(第7部分),以及在加快代码的内存性能时可以尝试的代码示例和其他策略。
发布于 2011-09-23 22:36:12
来自user786653的所有好建议;特别是Ulrich的文章。我将补充如下:
_mm_stream_ps内在的)?我不相信声明页面未被缓存会给您带来比适当使用这些页面更好的性能,而且它们比其他选项更容易使用。会很有兴趣看到相反的证据。https://stackoverflow.com/questions/7412169
复制相似问题