我即将使用 CUDA 技术创建支持 GPU 的程序。它应该是 C# Emgu 或 C++ Cuda 工具包(尚未确定)。
我需要使用所有 GPU 功能(我有 16 个 GPU 核心的卡)。如何并行运行 16 个任务?
首先。在 6xx 系列之前,16 个 GPU 内核等于 16*8=128 个内核。在 6xx 系列上,它是 16*32=512 核。这并不意味着您应该将自己限制在 128/512 个任务上。
第二:emgu 似乎是 .NET 的 OpenCV 包装器,与图像处理有关。它通常与 GPU 编程无关。可能是某些算法已被 gpu 加速,但我对此一无所知。在这方面 CUDA 的替代品是 OpenCL,而不是 OpenCV。如果您将像您所说的那样使用 CUDA 技术,那么您别无选择 CUDA,因为只有 CUDA 才是 CUDA。
在启动任务时,您只需告诉 GPU 您希望运行多少线程。实际上,您告诉 GPU 有多少块,以及多少线程 pr。阻止你想运行。这是在您调用 cuda 函数本身时完成的。您也不想将自己限制为 128/512 线程,但要进行实验。
不了解您对 GPGPU 编程的了解,但请记住,您不能像在 CPU 上那样运行任务。您不能运行 128 个不同的任务,所有线程都必须运行完全相同的指令(分支时除外,这通常应避免)。
一般来说,您需要足够的线程来填充所有流式多处理器。至少是.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。