运行并行CUDA任务

时间:2012-09-04 11:23:10

标签: cuda gpu-programming

我即将使用CUDA技术创建支持GPU的程序。它应该是C#Emgu或C ++ Cuda工具包(尚未决定)。

我需要使用所有GPU电源(我的卡有16个GPU核心)。如何并行运行16个任务?

2 个答案:

答案 0 :(得分:2)

第一个。在6xx系列之前,16个GPU核心等于16 * 8 = 128个核心。在6xx系列上,它是16 * 32 = 512个核心。这并不意味着你应该将自己限制在128/512任务中。

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

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

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

答案 1 :(得分:1)

一般来说,您需要足够的线程来填充所有流式多处理器。至少是.25 * MULTIPROCESSORS * MAX_THREADS_PER_MULTIPROCESSOR

特别是在CUDA中,假设您有一些CUDA内核__global__ void square_array(float *a, int N) ...

现在,当您启动内核时,您可以指定块数和每个块的线程数

square_array <<< n_blocks, n_threads_per_block >>> (a, N);

注意:您需要更加熟悉CUDA并行编程模型,因为您没有接近将使用所有GPU功能的庄园。考虑阅读Programming Massively Parallel Processors, A Hands-on Approach