CUDA中的块间同步

时间:2018-12-14 09:48:18

标签: parallel-processing cuda nvidia gpu-programming

我已经搜索了一个月以解决这个问题。我无法在CUDA中同步块。

我已经阅读了很多有关atomicAdd,合作组等的文章。我决定使用全局数组,以便一个块可以在全局数组的一个元素上写。写完之后,一个块的线程等待(即被困在while循环中),直到所有块都写入全局数组为止。

当我使用3个块时,我的同步效果很好(因为我有3个SM)。但是使用3个街区可让我占用12%的空间。因此,我需要使用更多的块,但是它们无法同步。 问题是:SM上的一个块正在等待其他块,因此SM无法获得另一个块。

我该怎么办?当块数超过SM数量时,如何同步块?

CUDA-GPU规范:CC。 6.1、3 SM,Windows 10,VS2015,GeForce MX150图形卡。 请帮我解决这个问题。我使用了很多代码,但没有一个起作用。

1 个答案:

答案 0 :(得分:3)

进行块间同步的CUDA编程模型方法是

  1. (隐式)使用内核启动自身。在内核启动之前或完成之后,所有(已启动内核中的)块都同步到已知状态。无论从主机代码启动内核还是作为CUDA动态并行启动的一部分,这在概念上都是正确的。

  2. (明确)在CUDA Cooperative groups中使用网格同步。这有各种各样的支持要求,您将在other question中开始进行探索。支持的最简单定义是是否设置了appropriate propertycooperativeLaunch)。您可以使用cudaGetDeviceProperties()以编程方式查询属性。