有没有办法动态确定cuda流的数量?

时间:2014-09-24 05:23:23

标签: cuda

有没有办法在程序执行期间而不是在编译时确定cuda流的数量?就像使用“新”命令一样。 (“流”是指代码块,而不是线程)

编辑1

(回复最后评论)说

for(int i = 0; i < nstreams; ++i)

    (Some serial code here, not related to kernel or cuda memory copy);

    someKernel<<<xx, yy, 0, stream[i]>>>(param list);

end

如果没有串行代码,如果我的理解正确,内核应该并行执行?

但是,如果串行代码可以由i并行化(即,如果取出则可以以OpenMP方式并行化),则内核是否会并发执行。它会影响并发吗?

1 个答案:

答案 0 :(得分:2)

是的,可以在运行时确定流的数量。

int num_streams;
// ... set num_streams at runtime
cudaStream_t streams[num_streams];
for (int i = 0; i < num_streams; i++)
  cudaStreamCreate(&(streams[i]));

以下结构也有效:

int num_streams;
// ... set num_streams
cudaStream_t *streams = (cudaStream_t *)malloc(num_streams*sizeof(cudaStream_t));
for (int i = 0; i < num_streams; i++)
  cudaStreamCreate(&(streams[i]));

或:

int num_streams;
// ... set num_streams
cudaStream_t *streams = new cudaStream_t[num_streams];
for (int i = 0; i < num_streams; i++)
  cudaStreamCreate(&(streams[i]));