0

我有一个已经并行化的 CUDA 内核,它执行一些需要频繁插值的任务。

所以有一个内核

__global__ void complexStuff(...)

它调用一次或多次此插值设备函数:

__device__ void interpolate(...)

插值算法在三个维度上连续进行 WENO 插值。这是一个高度可并行化的任务,我迫切希望并行化!

很明显,内核complexStuff()可以很容易地通过使用<<<...>>>语法从主机代码调用它来实现并行化。complexStuff()已经并行化也很重要。

但是我不清楚如何从 CUDA 设备函数内部并行化某些东西/创建新线程......这甚至可能吗?有人知道吗?

4

1 回答 1

2

为了从另一个 CUDA 内核内部调用 CUDA 内核,您可能需要考虑动态并行(一些资源hereherehere )。它要求您的设备计算能力为 3.5 或更高。它带有许多可能会降低性能的限制和限制(在第三个链接中提到)。
我的建议是首先考虑用complexStuff(...)工作量乘以工作量来调用你的 CUDA 内核interpolate(...)。换句话说,静态猜测你需要做的最大并行细粒度作业是多少。然后配置你的内核来执行那些细粒度的工作与块线程。请注意,这只是在不知道您的程序代码的情况下的推测。

于 2014-01-29T18:05:24.577 回答