GPU虚拟化实现(四)
GPU虚拟化实现(四)
- 章节回顾
- 拦截CUDA函数流程
- 初始化列表
- 开始拦截
- 拦截之后的处理
- 总结
章节回顾
在上一章,我们分析了项目拦截NVML函数的流程以及代码的实现,在这一章,将会分析项目拦截CUDA函数的流程以及代码的实现。其实流程本身与拦截NVML函数是一致的。
拦截CUDA函数流程
初始化列表
在hook.c中同样有一个cuda列表
cuda_entry_t cuda_library_entry[] = {/* Init Part */ {.name = "cuInit"},/* Deivce Part */{.name = "cuDeviceGetAttribute"},{.name = "cuDeviceGet"},{.name = "cuDeviceGetCount"},{.name = "cuDeviceGetName"},{.name = "cuDeviceCanAccessPeer"},{.name = "cuDeviceGetP2PAttribute"},{.name = "cuDeviceGetByPCIBusId"},{.name = "cuDeviceGetPCIBusId"},{.name = "cuDeviceGetUuid"},{.name = "cuDeviceGetDefaultMemPool"},{.name = "cuDeviceGetLuid"},{.name = "cuDeviceGetMemPool"},{.name = "cuDeviceTotalMem_v2"},{.name = "cuDriverGetVersion"},{.name = "cuDeviceGetTexture1DLinearMaxWidth"},{.name = "cuDeviceSetMemPool"},{.name = "cuFlushGPUDirectRDMAWrites"},/* Context Part */{.name = "cuDevicePrimaryCtxGetState"},{.name = "cuDevicePrimaryCtxRetain"},{.name = "cuDevicePrimaryCtxSetFlags_v2"},{.name = "cuDevicePrimaryCtxRelease_v2"},{.name = "cuCtxGetDevice"},{.name = "cuCtxCreate_v2"},{.name = "cuCtxDestroy_v2"},{.name = "cuCtxGetApiVersion"},{.name = "cuCtxGetCacheConfig"},{.name = "cuCtxGetCurrent"},{.name = "cuCtxGetFlags"},{.name = "cuCtxGetLimit"},{.name = "cuCtxGetSharedMemConfig"},{.name = "cuCtxGetStreamPriorityRange"},{.name = "cuCtxPopCurrent_v2"},{.name = "cuCtxPushCurrent_v2"},{.name = "cuCtxSetCacheConfig"},{.name = "cuCtxSetCurrent"},{.name = "cuCtxSetLimit"},{.name = "cuCtxSetSharedMemConfig"},{.name = "cuCtxSynchronize"},//{.name = "cuCtxEnablePeerAccess"},{.name = "cuGetExportTable"},/* Stream Part */{.name = "cuStreamCreate"},{.name = "cuStreamDestroy_v2"},{.name = "cuStreamSynchronize"},/* Memory Part */{.name = "cuArray3DCreate_v2"},{.name = "cuArrayCreate_v2"},{.name = "cuArrayDestroy"},{.name = "cuMemAlloc_v2"},{.name = "cuMemAllocHost_v2"},{.name = "cuMemAllocManaged"},{.name = "cuMemAllocPitch_v2"},{.name = "cuMemFree_v2"},{.name = "cuMemFreeHost"},{.name = "cuMemHostAlloc"},{.name = "cuMemHostRegister_v2"},{.name = "cuMemHostUnregister"},{.name = "cuMemcpyDtoH_v2"},{.name = "cuMemcpyHtoD_v2"},{.name = "cuMipmappedArrayCreate"},{.name = "cuMipmappedArrayDestroy"},{.name = "cuMemGetInfo_v2"},{.name =