GPU虚拟化实现(四)

章节回顾

在上一章,我们分析了项目拦截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 = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想看一次满天星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值