2014-10-07 218 views
0

我有几个关于cuda的问题。以下是一本关于并行编程的书籍。它显示线程是如何在装置分配用于两个向量的乘积中的每个0 threadblock长度8192如何在单个块内执行cuda线程?

enter image description here

1)的有15个SIMD线程。这15个线程在特定时间并行执行还是只执行一个线程?

2)本例中每个块包含512个元素。这个数字取决于硬件还是程序员的决定?

回答

0

从你的例证,似乎:

  • 网格由16个线程块,编号从0到15
  • 每块由16个“SIMD线程”组成,编号从0到15
  • 每个“SIMD线程”计算32个向量元素的乘积。

它不一定是显而易见的插图是否 “SIMD线程” 是指,在CUDA(OpenCL的)的说法:的

  • 经线波前)32 线程工作项目

或:

  • 螺纹工作项)上32个元件

我将假定前(“SIMD线程” =经纱/波前)的工作,因为它是一个更合理的假设性能 - 明智的,但后者在技术上不是不正确的,它只是次优设计(至少在目前的硬件上)。在threadblock 0


1)有15个SIMD线程。这15个线程在特定时间并行执行还是只执行一个线程?

如上所述,有16经纱(编号从0到15,这使得16)在螺纹块0,它们中的每制成32个线程。这些线程同时并行地以锁步执行。根据底层硬件的功能,这些扭曲是相互独立执行的,顺序或并行执行。例如,硬件可能能够安排多个经纱同时执行。

2)在这个例子中,每个块包含512个元素。这个数字取决于硬件还是程序员的决定?

在这种情况下,这只是程序员的决定,但在某些情况下,硬件限制也可能迫使程序员改变设计。例如,块可以处理的最大线程数,并且网格可以处理的最大块数。

2

1) 在这个特定的例子中,每个线程似乎被分配到向量中的32个元素。由单个线程执行的代码按顺序执行。

2) 线程块的大小取决于程序员。但是,考虑到执行代码的硬件,线程块的数量和大小会受到限制。有关更多信息,请参阅本精心制作的答案: Understanding CUDA grid dimensions, block dimensions and threads organization (simple explanation)

+0

我不明白第一个问题的答案 – DesirePRG 2014-10-07 09:52:44

+0

今天晚些时候我可以给你一个代码示例,在手机上编写代码是很乏味的。 :) – Jesse 2014-10-07 10:20:27

+0

检查Cicada的答案,它比这个更好。 – Jesse 2014-10-07 20:48:13