我正在用C语言编写一个多线程程序,其中一个核心周期性地从链表的头部抓取一个项,而其他核心将项附加到链表的后面(为了线程安全,使用CAS魔法,其他人为我提供了)。看起来我的程序会运行得更快,如果核心从列表的头部获取一个项目,只是启动对下一个项目的预取,而下一个项目肯定在另一个核心的缓存中。
目前我的目标是AMD Opteron6168,在Debian Linux上与gcc一起编译:我试图找到有关这方面的文档,但我对此并不熟悉。我所能找到的就是使用-O3来启用编译器插入的预取(我认为是for循环),以及一些提到的AMD预取指令名,比如PREFETCHW。
我不知道如何找到我想要的东西的引用,或者如何将这样的语句插入到C中,也许是作为汇编块?
发布于 2010-10-14 06:38:20
为此,gcc提供了一些builtin functions。你可以做到
__builtin_prefetch(&yourData);发布于 2010-10-14 05:57:59
查看英特尔架构文档。
在VC中,你应该能够做这样的事情
asm
{
prefetch POINTER_NAME
}在GCC -
asm("prefetch %0", POINTER_NAME); //May have syntax slightly off我以前已经看过这个了。
https://stackoverflow.com/questions/3928370
复制相似问题