OpenCL -atomic_cmpxchg

发布于 2024-11-18 06:44:21 字数 179 浏览 2 评论 0原文

这个功能有什么作用??我无法理解 OpenCL 规范中的任何内容! 下面的代码是 spMV 代码的片段。

atomic_cmpxchg((__global int*)loc, *((int*)&old), *((int*)&sum)) != *((int*)&old)

What does this function do??. I couldn't understand a thing from the OpenCL specification!!
The code below is a snippet from spMV code.

atomic_cmpxchg((__global int*)loc, *((int*)&old), *((int*)&sum)) != *((int*)&old)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

烟雨凡馨 2024-11-25 06:44:21

atomic_cmpxchg 是“原子比较和交换”。它实现了标准 C99 三元运算的原子版本。对于上面的代码,它意味着以下原子等效项:

p = *loc;
*loc = (p == *old) ? (*sum != *old) : p;

atomic_cmpxchg 调用返回 p。该操作是原子的,这意味着在事务完成之前没有其他线程可以从 loc 读取或写入。

atomic_cmpxchg is "atomic compare and exchange". It implements an atomic version of the standard C99 ternary operation. For the code above it implies the atomic equivalent of the following:

p = *loc;
*loc = (p == *old) ? (*sum != *old) : p;

with the atomic_cmpxchg call returning p. The operation is atomic, this means that no other thread can read or write from loc until the transaction is completed.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文