【发布时间】:2019-05-15 13:47:57
【问题描述】:
我已经为这个问题搜索了一个月。我无法在 CUDA 中同步块。
我已经阅读了很多关于 atomicAdd、合作组等的帖子。我决定使用全局数组,以便块可以写入全局数组的一个元素。写完之后,一个block线程等待(即陷入while循环),直到所有block都写入全局数组。
当我使用 3 个块时,我的同步效果很好(因为我有 3 个 SM)。但是使用 3 个街区给了我 12% 的入住率。所以我需要使用更多的块,但它们不能同步。 问题是:一个 SM 上的一个块等待其他块,因此 SM 无法获得另一个块。
我能做什么?区块数量多于 SM 数量时,如何同步区块?
CUDA-GPU 规格:CC。 6.1, 3 SM, windows 10, VS2015, GeForce MX150 显卡。 请帮我解决这个问题。我用了很多代码,但没有一个有效。
【问题讨论】:
-
你是对的 - 你不能在 CUDA 中同步块。
-
我可以,但是当 SM 的数量和块的数量相等时。没有办法是没有意义的。我需要它。
-
这很有意义。架构和编程模型基本上无法实现这种同步。如果这对您不起作用,那么您要么需要不同的算法,要么需要使用不同类型的并行硬件。仅仅因为你需要某样东西或认为它没有意义并不会自动使它成为可能
-
动态并行呢?
-
怎么样?
标签: parallel-processing cuda nvidia gpu