运行并行CUDA任务

运行并行CUDA任务,cuda,gpu,Cuda,Gpu,我即将使用CUDA技术创建支持GPU的程序。它应该是C++的EGGU或C++ CUDA工具包(尚未决定)。p> 我需要使用所有的GPU电源(我有16个GPU内核的卡)。如何并行运行16个任务 一般来说,您需要足够的线程来填充所有流式多处理器。至少为.25*多处理器*每个多处理器最多线程数 特别是现在在CUDA中,假设您有一些CUDA内核\uuuuuu全局\uuuuuuuu无效正方形数组(float*a,int N) 现在,在启动内核时,指定块的数量和每个块的线程数量 square_array &

我即将使用CUDA技术创建支持GPU的程序。它应该是C++的EGGU或C++ CUDA工具包(尚未决定)。p>
我需要使用所有的GPU电源(我有16个GPU内核的卡)。如何并行运行16个任务

一般来说,您需要足够的线程来填充所有流式多处理器。至少为
.25*多处理器*每个多处理器最多线程数

特别是现在在CUDA中,假设您有一些CUDA内核
\uuuuuu全局\uuuuuuuu无效正方形数组(float*a,int N)

现在,在启动内核时,指定块的数量和每个块的线程数量

square_array <<< n_blocks, n_threads_per_block >>> (a, N);
方形阵列>(a,N);

注意:您需要更加熟悉CUDA并行编程模型,因为您不需要在一个将使用所有GPU能力的庄园中接近它。考虑阅读。

一般来说,你希望有足够的线程来填充所有的流式多处理器。至少为

.25*多处理器*每个多处理器最多线程数

特别是现在在CUDA中,假设您有一些CUDA内核
\uuuuuu全局\uuuuuuuu无效正方形数组(float*a,int N)

现在,在启动内核时,指定块的数量和每个块的线程数量

square_array <<< n_blocks, n_threads_per_block >>> (a, N);
方形阵列>(a,N);

注意:您需要更加熟悉CUDA并行编程模型,因为您不需要在一个将使用所有GPU能力的庄园中接近它。考虑阅读。

< P>在6xx之前的系列上,16个GPU内核等于16*8=128个内核。在6xx系列上,它是16*32=512芯。这并不意味着您应该将自己的任务限制在128/512

第二:emgu似乎是.NET的OpenCV包装器,与图像处理相关。它通常与GPU编程无关。也许有些算法已经被gpu加速了,但我对此一无所知。在这方面,CUDA的替代品是OpenCL,而不是OpenCV。如果你要像你说的那样使用CUDA技术,你别无选择,因为只有CUDA是CUDA

在开始任务时,您只告诉GPU希望运行多少线程。实际上,你告诉GPU你希望运行多少个块,多少个线程。这是在调用cuda函数本身时完成的。您也不想将自己限制在128/512个线程,而是要进行实验


我不知道你在GPGPU编程方面的知识,但请记住,你不能像在CPU上那样运行任务。您不能运行128个不同的任务,所有线程都必须运行完全相同的指令(分支时除外,通常应避免分支)。

首先。在6xx之前的系列上,16个GPU内核等于16*8=128个内核。在6xx系列上,它是16*32=512芯。这并不意味着您应该将自己的任务限制在128/512

第二:emgu似乎是.NET的OpenCV包装器,与图像处理相关。它通常与GPU编程无关。也许有些算法已经被gpu加速了,但我对此一无所知。在这方面,CUDA的替代品是OpenCL,而不是OpenCV。如果你要像你说的那样使用CUDA技术,你别无选择,因为只有CUDA是CUDA

在开始任务时,您只告诉GPU希望运行多少线程。实际上,你告诉GPU你希望运行多少个块,多少个线程。这是在调用cuda函数本身时完成的。您也不想将自己限制在128/512个线程,而是要进行实验


我不知道你在GPGPU编程方面的知识,但请记住,你不能像在CPU上那样运行任务。您不能运行128个不同的任务,所有线程都必须运行完全相同的指令(分支时除外,通常应避免分支)。

一点澄清:我指的是OpenCV,而不是OpenCL,因为我的主要领域确实是图像处理(考虑Emgu的原因也是如此)。对于你的其余答复-非常感谢!好啊然后说你想要它CUDA加速有点让人困惑。CUDA非常适合这种处理,但我的猜测是,如果OpenCV是GPU加速的,那么它使用OpenCL,因为这是跨供应商的。有一点澄清:我指的是OpenCV,而不是OpenCL,因为我的主要领域确实是图像处理(考虑Emgu的原因也是如此)。对于你的其余答复-非常感谢!好啊然后说你想要它CUDA加速有点让人困惑。CUDA非常适合这种处理,但我的猜测是,如果OpenCV是GPU加速的,那么它将使用OpenCL,因为这是跨供应商的。请将第一段更改为足够的线程来填充所有流式多处理器。至少为25%x多处理器x每个多处理器的最大线程数。CUDA内核不应在答案中。@GregSmith您有我可以参考的源代码吗?《CUDA C编程指南》第5.2节讨论了应用程序、设备和多处理器级别的并行性。三个非常有用的网络研讨会是(1)“CUDA翘曲和占用率”(2)“GPU性能分析和优化”(3)。(3) “CUDA C/C++流与并发”请将第一段更改为足够的线程,以填充所有流式多处理器。至少为25%x多处理器x每个多处理器的最大线程数。CUDA内核不应在答案中。@GregSmith您有我可以参考的源代码吗?《CUDA C编程指南》第5.2节讨论了应用程序、设备和多处理器级别的并行性。三个非常有用的网络研讨会是(1)“CUDA翘曲和占用率”(2)“GPU性能分析和优化”(3)。(3) “CUDA C/C++流和并发”位于