相关疑难解决方法(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万
查看次数

GPU Kepler CC3.0处理器不仅是流水线架构,还是超标量?

在CUDA 6.5的文档中写道:http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#ixzz3PIXMTktb

5.2.3.多处理器级别

...

  • 8L用于计算能力3.x的设备,因为多处理器在一个时钟周期内每次发生一对指令,一次四个经线,如Compute Capability 3.x中所述.

这是否意味着GPU Kepler CC3.0处理器不仅是流水线架构,还是超标量?

  1. 流水线 - 这两个序列并行执行(一次执行不同的操作):

    • LOAD [addr1] - > ADD - > STORE [addr1] - > NOP
    • NOP - > LOAD [addr2] - > ADD - > STORE [addr2]
  2. 超标量 - 这两个序列并行执行(一次执行相同的操作):

    • LOAD [reg1] - > ADD - > STORE [reg1]
    • LOAD [reg2] - > ADD - > STORE [reg2]

cuda gpgpu nvidia gpu-programming kepler

4
推荐指数
1
解决办法
223
查看次数

CUDA核心有矢量指令吗?

根据大多数NVidia文档,CUDA核心是标量处理器,只应执行标量操作,这将被矢量化为32分量SIMT扭曲.

但OpenCL具有矢量类型,例如.uchar8它具有与ulong(64位)相同的大小,可以由单个标量核心处理.如果我对uchar8向量进行操作(例如,按组件添加),它是否也会映射到单个核心上的指令?

如果一个块(工作组)中有1024个工作项,并且每个工作项处理一个uchar8,那么这将有效地uchar并行处理8120 吗?

编辑: 我的问题是,如果在CUDA架构上(独立于OpenCL),在"标量"核心中有一些矢量指令可用.因为如果核心已经能够处理32位类型,例如它也可以处理32位的添加是合理的uchar4,特别是因为向量操作经常用在计算机图形中.

cuda gpu gpgpu nvidia opencl

3
推荐指数
1
解决办法
871
查看次数

标签 统计

cuda ×3

gpgpu ×3

nvidia ×3

gpu ×1

gpu-programming ×1

kepler ×1

opencl ×1

warp-scheduler ×1