如何CUDA块/经纱/线程映射到CUDA核心?如何CUDA块/经纱/线程映射到CUDA核心?(How

2019-05-13 20:58发布

我一直在使用CUDA的几个星期,但我有块/扭曲/线程分配一些疑问。 我从视图 (大学项目) 说教点研究架构 ,因此达到峰值性能是不是我关心的。

首先,我想知道如果我直了这些事实:

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

  2. 每个块被分配给流式多处理器(SM)。 一旦分配就不能迁移到另一个SM。

  3. 每个SM拆分它自己的块分成扭曲(目前32个线程的最大尺寸)。 沿经线中的所有线程在SM的资源同时执行。

  4. 一个线程的实际执行由包含在SM的CUDA核心进行。 有线程和内核之间没有特定的映射。

  5. 如果经包含20个线程,但目前只有16个可用内核,经将无法运行。

  6. 如果上一个块包含48个线程另一方面,它将被分成2根经纱和它们将并行执行提供了足够的内存可用。

  7. 如果一个线程在核心启动时,则停滞存储器存取或长期浮点运算,它的执行可能会继续在不同的核心。

他们是否正确?

现在,我有一块GeForce 560的Ti,从而根据它配备8 SM的规格,每个包含48个CUDA内核(384芯总共)。

我的目标是确保该架构的每一个核心执行相同的指令。 假设我的代码将不会需要比在每个SM中可用的那些更多的寄存器,我想象中的不同的方法:

  1. 创建的每个48个螺纹8点的块,使得每个SM有1块来执行。 在这种情况下,将在48个一线在SM(利用为他们提供所有的48个内核)并行执行?

  2. 是否有任何区别,如果我启动的6个线程64块? (假设它们将被该SMS之间均匀映射)

  3. 如果I“浸没”在调度工作GPU(创建每个1024螺纹1024块,例如)是它合理地假定,所有的核心将在某一点被使用,并且将执行相同的计算(假设线程从不拖延)?

  4. 有没有什么办法来检查使用探查这些情况?

  5. 是否有这种东西的内容? 我读了CUDA编程指南,并在“编程大规模并行处理器”和“CUDA应用程序的设计和开发”,致力于硬件架构的章节; 但我无法得到一个准确的答案。

Answer 1:

最好的参考的两个是

  1. NVIDIA费米计算架构白皮书
  2. GF104评论

我会尽力回答您的每一个问题。

程序员的工作划分成线,线成线程块和线程块分成网格。 计算工作总代理分配线程块流多处理器(SM)。 一旦一个线程块被分配到SM的线程块的资源被分配(经纱和共享存储器)和线程被分成32个线程称为经纱的基团。 一旦经分配,它被称为主动经。 所述两根经调度挑每循环两个主动经纱和经纱调度到执行单元。 有关执行单元和指令调度更多信息请参考1个 p.7-10和2 。

4' 。 有laneid(在经纱的索引)和核心之间的映射。

5' 。 如果经纱含有小于32个线程它在大多数情况下要执行的一样,如果它有32个线程。 经纱可以具有小于32的活动线程有以下几个原因:每个块的线程的数目不整除32,该程序执行的发散块,使得没有采取当前路径线程标记为不活动,或在经纱线程退出。

6' 。 一个线程块将分为WarpsPerBlock =(ThreadsPerBlock + WarpSize - 1)/ WarpSize没有为经调度不要求选择在同一个线程块中的两个经纱。

7' 。 执行单元将不会失速上的存储器操作。 如果资源不可用时的指令是准备被分派的指令将在未来再次被派遣当资源可用。 经纱可以在障碍失速,在存储器操作,纹理操作,数据依赖关系,...受阻的翘曲没有资格通过warp调度来选择。 费米是有用的每个周期至少2根资格经纱,使经调度器可以发出指令。

见参考文献2用于GTX480和GTX560之间的差异。

如果你读了参考材料(几分钟),我想你会发现,你的目标是没有意义的。 我会尽力给您的问题作出回应。

1。 如果启动内核<<< 8,48 >>>您将获得每8块以32 2根经纱和16个线程。 谁也不能保证,这些8块将被分配到不同的短信。 如果2块被分配给一个SM然后可能的是,每根经调度器可以选择一个经纱和执行翘曲。 您只能使用48个内核的32。

2' 。 有48个螺纹8块和6个螺纹64块之间的大的差异。 让我们假设你的内核没有分歧和每个线程执行10个指令。

  • 8个块具有48个线程= 16个经线×10个指令= 160名的指令
  • 64个块与6个线程= 64个经线×10个指令= 640名的指令

为了获得最佳效率的分工应在32个线程的倍数。 硬件不会合并来自不同的经线线程。

3' 。 甲GTX560可以有8 SM * 8块=在时间64个块或8 SM * 48个经线= 512翘曲如果内核没有最大出寄存器或共享存储器。 在对工作的一部分的任何给定的时间将短信激活。 每个SM具有多个执行单元(比CUDA核心以上)。 哪些资源是在任何给定时间使用依赖于经调度和应用程序的指令组合。 如果你不这样做TEX操作,那么TEX单位将被闲置。 如果你没有做特殊浮点运算的SUFU单位将闲置。

4' 。 平行Nsight和Visual探查秀

一个。 执行IPC

湾 IPC发行

C。 每个活动周期活动warp

d。 每个活动周期合格经线(仅Nsight)

即 经失速的原因(仅Nsight)

F。 每条指令的活动线程执行

探查器不显示任何执行单元的使用率。 对于GTX560粗略估计将IssuedIPC / MaxIPC。 对于MaxIPC假设GF100(GTX480)为2 GF10x(GTX560)为4,但目标是3是一个更好的目标。



Answer 2:

“E.如果经包含20个线程,但目前只有16个可用内核,经将无法运行。”

是不正确的。 你是混淆了他们的通常意义上的核心(CPU中也使用) - 在GPU“多处理器”的数量,在nVIDIA的市场营销讲内核(“我们的卡上有数以千计的CUDA核心的”)。

的经本身只能被调度在单个核心(=多处理器),并且可以运行多达同时32个线程; 它不能使用多单核心。

数字“48根经纱”是每个多处理器的活性经线(经纱,其可被选择以被调度用于在下一周期工作,在任何给定周期),与计算能力2.x的NVIDIA图形芯片的最大数目; 并且该号码对应于1536 = 48×32个线程。

答案基于此网络研讨会



文章来源: How do CUDA blocks/warps/threads map onto CUDA cores?