2011-03-29 36 views
9

我仍然对这些未知大小的矩阵感到愤怒,这可能从每个维度的10-20.000变化。CUDA - 如果我选择了太多块,该怎么办?

我在看CUDA sdk并想知道:如果我选择一些块太高,会怎么样?

像X和Y尺寸的9999 x 9999块的网格,如果我的硬件具有不能容纳所有这些块的SM,内核是否会出现问题或性能会崩溃?

我不知道如何在块/线程中的尺寸可能会有很大的变化..我在考虑使用我的硬件支持的最大块数,然后让它们内部的线程在整个矩阵中工作这是正确的吗?

回答

13

线程块没有与核心的一对一映射。块被调度到核心,因为它们变得可用,这意味着您可以请求尽可能多的(可能达到极限)。请求大量的块会导致系统减速,因为它会加载和卸载不执行任何内核的线程块。

您可以在运行时指定网格和块的尺寸。

编辑:这里是从文档中的网格和块的尺寸限制。

enter image description here

2

如果选择过大的块大小,你浪费了一些周期,而“死”块获得退休(通常只有几十微秒量级甚至上最大的网格大小“全尺寸”费米或GT200卡)。这不是一个巨大的惩罚。

但网格尺寸应始终可计算先验。通常,数据并行工作的可量化单位之间存在已知关系 - 例如每个数据点有一个线程,或者每个矩阵列有一个块或其他类型,这就允许在运行时计算所需的网格维度。

另一种策略是使用固定数量的块(通常只需要像GPU上每MP的4-8个一样),并让每个块/线程处理多个并行工作单元,这样每个块就变成“老大难”。如果每个线程在安装过程中有很多固定的开销成本,那么可以通过每个线程的更多工作分摊这些固定开销。

相关问题