【发布时间】:2011-10-19 13:29:21
【问题描述】:
抱歉标题不好。我想不出更好的办法。
我看到的每个 CUDA 程序示例都有预定义的数据,可以进行并行化处理。 一个常见的例子是两个矩阵的和,其中两个矩阵已经被填充。但是生成新任务的程序呢?如何在 CUDA 中建模?如何传递结果以便其他线程可以开始处理它。
例如: 假设我在一项工作上运行内核。该作业生成 10 个新的独立作业。他们每个人都会产生10个新的独立工作等等。这似乎是一项高度并行的任务,因为每个作业都是独立的。问题是我不知道如何在 CUDA 中建模。 我曾尝试在 CUDA 中这样做,我在内核中使用了一个 while 循环来保持轮询线程是否可以开始计算。每个线程都分配了一个作业。但这没有用。它似乎忽略了while循环。
代码示例:
On host:
fill ready array with 0
ready[0] = 1;
On device:
__global__ void kernel(int *ready, int *result)
{
int tid = threadIdx.x;
if(tid < N)
{
int condition = ready[tid];
while(condition != 1)
{
condition = ready[tid];
}
result[tid] = 3;// later do real computation
//children jobs is now ready to work
int childIndex = tid * 10;
if(childIndex < (N-10))
{
ready[childIndex + 1] = 1; ready[childIndex + 2] = 1;
ready[childIndex + 3] = 1; ready[childIndex + 4] = 1;
ready[childIndex + 5] = 1; ready[childIndex + 6] = 1;
ready[childIndex + 7] = 1; ready[childIndex + 8] = 1;
ready[childIndex + 9] = 1; ready[childIndex +10] = 1;
}
}
}
【问题讨论】:
标签: parallel-processing gpgpu cuda