【发布时间】:2015-07-19 02:14:58
【问题描述】:
我想知道在 Cuda 中执行以下操作的最佳方法是什么:想象*您有一个长数组并希望所有元素的总和低于 1。如果总和高于 1,则将每个元素除以 2并再次计算总和。除以二和计算总和是在 gpu 上完成的。我现在的问题是:在 cpu 端检查总和是否低于 1 的最佳方法是什么?我可以在每次迭代中执行 cudaMemcpy,但我也读到(并且已经看到)最好在两个内存之间进行尽可能少的传输。我找到了动态并行,我想也许我用一个块和一个线程启动了一个内核,它执行while循环并调用和和除内核,但不幸的是我的硬件只有计算能力3.2和动态并行仅从 3.5 开始。那么除了每次迭代都做一个cudaMemcpy来告诉cpu它可以停止执行while循环之外还有其他方法吗?
*上面的算法只是一个解释情况的玩具问题(希望如此)。实际的算法是牛顿拉夫森方法,但我的问题对于任何迭代方法仍然有效,我必须决定是否停止给定在 gpu 上计算的值。
【问题讨论】:
-
"我的硬件只有计算能力3.2"是什么意思?
-
有点像版本号。我使用 Jetson Tk1 板。它具有计算能力 3.2。这意味着它具有 Kepler 架构 (3) 并且启用了某些功能 (.2) (see here) 但不是 dynamic parallism 需要 3.5。再次阅读句子后sry,是的,缺少一些东西。
标签: while-loop cuda