我正在尝试学习一些 cuda,但我不知道如何解决以下情况:
考虑两组 G1 和 G2:
- G1 有 2 个向量,每个向量有 3 个元素 a1 = {2,5,8} 和 b1 = {8,4,6}
- G2 有 2 个向量,每个向量有 3 个元素 a2 = {7,3,1} 和 b2 = {4,2,9}
任务是对每个组中的向量 a 和 b 求和,并返回一个排序后的 c 向量,因此:
G1 will give c1 = {10,9,14) => (sort algorithm) => c1 = {9,10,14}
G2 will give c2 = {11,5,10) => (sort algorithm) => c1 = {5,10,11}
如果我有一个具有 92 个 cuda 核心的 gforce,我想创建 92 个 G 组并并行计算所有总和,所以
core 1-> G1 -> c1 = a1 + b1 -> sort c1 -> return c1
core 2-> G2 -> c2 = a2 + b2 -> sort c2 -> return c2
....
core 92-> G92 -> c92 = a92 + b92 -> sort c92 -> return c92
下面的内核将两个向量并行求和并返回另一个:
__global__ void add( int*a, int*b, int*c )
{
c[blockIdx.x] = a[blockIdx.x] + b[blockIdx.x];
}
我无法理解的是如何让内核不仅处理整个向量,而不仅仅是向量的一个元素,而且它们返回整个向量。
像这样的东西:
__global__ void add( int*a, int*b, int*c, int size )
{
for (int i = 0; i < size ; i++)
c[i] = a[i] + b[i];
//sort c
}
如果可能的话,谁能解释一下我该怎么做?