gpu-warp相关内容

为什么要费心去了解 CUDA Warps?

我有 GeForce GTX460 SE,所以它是:6 SM x 48 CUDA 核心 = 288 CUDA 核心.众所周知,一个 Warp 中包含 32 个线程,并且在一个块中同时(一次)只能执行一个 Warp.也就是在单个多处理器(SM)中只能同时执行一个Block、一个Warp和只有32个线程,即使有48个内核可用? 另外,可以使用threadIdx.x和blockIdx.x来分配具体 ..
发布时间:2022-01-10 16:12:06 其他开发

nVIDIA CC 2.1 GPU warp 调度程序如何一次发出 2 条指令进行 warp?

注意:此问题专门针对 nVIDIA Compute Capability 2.1 设备.以下信息来自 CUDA Programming Guide v4.1: 在计算能力 2.1 设备中,每个 SM 有 48 个 SP(核心)用于整数和浮点运算.每个 warp 都由32 个连续线程.每个 SM 有 2 个warp 调度器.在每一个指令发布时间,一个warp调度器选择一个准备好的warp线程并 ..
发布时间:2022-01-10 16:11:50 其他开发

2D/3D CUDA 块是如何划分为 warp 的?

如果我用一个块有尺寸的网格开始我的内核: dim3 block_dims(16,16); 网格块现在如何分裂成经线?这种块的前两行形成一个扭曲,还是前两列,或者这是任意排序的? 假设 GPU 计算能力为 2.0. 解决方案 线程在块内按顺序编号,使得 threadIdx.x 变化最快,然后 threadIdx.y 变化第二快,threadIdx.z 变化最慢.这在功能上与多维数组 ..
发布时间:2022-01-10 15:18:43 其他开发

CUDA常驻经纱的问题

我已经使用CUDA了一个月,现在我想弄清楚要隐藏内存访问的延迟需要多少个扭曲/块.我认为这与多处理器上的常驻扭曲最大有关. 根据CUDA_C_Programming_Guide(v-7.5)中的表13,每个多处理器的最大驻留扭曲数为64. 然后,我的问题是:居民翘曲是什么?它是指那些具有从GPU内存中读取的数据并准备好由SP处理的扭曲吗?或引用可以读取数据存储器的warp或准备好由SP处理的 ..
发布时间:2020-07-31 01:55:09 其他开发

CUDA中的线程/经线本地锁定

我想在cuda中实现关键部分.我读了很多关于这个主题的问题和答案,答案通常涉及atomicCAS和atomicExch. 但是,这在warp级别上不起作用,因为warp中的所有线程在atomicCAS之后都获得相同的锁,从而导致死锁. 我认为有一种方法可以通过使用翘曲的__ballot或__any指令来真正锁定cuda. 但是,经过多次尝试,我仍无法获得令人满意的(阅读有效的)解 ..
发布时间:2020-07-31 01:54:07 其他开发

GPU组如何进入扭曲/波阵面?

我的理解是,warp是在运行时通过任务调度程序定义的一组线程,CUDA的性能关键部分是warp中的线程差异,有没有办法很好地猜测硬件的方式会在线程块内构造经线吗? 例如,我已经在一个线程块中启动了一个具有1024个线程的内核,那么线程的排列方式如何,我能否从线程索引中得知(或至少可以作一个很好的猜测)? 通过这样做,可以最大程度地减少给定经线内线程的差异. 解决方案 warp中 ..
发布时间:2020-07-31 01:54:04 其他开发

CUDA 9中附加了一些以`_sync()`命名的内部函数;语义相同吗?

在CUDA 9中,nVIDIA似乎有了这种“合作团体"的新概念;由于某种原因(我不太清楚),现在不推荐使用__ballot()(= CUDA 9),而推荐使用__ballot_sync().是别名还是语义发生了变化? ...类似的问题,对于现在已在其名称中添加了__sync()的其他内建程序. 解决方案 没有语义是不一样的.函数调用本身是不同的,一个不是另一个的别名,已经公开了新功能 ..
发布时间:2020-07-31 01:53:02 其他开发

2D/3D CUDA块如何划分为变形?

如果我从一个具有尺寸块的网格开始我的内核: dim3 block_dims(16,16); 现在如何将网格块拆分为扭曲?这样的块的前两行是形成一个翘曲,还是前两列,或者是任意排序的? 假定GPU计算能力为2.0. 解决方案 在块内按顺序对线程进行编号,以使threadIdx.x变化最快,然后threadIdx.y变化最快,而threadIdx.z变化最快.这在功能上与多维数 ..
发布时间:2020-07-31 01:52:55 其他开发

我应该在什么时候使用CUDA的内置warpSize,而不是我自己的常数?

nvcc设备代码可以访问内置值 warpSize ,该值设置为执行内核的设备的warp大小(即32,对于可预见的未来)。通常你不能告诉它除了一个常数 - 但如果你试图声明一个长度warpSize的数组你得到一个投诉,它是非常数...(使用CUDA 7.5) 所以,至少为了这个目的,你有动机去(编辑): code> enum:unsigned int {warp_size = 32}; ..
发布时间:2017-03-05 19:39:28 C/C++开发

是CUDA warp调度确定的吗?

我想知道CUDA应用程序的warp调度顺序是否是确定性的。 具体来说,我想知道在同一个设备上使用相同输入数据的多个运行相同内核时,warp执行的顺序是否保持不变。如果没有,是否有什么可以强制顺序执行warp(在调试顺序依赖的算法的情况下)? 解决方案 未定义CUDA warp调度的精确行为。因此,你不能依赖于它是确定性的。特别地,如果多个经线准备好在给定的发送槽中执行,则没有对经线调 ..
发布时间:2017-03-04 14:36:57 其它硬件开发

为什么还要知道CUDA Warps?

我有GeForce GTX460 SE,所以它是:6 SM x 48 CUDA内核= 288 CUDA内核。 已知在一个Warp中包含32个线程,并且在一个块中同时(一次)只能执行一个Warp。 也就是说,在单个多处理器(SM)中只能同时执行一个Block,一个Warp和只有32个线程,即使有48个内核可用吗? 此外,分发具体线程和块的示例可以使用threadIdx.x和blockIdx ..
发布时间:2017-03-04 14:16:36 其它硬件开发

CUDA warp中的线程是否在多处理器上并行执行?

经线有32个线程。 32个线程是否在多处理器中并行执行? 如果32个线程没有并行执行,那么warp中没有竞争条件。 在CUDA编程模型中,所有的线程都在平行地延伸。但是硬件中的实际执行可能不是并行的,因为SM(流多处理器)内的核心数目可以小于32.例如,GT200架构每个SM具有8个核心,并且warp内的线程将需要4个时钟周期 如果多个线程写入同一位置(共享内存或全局内存),如果不想竞赛, ..
发布时间:2017-03-04 13:43:01 其它硬件开发

nVIDIA CC 2.1 GPU调变器如何一次发出2条指令来进行翘曲?

注意:此问题特定于nVIDIA Compute Capability 2.1设备。以下信息来自CUDA编程指南v4.1: 在计算能力2.1设备中,每个 SM 对于整数和浮点运算有48 SP (核心) 。每个 warp 由32个连续线程的 组成。每个SM有2个 warp调度程序。在每个 指令发布时间,一个warp调度器挑选一个已准备好的 线程的warp,并为核心上的warp发出 2个指 ..
发布时间:2017-03-04 12:36:09 其它硬件开发