之前一直都是用runtime API写CUDA代码,对context等不是很了解,打算简单看一下driver API。
context management:
感觉对性能调优可能会有帮助的一些API:
*
CUresult cuCtxGetSharedMemConfig (CUsharedconfig *pConfig):*
获取当前context的shared memory bank width(4 bytes/ 8 bytes);可用于检查是否存在bank conflict。CUresult cuCtxPopCurrent (CUcontext *pctx):
将当前CPU thread的context从当前CPU thread弹出;对应的context的句柄存放在pctx中,之后可被其他CPU thread设置为其current context(通过cuCtxPushCurrent())。CUresult cuCtxPushCurrent (CUcontext ctx):
将ctx指定的context push到当前CPU thread对应的stack中,使其成为该thread的current context;上一个current context可以通过调用cuCtxDestroy()或者cuCtxPopCurrent()来获取;CUresult cuCtxSetCurrent (CUcontext ctx):
将ctx指定的context与当前CPU thread绑定;其效果为:若当前CPU thread存在一个context stack,则ctx会取代当前stack的top context成为新的top;若ctx为空,实际上相当于对stack的top进行pop操作。CUresult cuCtxSynchronize (void);