如何在C中预取指针,目标是AMD Opteron 6168?

时间:2010-10-13 21:55:06

标签: c prefetch amd-processor

我在C中编写一个多线程程序,其中一个核心定期从链表头部抓取一个项目,而其他核心将项目附加到列表的后面(使用CAS魔术来保证线程安全,其他人提供了为了我)。看来我的程序运行得更快,如果核心从列表头部获取一个项目只是启动下一个项目的预取,这肯定是在另一个核心的缓存中。

目前我的目标是AMD Opteron 6168,在Debian Linux上使用gcc进行编译:我试图找到这方面的文档,但我在陌生的水域。我所能找到的只是使用-O3来启用编译器插入的预取(我认为是for循环),并提到了像PREFETCHW这样的AMD预取指令名称。

我不知道如何找到我所追求的参考,或者如何将这样的语句插入到C中,可能作为汇编块?

2 个答案:

答案 0 :(得分:2)

检查英特尔架构文档。

在VC中,你应该可以做这样的事情

asm
{
  prefetch POINTER_NAME
}

在GCC -

asm("prefetch %0", POINTER_NAME); //May have syntax slightly off

我以前看过这个。

答案 1 :(得分:2)

gcc附带了一些builtin functions。你可以做到

__builtin_prefetch(&yourData);