DGPU共享内存的问题

        之前有介绍怎么用cudaIpcGetMemHandle,cudaIpcOpenMemHandle来开发共享内存,遇到了CUDA 208(cudaErrorAlreadyMapped = 208)错误。由于CUDA代码不开源,只能自己摸索分析下。

        首先cudaIpcOpenMemHandle的208错误不是必现的,程序运行一段时间,就会偶现。开始觉得是不是大量使用资源,导致资源不够用了。文档上说“If the memory handle has already been opened by the current context, the reference count on the handle is incremented by 1 and the existing device pointer is returned.”, 那就是在同一个进程,如果已经打开过一次,就会将引用加1,208可能是打开的时候有冲突。208怎么能快速重现?

static GMutex mutex;
void *func(void *ptr) {
	//const char *msg = (const char *) ptr;
  volatile shmStruct *shm = NULL;
  shm = (volatile shmStruct *)ptr;
  int frame_size = shm->data.frame_size;
  //g_mutex_lock (&mutex);
  cudaError_t err = cudaIpcOpenMemHandle(&ptr, *(cudaIpcMemHandle_t *)&shm->memHandle, cudaIpcMemLazyEnablePeerAccess);
  if(err  != 0)
    printf("err:%d\n", err);
  //g_mutex_unlock (&mutex);

  //printf("thread quit\n");
  return NULL;
}

  cudaError_t err = cudaIpcOpenMemHandle(&ptr, *(cudaIpcMemHandle_t *)&shm->memHandle, cudaIpcMemLazyEnablePeerAccess);
  if(err  != 0)
    printf("err:%d\n", err);

  printf("100 open\n");
  for(int i = 0; i < 1000; i++){
    cudaError_t err = cudaIpcOpenMemHandle(&ptr, *(cudaIpcMemHandle_t *)&shm->memHandle, cudaIpcMemLazyEnablePeerAccess);
    if(err  != 0)
      printf("err:%d\n", err);
  }

如果使用多线程反复同时调用cudaIpcOpenMemHandle,程序就能很快重现208错误。那既然同时调用有冲突,那可以加个锁,如上注释部分。加了锁之后,208错误就不能重现了。

相关推荐

  1. DGPU共享问题

    2024-07-20 05:06:02       18 阅读
  2. C# 共享

    2024-07-20 05:06:02       21 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-20 05:06:02       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-20 05:06:02       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-20 05:06:02       45 阅读
  4. Python语言-面向对象

    2024-07-20 05:06:02       55 阅读

热门阅读

  1. 阿里云服务器 篇三:提交搜索引擎收录

    2024-07-20 05:06:02       18 阅读
  2. python 打包工具 nuitka 使用笔记

    2024-07-20 05:06:02       17 阅读
  3. 【XSS】

    【XSS】

    2024-07-20 05:06:02      18 阅读
  4. PyTorch张量运算函数

    2024-07-20 05:06:02       20 阅读
  5. 使用css制作心形图案并且添加动画心动效果

    2024-07-20 05:06:02       16 阅读
  6. Spring Boot:简化Spring应用开发的利器

    2024-07-20 05:06:02       20 阅读
  7. JDBC常见用法

    2024-07-20 05:06:02       16 阅读
  8. 中介子方程六十二

    2024-07-20 05:06:02       17 阅读
  9. vue 中 ui 组件二次封装后 ref 怎么穿透到子组件里

    2024-07-20 05:06:02       15 阅读
  10. 求职学习day6

    2024-07-20 05:06:02       19 阅读
  11. AI Native应用中的模型微调

    2024-07-20 05:06:02       16 阅读