CUDA 动态并行的替代方案

问题描述 投票:0回答:1

我想我对 CUDA 编程模型和一般编程非常陌生。我正在尝试并行化期望最大化算法。我正在开发具有计算能力 2.0 的 gtx 480。起初,我有点认为设备没有理由启动自己的线程,但当然,我犯了一个悲惨的错误。我偶然发现了这个pdf。

http://docs.nvidia.com/cuda/pdf/CUDA_Dynamic_Parallelism_Programming_Guide.pdf

不幸的是,动态并行性仅适用于最新最好的 GPU,计算能力为 3.5。在不深入讨论太多细节的情况下,动态并行性的替代方案是什么? CPU EM 算法中的循环具有许多依赖性并且高度嵌套,这似乎使动态并行性成为一种有吸引力的能力。我不确定我的问题是否有意义,所以请询问您是否需要澄清。

谢谢!

parallel-processing cuda expectation-maximization
1个回答
2
投票

正如@JackOLantern 所指出的,动态并行性可以简单地描述为从设备代码(

__global__
__global__
函数)调用内核(即
__device__
函数)的能力。

由于内核调用是机器启动多个线程以响应单个函数调用的主要方法,因此实际上没有直接替代方案可以在不支持动态并行性的设备中提供所有动态并行性功能(即 cc 3.5 之前的设备)。

如果没有动态并行性,您的整体代码几乎肯定会涉及 CPU 代码和 GPU 代码之间的更多同步和通信。

主要方法是将代码的某些单元实现为可并行的,将其转换为内核,并以本质上非嵌套的方式处理代码。重复的功能可以通过在内核中循环或在调用内核的主机代码中循环来完成。

有关我试图描述的内容的图示示例,请参阅本演示文稿的第 14 张幻灯片,其中介绍了 CUDA 5 的一些新功能,包括动态并行性。右边的代码架构是动态并行实现的算法。左边的架构是在没有动态并行的情况下实现的相同功能。

© www.soinside.com 2019 - 2024. All rights reserved.