首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在C中预取指向AMD Opteron 6168的指针?

如何在C中预取指向AMD Opteron 6168的指针?
EN

Stack Overflow用户
提问于 2010-10-14 05:55:06
回答 2查看 1.5K关注 0票数 0

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

目前我的目标是AMD Opteron6168,在Debian Linux上与gcc一起编译:我试图找到有关这方面的文档,但我对此并不熟悉。我所能找到的就是使用-O3来启用编译器插入的预取(我认为是for循环),以及一些提到的AMD预取指令名,比如PREFETCHW。

我不知道如何找到我想要的东西的引用,或者如何将这样的语句插入到C中,也许是作为汇编块?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-14 06:38:20

为此,gcc提供了一些builtin functions。你可以做到

代码语言:javascript
运行
复制
__builtin_prefetch(&yourData);
票数 2
EN

Stack Overflow用户

发布于 2010-10-14 05:57:59

查看英特尔架构文档。

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

代码语言:javascript
运行
复制
asm
{
  prefetch POINTER_NAME
}

在GCC -

代码语言:javascript
运行
复制
asm("prefetch %0", POINTER_NAME); //May have syntax slightly off

我以前已经看过这个了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3928370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档