Questions tagged «warp-scheduler»

2
CUDA块/线程/线程如何映射到CUDA内核?
我已经使用CUDA几周了,但是我对块/线程/线程的分配有一些疑问。 我正在从教学角度(大学项目)研究体系结构,因此达到最佳性能不是我的关注。 首先,我想了解一下我是否明白这些事实: 程序员编写内核,并在线程块网格中组织其执行。 每个块都分配给一个流多处理器(SM)。分配后,便无法迁移到另一个SM。 每个SM将自己的块拆分为Warp(当前最大为32个线程)。扭曲中的所有线程均在SM的资源上同时执行。 线程的实际执行由SM中包含的CUDA核心执行。线程和核心之间没有特定的映射。 如果warp包含20个线程,但是当前只有16个内核可用,则warp将无法运行。 另一方面,如果一个块包含48个线程,则它将拆分为2个扭曲,并在有足够内存可用的情况下并行执行。 如果线程在内核上启动,则由于内存访问或长时间浮点操作而被暂停,则其执行可以在其他内核上恢复。 他们正确吗? 现在,我有一个GeForce 560 Ti,因此根据规格它配备了8个SM,每个包含48个CUDA内核(总共384个内核)。 我的目标是确保体系结构的每个核心都执行SAME指令。假设我的代码不需要比每个SM中可用的更多的寄存器,我想到了不同的方法: 我创建了8个块,每个块有48个线程,因此每个SM都有1个块要执行。在这种情况下,这48个线程是否将在SM中并行执行(利用所有48个可用的内核)? 如果我启动64个6线程块,会有什么区别?(假设它们将在SM之间平均映射) 如果我将GPU“淹没”在计划的工作中(例如,创建1024个线程块,每个线程有1024个线程),则可以合理地假设所有内核将在某个时刻使用,并且将执行相同的计算(假设线程永不停止)? 有什么方法可以使用探查器检查这些情况吗? 这个东西有参考吗?我阅读了《 CUDA编程指南》以及“对大型并行处理器进行编程”和“ CUDA应用程序设计与开发”中有关硬件体系结构的章节;但是我找不到确切的答案。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.