[Parallel Computing] cuda 默认流&非默认流 (异步流和可视化)分析


并发 cuda stream
默认流具有更高的优先级,在QuEST中默认流为Statevec_compactUnitaryKernel 函数,同时占用的gpu时间和运算重点都在此核函数上。

给定流中的操作会按序执行。

  1. 就不同非默认流中的操作而言,无法保证其会按彼此之间的任何特定顺序执行。
  2. 默认流会受到阻碍,并在其他所有流完成之后方可运行,但其亦会阻碍其他流的运行直至其自身已运行完毕。

定义非默认流,把cudaStream_t stream; 作为参数传递,让编译器自动完成默认流的创建和复制。
cudaMallocManagedcudaMemPrefetchAsync

更详细的内存管理:

  1. cudaMalloc GPU分配内存
  2. cudaMallocHost 把内存分配在cpu上

第三个杀手锏 cudaMemcpyAsync