异步函数使得主机端与设备端并行执行:控制在设备还没有完成前就被返回给主机线程;
包括:
kernel启动; 以Async为后缀的内存拷贝函数; device到device内存拷贝函数;存储器初始化函数,比如cudaMemset(),cudaMemset2D(),cudaMemset3D();
一些设备能够在kernel执行期间,执行pinned memory和显存间的数据传输,可以通过调用cudaGetDeviceProperties()检验;
异步执行意义:一个流内的计算与数据拷贝时依次进行的;
不同流之间的这些操作可以同时执行;
当GPU传输数据时,主机线程不必等待可以进行一些运算,提高cpu与GPu并行工作;
如果调用了同步版本的GPU函数,只能在设备完成任务后才能返回主机线程,此时主机端进入yield,block或者spin状态,可以由cudaSetDeviceFlags()或cuCtxCreate()来选择主机端在进行GPU计算时进入的状态;
流:程序通过流来管理并发,每个流是按顺序执行的一系列操作;不同流之间乱序执行或者并行执行;定义是创建一个cudaStream_t对象;