问题标签 [gpu-atomics]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
625 浏览

c - 共享内存上的原子操作

如何对共享内存进行原子操作?
我有类似的东西:

因此 5 个线程正在递增 a。我怎样才能做到这一点?
我知道以这种方式我正在序列化 5 个线程的执行,但这对扭曲有何影响?经线中的所有线程都会被序列化还是只序列化前 5 个?

0 投票
7 回答
9517 浏览

algorithm - CUDA:减少还是原子操作?

我正在编写一个 CUDA 内核,其中涉及计算给定矩阵的最大值,并且我正在评估可能性。我能找到的最好方法是:

强制每个线程在共享内存中存储一​​个值,然后使用缩减算法来确定最大值(优点:最小分歧缺点:共享内存在 2.0 设备上限制为 48Kb)

我无法使用原子操作,因为同时存在读取和写入操作,因此同步线程无法同步线程。

你有什么其他想法吗?

0 投票
1 回答
496 浏览

cuda - cuda atomic 添加可见性

在 CUDA 中,原子操作的结果是否对与执行原子操作的同一块中的其他 warp 的线程立即可见?在非原子操作的情况下,我知道在__syncthreads()被调用之前结果可能不可见。

0 投票
1 回答
9248 浏览

cuda - CUDA 中的原子操作?要包含哪个头文件?

为了在 CUDA 中使用原子操作,是否需要包含一些 CUDA 头文件?CUDA 编程指南似乎对此守口如瓶。

下面给出的代码 glmax.cu 给了我以下编译错误。

这是代码。它基本上是使用原子操作计算 GPU 上数组的最大值atomicMax。因为我是 CUDA 的新手,所以我确信这是一个非常幼稚的代码,但我写这个是为了帮助自己理解原子操作。

0 投票
1 回答
1542 浏览

cuda - CUDA 中的原子操作

以下程序使用“Cuda By Example”中的原子锁实现,但运行该程序会使我的机器冻结。有人可以告诉我我的程序有什么问题吗?非常感谢

逸飞

0 投票
1 回答
1429 浏览

cuda - CUDA:共享内存上的原子操作


我的 cuda 内核会在块执行结束时生成一些馈送到主机的内容。
骨架如下。
写入数据的 host_data 被分配为主机映射内存。
host_data_count 也是映射内存,表示产生的数据数量。
我使用的 GPU 是带有 Fermi 架构和 CC 2.0 的 GTX 580。

我在这个内核代码中缺少什么?
有人可以帮忙吗?

0 投票
3 回答
15471 浏览

visual-studio-2010 - 错误:在带有 Fermi GPU 的 Visual Studio 2010 和 cuda 4.2 下未定义标识符“atomicAdd”

我试图在 Visual Studio 2010 下使用 CUDA 4.2 编译一些 CUDA 代码(我使用 Parallel Nsight 2.2 创建了这个 CUDA 项目),但我遇到了一个原子问题“错误:标识符“atomicAdd”未定义”,我仍然不能检查几个论坛后解决。

所以我试图从 CUDA SDK Samples 中获取一些信息。首先,我在 CUDA SDK 中运行了 simpleAtomicIntrinsics 示例,它通过了测试。然后,我将此示例中的所有文件复制到 Visual Studio 2010 中的新 CUDA 4.2 项目并编译它们,结果如下。

顺便说一句,我可以在这个 vs2010 CUDA 项目下运行其他示例,例如时钟、matrixMul 等。(这意味着包含路径设置正确)

我用谷歌搜索并找到以下链接Some issue with Atomic add in CUDA kernel operation。我根据它更改了项目和.cu文件的属性,但仍然无法解决问题。

有什么建议吗?

0 投票
2 回答
76434 浏览

cuda - CUDA 原子操作列表

我想知道是否有完整的原子操作列表。我在互联网上找不到类似的东西。

0 投票
1 回答
2317 浏览

kernel - OpenCL 内核中的原子操作

当我试图找到有关内核中原子操作的更多细节时,我发现了一些奇怪的事情。据我了解,当对一个数字使用原子操作时,所有线程的所有此类操作都将被序列化以在该数字上启动以保持完整性。以下是我的一段内核代码:

对于上面的代码,假设只有两个线程 T1 和 T2。据我了解,T1 和 T2 都会执行代码片段,但是当他们尝试执行 atomic_cmpxchg 操作时,T2 必须等待 T1 完成(假设 T1 先运行)。正如我设计的那样,当 T1 读取 A[ptr] 时,A[ptr] 的旧值是 0,所以它会原子地更改为 -1。之后,因为对于T1,条件不满足,所以T1会直接去延迟码,被延迟。现在是时候让 T2 在 A[ptr] 上工作了,因为现在 A[ptr] 已经设置为 -1,所以 T2 满足条件,所以 T2 将运行到“ptr= A[ptr + 3];” . 但我的问题是:因为T2完成条件判断后,会执行“ptr= A[ptr + 3];” 立即,但 T1 遇到延迟,所以 A[ptr+3] 的值还没有被 T1 更新(因为 k 太大了,延迟会很长)。所以 T2 不会读取 A[ptr+3] 的最新值,这应该是新值。但我的实验表明,无论我设置多大的k值,结果总是正确的,即无论T1遇到多长时间的延迟,T2总能读取到正确的值( newValue )。谁能帮忙调查一下这个案子?非常感谢。

0 投票
1 回答
332 浏览

cuda - 为什么 CUDA 原子函数不起作用?

问题是我想应用于atomicMin一个 int 数组。我的数组有 6 个元素,代码是:

当我用 6 个线程调用内核代码时,如果最小元素位置是 6,则无法返回最小元素,如果我用 7 个线程调用内核,我会得到正确的答案。这段代码有什么问题?