gpu信息获取
cuda api:
cudaGetDeviceCount(int device_count): 获取gpu设备块数
cudaSetDevice(int device_id):设置gpu_id
cudaMalloc(), cudaStreamCreate
stream
在Stream的帮助下,CUDA程序可以有效地将内存读取和数值运算并行,从而提升数据的吞吐量。
cuda 并行性表现主要在两个层面上:
Kernel level
Grid level
cuda stream指一堆异步的cuda操作, 按照host代码调用顺序在device上执行。
所有的cuda操作(kernel执行和数据传输)都会显式或隐式运行于stream上
- 隐式声明和显式声明
异步且基于stream的kernel执行和数据传输能够实现以下几种类型的并行:
· Host运算操作和device运算操作并行
· Host运算操作和host到device的数据传输并行
· Host到device的数据传输和device运算操作并行
· Device内的运算并行
所有stream的执行都是异步的, 必要的时候需要做同步操作
cudaStreamSynchronize
//基本函数
cudaStream_t stream//定义流
cudaStreamCreate(cudaStream_t * s)//创建流
cudaStreamDestroy(cudaStream_t s)//销毁流
//显性同步
cudaStreamSynchronize()//同步单个流:等待该流上的命令都完成
cudaDeviceSynchronize()//同步所有流同步:等待整个设备上流都完成
cudaStreamWaitEvent()//通过某个事件:等待某个事件结束后执行该流上的命令
cudaStreamQuery()//查询一个流任务是否完成
//回调
cudaStreamAddCallback()//在任何点插入回调函数
//优先级
cudaStreamCreateWithPriority()
cudaDeviceGetStreamPriorityRange()
以上代码定义了两个流,每个流有三个命令,见注释
同一个流内顺序执行,流与流间异步执行