章节回顾
在上一章,我们分析了项目拦截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 =