动态并行性 - 将共享内存的内容传递给生成的块?
Dynamic parallelism - passing contents of shared memory to spawned blocks?
虽然我编写 CUDA 内核已有一段时间了,但我还没有使用动态并行 (DP)。我遇到了一项我认为可能适合的任务;但是,我希望能够使用 DP 的方式是:
如果块发现它需要更多线程来完成它的工作,它会产生它们;它赋予其生成的线程 "what it knows" - 本质上是其共享内存的内容,每个生成的线程块在其自己的共享内存中获得一份副本;线程使用它们的父线程 "knew" 来弄清楚它们需要继续做什么,然后去做。
AFAICT,不过,这种 "inheritance" 共享内存不会发生。全局内存(以及通过内核参数的常量内存)是 "parent" DP 内核块向其 "child" 块传递信息的唯一途径吗?
没有您设想的那种机制。父线程不能与通过动态并行启动的子内核共享其本地内存或其块的共享内存。唯一的选择是在父线程需要将瞬态数据传递给子内核时使用全局或动态分配的堆内存。
虽然我编写 CUDA 内核已有一段时间了,但我还没有使用动态并行 (DP)。我遇到了一项我认为可能适合的任务;但是,我希望能够使用 DP 的方式是:
如果块发现它需要更多线程来完成它的工作,它会产生它们;它赋予其生成的线程 "what it knows" - 本质上是其共享内存的内容,每个生成的线程块在其自己的共享内存中获得一份副本;线程使用它们的父线程 "knew" 来弄清楚它们需要继续做什么,然后去做。
AFAICT,不过,这种 "inheritance" 共享内存不会发生。全局内存(以及通过内核参数的常量内存)是 "parent" DP 内核块向其 "child" 块传递信息的唯一途径吗?
没有您设想的那种机制。父线程不能与通过动态并行启动的子内核共享其本地内存或其块的共享内存。唯一的选择是在父线程需要将瞬态数据传递给子内核时使用全局或动态分配的堆内存。