问题标签 [gpu-warp]

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 投票
2 回答
1259 浏览

cuda - CUDA共享内存和warp同步

以下主机代码test.c和设备代码test0.cu旨在提供相同的结果。

test.c

test0.cu

如果我编译并运行它们,它们会给出与我预期相同的结果。

但是,如果我在设备代码中使用共享内存而不是全局内存,如 中test1.cu所示,它会给出不同的结果。

test1.cu

如果我编译并运行它,它会给出与ortest1.cu不同的结果。test0.cutest.c

经纱同步不应该与共享内存一起使用吗?


对此问题的一些调查:

使用 CUDA8.0 时,如果我test1.cu使用-arch=sm_61选项进行编译(我正在使用 GTX 1080 进行测试),它会给出与test0.cuand相同的结果test.c

但这不适用于较新版本的 CUDA。如果我使用任何比 8.0 更新的版本,即使我给出-arch=sm_61选项,测试结果也会有所不同。

0 投票
1 回答
158 浏览

cuda - 为什么使用大于每个多处理器内核数的线程块

我有一块 Nvidia GeForce GTX 960M 显卡,它具有以下规格:

  • 多处理器:5
  • 每个多处理器的核心数:128(即 5 x 128 = 总共 640 个核心)
  • 每个多处理器的最大线程数:2048
  • 最大块大小(x、y、z):(1024、1024、64)
  • 翘曲尺寸:32

如果我运行 1 个 640 个线程块,那么单个多处理器会获得 640 个线程的工作负载,但一次只能同时运行 128 个线程。但是,如果我运行 5 个 128 个线程的块,那么每个多处理器都会得到一个块,并且所有 640 个线程都同时运行。因此,只要我创建 128 个线程的块,那么每个多处理器的线程分布就可以尽可能均匀(假设总共至少有 640 个线程)。

那么我的问题是:为什么我要创建大小大于每个多处理器内核数的块(只要我没有达到每个维度的最大块数)?

0 投票
1 回答
401 浏览

cuda - 计算能力 6 上 __match_any_sync 的替代方案是什么?

在 cuda 示例中,例如这里__match_all_sync __match_any_sync用来。

这是一个示例,其中一个扭曲被分成多个(一个或多个)组,每个组都跟踪自己的原子计数器。

这里__match_any_sync将warp中的线程分成具有相同ptr值的组,以便每个组可以原子地更新自己的ptr而不会妨碍其他线程。

我知道 nvcc 编译器(从 cuda 9 开始)会自动在后台进行这种优化,但这只是关于__match_any_sync

有没有办法做到这种预计算能力7?

0 投票
1 回答
38 浏览

c++ - Pre 8.x 相当于 CUDA 中的 __reduce_max_sync()

cuda-memcheck在执行以下操作的代码中检测到竞争条件:

所以基本上这段代码根据某些条件计算每个扭曲的所有者线程。对于某些 warp 可能没有所有者,但对于某些所有者的数量可能超过 1,然后发生竞争条件,因为多个线程将值分配给同一共享内存区域。

在尝试了文档之后,我认为我需要做的事情是:

但是,我的尝试有两个问题:

  1. 我真的不需要找到最大线程 - 如果有一个线程,则为每个经纱选择任何 1 个线程就足够了condition==true
  2. 它需要CUDA计算能力8.x,而我需要支持5.2计算能力的设备

你能帮我解决以上问题吗?

0 投票
1 回答
93 浏览

c++ - 在发散的 CUDA 运行期间监视活动的经纱和线程

我实现了一些 CUDA 代码。它运行良好,但算法本质上会产生强烈的线程分歧。这是意料之中的。

稍后我将尝试减少分歧。但目前我很高兴能够测量它。

是否有一种简单的方法(最好使用运行时 API 调用或 CLI 工具)来检查我最初计划的扭曲和/或线程中有多少仍然处于活动状态?