2

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

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

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

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

上面的伪代码片段会并发执行,还是需要 *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);

}
4

1 回答 1

1

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

于 2012-10-04T17:53:35.367 回答