我有一个已经并行化的 CUDA 内核,它执行一些需要频繁插值的任务。
所以有一个内核
__global__ void complexStuff(...)
其中一次或多次调用此插值设备函数:
__device__ void interpolate(...)
插值算法在三个维度上连续进行 WENO 插值。这是一个高度可并行化的任务,我迫切希望将其并行化!
很明显内核complexStuff()
可以通过使用 <<<...>>>
从主机代码调用它来轻松并行化句法。同样重要的是 complexStuff()
已经并行化。
但我不清楚如何从 CUDA 设备函数内部并行化某些东西/创建新线程……这甚至可能吗?有人知道吗?
最佳答案
您可能需要考虑动态并行(一些资源 here、here 和 here)以便从另一个 CUDA 内核调用一个 CUDA 内核。它要求您的设备计算能力为 3.5 或更高。它带有许多可能会降低性能的限制和限制(在第 3 个链接中提到)。
我的建议是首先考虑使用 complexStuff(...)
工作量乘以 interpolate(...)
工作量调用您的 CUDA 内核。换句话说,静态猜测您需要执行的最大并行细粒度作业是多少。然后配置您的内核以使用 block 线程执行那些细粒度的作业。请注意,这只是在不知道您的程序代码的情况下的推测。
关于c++ - 从 CUDA 设备函数/内核中并行化一个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21438481/