Cuda流数据独立

时间:2012-10-04 15:58:31

标签: cuda cuda-streams

有人可以解释并发Cuda流中的数据独立性要求吗? 假设我想在8个并发流中运行以下内核

Kernel<<<blocks, threads>>>(float *readOnlyInput, float *output);

所有流都可以读取相同的* readOnlyInput并在不同的*输出数组上写入吗?

或者为了实现并发,他们还需要从不同的内存位置读取数据?

将同时执行上述伪代码片段, 或者它需要* readOnlyInput + i * size来确保并发性?

cudaStream_t stream[8];

int size = 1000;//some array size

int blocks =2, threads=256;//some grid dims

for (int i = 0; i < 8; ++i){

    cudaStreamCreate(&stream[i]);

}
for (int i = 0; i < 8; ++i){

    Kernel<<<blocks, threads, stream[i]>>>(float *readOnlyInput, float *output + i*size);

}

1 个答案:

答案 0 :(得分:1)

您可以安全地从不同流中的多个独立内核中读取相同的数据,只要有足够的同步来确保数据在任何内核启动之前完全写入,并且数据不会再次被覆盖在所有内核完成之前。