相关疑难解决方法(0)

CUDA如何阻止/扭曲/线程映射到CUDA核心?

我已经使用CUDA几周了,但我对块/ warps/thread的分配有些怀疑. 我从教学的角度(大学项目)研究建筑,所以达到最佳表现并不是我关注的问题.

首先,我想了解我是否直截了当地得到了这些事实:

  1. 程序员编写内核,并在线程块网格中组织其执行.

  2. 每个块都分配给一个流式多处理器(SM).一旦分配,它就无法迁移到另一个SM.

  3. 每个SM将其自己的块拆分为Warps(当前最大大小为32个线程).warp中的所有线程在SM的资源上并发执行.

  4. 线程的实际执行由SM中包含的CUDA核执行.线程和核心之间没有特定的映射.

  5. 如果warp包含20个线程,但目前只有16个可用核心,则warp将不会运行.

  6. 另一方面,如果一个块包含48个线程,它将被分成2个warp并且它们将并行执行,前提是有足够的内存可用.

  7. 如果线程在核心上启动,则它会因内存访问或长时间浮点操作而停止,其执行可以在不同的核心上恢复.

他们是对的吗?

现在,我有一个GeForce 560 Ti,因此根据规格,它配备了8个SM,每个包含48个CUDA核心(总共384个核心).

我的目标是确保架构的每个核心都执行相同的SAME指令.假设我的代码不需要比每个SM中可用的代码更多的寄存器,我想象了不同的方法:

  1. 我创建了8个块,每个48个线程,因此每个SM有1个块来执行.在这种情况下,48个线程将在SM中并行执行(利用它们可用的所有48个内核)?

  2. 如果我推出64个6个线程的块,有什么区别吗?(假设它们将在SM之间平均映射)

  3. 如果我在预定的工作中"淹没"GPU(例如,创建每个1024个线程的1024个块),可以合理地假设所有核心将在某个点使用,并且将执行相同的计算(假设线程永远不会失速)?

  4. 有没有办法使用Profiler检查这些情况?

  5. 这个东西有没有参考?我阅读了"编程大规模并行处理器"和"CUDA应用程序设计与开发"中的CUDA编程指南和专用于硬件架构的章节; 但我无法得到准确的答案.

cuda gpgpu nvidia warp-scheduler

133
推荐指数
2
解决办法
6万
查看次数

nvidia-smi易失性GPU利用率解释?

我知道这nvidia-smi -l 1将每秒钟提供一次GPU使用(类似于以下内容).但是,我很欣赏有关Volatile GPU-Util真正含义的解释.这是使用的SM数量超过总SM数,占用数量还是其他数量?

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 367.48                 Driver Version: 367.48                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla K20c          Off  | 0000:03:00.0     Off |                    0 |
| 30%   41C    P0    53W / 225W |      0MiB /  4742MiB |     96%      Default |
+-------------------------------+----------------------+----------------------+
|   1  Tesla K20c          Off  | 0000:43:00.0     Off |                    0 |
| 36% …
Run Code Online (Sandbox Code Playgroud)

cuda gpu gpgpu nvidia gpu-programming

57
推荐指数
2
解决办法
3万
查看次数

如何对CUDA SM进行扭曲计划?

正如这个问题的答案所示,当SM包含8个CUDA内核(Compute Capability 1.3)时,32个线程的单个warp需要4个时钟周期来执行整个warp的单个指令.

即,在8个核心上同时运行的经线的车道1到第8车道,然后是车道9到车道16,在车道17到车道24之后,最后是车道25到车道32.

我能正确理解吗?

所以我的问题是,在新设备上,每个SM有32个(Compute Capability 2.0)或48个(2.1)或192个(3.0,Kepler)CUDA核心,但是warp大小仍然是32.

  • 这些新SM的扭曲计划如何?
  • 车道1到车道32是否一起运行,或者像上面提到的车道1到车道8,车道9到车道16,......在旧的CUDA SM上?

cuda

5
推荐指数
1
解决办法
951
查看次数

标签 统计

cuda ×3

gpgpu ×2

nvidia ×2

gpu ×1

gpu-programming ×1

warp-scheduler ×1