
[英]Compute per-warp histogram without shared memory
问题计算 warp 中各个线程持有的已排序数字序列的 per-warp 直方图。 例子: 结果必须由 N 个较低的线程保存在 warp 中(其中 N 是唯一数字的数量),例如: 请注意,基本上不需要对“val”序列进行排序:只需要将相等的数字组合在一起,即:99955555773333333 .. ...
[英]Compute per-warp histogram without shared memory
问题计算 warp 中各个线程持有的已排序数字序列的 per-warp 直方图。 例子: 结果必须由 N 个较低的线程保存在 warp 中(其中 N 是唯一数字的数量),例如: 请注意,基本上不需要对“val”序列进行排序:只需要将相等的数字组合在一起,即:99955555773333333 .. ...
[英]Why is my CUDA warp shuffle sum using the wrong offset for one shuffle step?
编辑:我已在https://developer.nvidia.com/nvidia_bug/3711214将此作为错误提交。 我正在编写一个数值模拟程序,它在发布模式下给出了略微不正确的结果,但在调试模式下看似正确的结果。 原始程序使用 curand 进行随机采样,但我已将其简化为更简单且更具确定 ...
[英]Are threads in a multi-dimensional CUDA kernel blocks packed to fill warps?
NVIDIA GPU 有调度完整的扭曲来一起执行指令(嗯,有点;另见这个问题)。 因此,如果我们有一个“线性”块,比如 90 个线程(或 X x Y x Z = 90 x 1 x 1) - GPU 内核将具有三个扭曲来调度指令执行: 线程 (0,0,0) 到 (31,0,0) 线程 ...
[英]Monitor active warps and threads during a divergent CUDA run
我实现了一些 CUDA 代码。 它运行良好,但算法本质上会产生强烈的线程分歧。 这是意料之中的。 稍后我将尝试减少分歧。 但目前我很高兴能够测量它。 有没有一种简单的方法(最好使用运行时 API 调用或 CLI 工具)来检查我最初计划的扭曲和/或线程中有多少仍然处于活动状态? ...
[英]Pre 8.x equivalent of __reduce_max_sync() in CUDA
cuda-memcheck在执行以下操作的代码中检测到竞争条件: 所以基本上这段代码根据某些条件计算每个扭曲的所有者线程。 对于某些扭曲,可能没有所有者,但对于某些扭曲,所有者的数量可能超过 1,然后会发生竞争条件,因为多个线程将值分配给同一个共享内存区域。 在尝试了文档后,我认为可以通过以 ...
[英]What's the alternative for __match_any_sync on compute capability 6?
在 cuda 示例中, 例如这里, __match_all_sync __match_any_sync被使用。 这是一个例子,其中一个经线被分成多个(一个或多个)组,每个组都跟踪自己的原子计数器。 这里的__match_any_sync将 warp 中的线程分成具有相同ptr值的组,以便每个 ...
[英]Why use thread blocks larger than the number of cores per multiprocessor
我有Nvidia GeForce GTX 960M显卡,它具有以下规格: 多处理器:5 每个多处理器的内核数:128(即5 x 128 =总共640内核) 每个多处理器的最大线程数:2048 最大块大小(x,y,z):( 1024、1024、64) 经线 ...
[英]CUDA shared memory and warp synchronization
紧随主机代码test.c和设备代码test0.cu可以得出相同的结果。 test.c test0.cu 如果我编译并运行它们,它们的结果与我预期的相同。 但是,如果我在设备代码中使用共享内存而不是全局内存,如test1.cu ,则会得到不同的结果。 test1. ...
[英]__activemask() vs __ballot_sync()
在阅读 CUDA 开发人员博客上的 这篇文章后,我很难理解何时安全\\正确使用__activemask()代替__ballot_sync() 。 在Active Mask Query部分,作者写道: 这是不正确的,因为它会导致部分总和而不是总和。 之后,在Opportunistic Wa ...
[英]Warp shuffling for CUDA
我需要做一个看起来像这样的经纱改组: 在这张图片上,线程数被限制为8个以使其可读。 如果我阅读了 Nvidia SDK 和 ptx 手册,shuffle 指令应该可以完成这项工作,特别是shfl.idx.b32 d[|p], a, b, c; ptx 指令。 从我读到的手册: 因此,提供 ...
[英]CUDA Reduction: Warp Unrolling (School)
我目前正在开展一个项目,在该项目中,我将展开最后的减少。 我已经完成了上面的代码; 但是,通过猜测进行了一些修改,我想解释一个原因。 我写的代码只是功能kernel4 这是一种归约算法,其余代码已提供。 码: 我的第一个问题是:在声明时 我想验证一下我对vol ...
[英]How do I do the converse of shfl.idx (i.e. warp scatter instead of warp gather)?
使用 CUDA 的 shfl.idx 指令,我们执行本质上是内部扭曲收集:每个通道提供一个数据和一个原始通道,并获取原始通道的数据。 那么相反的操作,分散呢? 我的意思是,不是分散到 memory,而是分散到车道。 也就是说,每条车道都提供一个基准和一个目标车道,并且对于恰好有另一个车道以它们为目 ...
[英]Some intrinsics named with `_sync()` appended in CUDA 9; semantics same?
在CUDA 9中,nVIDIA似乎有了这种“合作团体”的新概念; 由于某些原因我并不完全清楚, __ballot()现在(= CUDA 9)被弃用而赞成__ballot_sync() 。 这是别名还是语义改变了? ...对于现在已将__sync()添加到其名称中的其他内置__sync( ...
[英]Thread/warp local lock in cuda
我想在cuda中实现关键部分。 我读了许多关于此主题的问题和答案,答案通常涉及atomicCAS和atomicExch。 但是,这在扭曲级别上不起作用,因为扭曲中的所有线程在atomicCAS之后都获得相同的锁,从而导致死锁。 我认为有一种方法可以通过使用翘曲__ballot或__ ...
[英]Is there a way to explicitly map a thread to a specific warp in CUDA?
可以说,动态分析是在CUDA程序上完成的,因此某些线程最好处于同一线程中。 例如,假设我们有1024个cuda线程,并且经线大小为32。经过动态分析,我们发现线程989、243、819,...,42(列出的32个线程)应该在同一经线上。 我们确定它们应该在相同的扭曲上,因为它们在代码执行 ...
[英]CUDA coalesced access of FP64 data
我对war64发出的内存访问如何受FP64数据影响感到困惑。 扭曲始终由32个线程组成,无论这些线程正在执行FP32还是FP64计算。 对? 我已经读到,每当warp中的线程尝试读取/写入全局内存时,warp就会访问128个字节(32个单精度浮点数)。 对? 因此, ...
[英]Questions of resident warps of CUDA
我已经使用CUDA了一个月,现在我想弄清楚要隐藏内存访问的延迟需要多少个扭曲/块。 我认为这与多处理器上的最大常驻扭曲有关。 根据CUDA_C_Programming_Guide(v-7.5)中的表13,每个多处理器的驻留扭曲最大为64。那么,我的问题是:驻留扭曲是什么? 它是指那些具 ...
[英]When should I use CUDA's built-in warpSize, as opposed to my own proper constant?
nvcc设备代码可以访问内置值warpSize ,该值设置为执行内核的设备的扭曲大小(即在可预见的将来为32)。 通常,您只能将其与常量区分开来-但是,如果您尝试声明一个长度为warpSize的数组,则会抱怨它是非常量的(使用CUDA 7.5)。 因此,至少出于这个目的,您有动力拥有类似 ...
[英]Avoid warp divergence
我有一个布尔一维数组T[N]控制shift的值,如下所示: **a :指向全局内存中n*n矩阵的指针的数组,我希望每个矩阵a构造一个shift * Identity以获得: 我有: 如果T [i] == true => shift = shift1否则shift = ...
[英]cuda warp size and control divergence
我对以下问题有疑问: 假设我们有一个9 * 7图片(x方向7像素,y方向9像素),假设4 * 4线程块和每个warp 8个线程,有多少warp将有控制偏差? 这里如何组织块和经线? 对于x或水平方向,我可以假设每行2个块。类似地,对于垂直方向,每列3个块。 但是,变形将如何组织? ...