c++ - 从 CUDA 设备函数/内核中并行化一个方法

标签 c++ multithreading parallel-processing cuda dynamic-parallelism

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

所以有一个内核

__global__ void complexStuff(...)

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

__device__ void interpolate(...)

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

很明显内核complexStuff()可以通过使用 <<<...>>> 从主机代码调用它来轻松并行化句法。同样重要的是 complexStuff()已经并行化。

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

最佳答案

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

关于c++ - 从 CUDA 设备函数/内核中并行化一个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21438481/

相关文章:

r - 如何在Windows上的R中并行化-示例?

c++ - QTableView拖放行无法正常工作

C++。 var1 = new (_field) Constructor() 的含义

c++ - 如何使用系统("start E:\myprogram.exe")

linux - 如何使 GNU Parallel 使用记录分隔符从多个文件中获取输入

ruby - 访问存储在实例变量中的线程的线程变量

c# - 启动画面+主窗口

python - 这个 joblib 并行语法是做什么的?这么多括号

c++ - (新手模式)调用时变量的属性

algorithm - c中的并行读/写文件