0

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

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

我不知道如何找到我所追求的参考,或者如何将这样的语句插入到 C 中,也许作为一个程序块?

4

2 回答 2

2

检查英特尔架构文档。

在VC中,你应该能够做这样的事情

asm
{
  prefetch POINTER_NAME
}

在海湾合作委员会 -

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

我以前看过这个。

于 2010-10-13T21:57:59.330 回答
2

gcc 为此提供了一些内置函数。你可以做

__builtin_prefetch(&yourData);
于 2010-10-13T22:38:19.513 回答