gpt4 book ai didi

cuda - GPU 中的并行性 - CUDA/OpenCL

转载 作者:行者123 更新时间:2023-12-04 09:41:43 27 4
gpt4 key购买 nike

我有一个关于 GPU 上的 CUDA 或 OpenCL 代码中的并行性的一般问题。我使用 NVIDIA GTX 470。

我在 Cuda 编程指南中简要阅读,但没有找到相关答案,因此在这里提问。

我有一个调用 CUDA 内核的顶级函数(对于同一个内核,我有一个 OpenCL 版本)。对于 3 个不同的数据集(图像数据 R、G、B),这个顶级函数本身在我的主函数的“for 循环”中被调用了 3 次
并且实际的小码还对图像/帧中的所有像素进行了处理,因此它有 2 个“for 循环”。

我想知道的是这里利用了什么样的并行性——任务级并行性还是数据并行性?

所以我想了解的是,这个 CUDA 和 C 代码是否为小代码和顶级代码中的不同功能/功能创建了多个线程并在其中执行它们
并行并利用任务并行性。如果是,谁创建它,因为代码中没有明确包含或链接的线程库。

或者

它为不同的“for 循环”迭代创建线程/任务,这些迭代是独立的,从而实现数据并行。
如果它执行这种并行性,它是否只是通过注意到不同的 for 循环迭代没有依赖关系,因此可以并行调度来利用这一点?

因为我没有看到任何特殊的编译器构造/内部函数(与 openMP 中的循环并行),它告诉编译器/调度程序并行调度这样的循环/函数?

任何阅读 Material 都会有所帮助。

最佳答案

GPU 上的并行性是 SIMT(单指令多线程)。对于 CUDA 内核,您指定一个块网格,其中每个块都有 N 个线程。 CUDA 库完成了所有的工作,CUDA 编译器 (nvcc) 生成由 GPU 执行的 GPU 代码。 CUDA 库告诉 GPU 驱动程序以及 GPU 上的线程调度程序应该有多少线程应该执行内核((块数)x(线程数))。在您的示例中,顶级函数(或主机函数)仅执行异步并立即返回的内核调用。不需要线程库,因为 nvcc 创建了对驱动程序的调用。

示例内核调用如下所示:

helloworld<<<BLOCKS, THREADS>>>(/* maybe some parameters */);

OpenCL 遵循相同的范例,但您在运行时编译您的内核(如果它们未预编译)。指定执行内核的线程数,其余的由 lib 完成。

学习 CUDA (OpenCL) 的最佳方法是查看 CUDA Programming Guide ( OpenCL Programming Guide ) 并查看 GPU Computing SDK 中的样本.

关于cuda - GPU 中的并行性 - CUDA/OpenCL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8603471/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com