持久GPU功能/操作

时间:2013-02-06 21:10:12

标签: cuda

我想知道是否可以编写持久的GPU功能。我有疑虑,但我不确定调度程序是如何工作的。

我正在寻找处理未知数量的数据点(约5000万)。数据以大约20个左右的形式到达。如果我可以将这20个点放入GPU'桶'中并且将这个'持久'操作抓住并在它们进入时处理它将会很好。完成后,抓住结果。
当存储桶为空时,我可以保持GPU忙/虚拟数据。但我认为部分空桶的竞争条件将是一个问题 我怀疑在这个持久操作运行时我无法在GPU上运行任何其他操作。即把其他非专用的SM用于工作。

这是一种可行的(费米)GPU方法,还是一个坏主意?

1 个答案:

答案 0 :(得分:1)

我不确定这个持久内核是否可行,但肯定会效率很低。虽然这个想法很优雅,但它不适合GPU:你必须全局沟通哪个线程选择哪个元素从存储桶中取出,一些线程甚至可能永远不会启动,因为它们等待其他人完成并且存储桶必须是声明为volatile,因此减慢了整个输入数据。

解决问题的一个更常见的解决方案是将数据划分为块并异步将块复制到GPU上。您将使用两个流,一个处理最后发送的块,另一个从主机发送新块。这实际上将同时完成。这样你可能会隐藏大部分转移。但是不要让块变得太小或者你的内核会因占用率低而性能降低。