【问题标题】:Persistence of modules in CUDA contextsCUDA 上下文中模块的持久性
【发布时间】:2014-05-07 12:45:06
【问题描述】:

我有一个 MATLAB mex 库,可以在运行时加载特定于问题的 cubin 文件。这个 mex 函数被 MATLAB 调用了几百次。当我调用 cuModuleLoad 时,CUDA 是否每次都重新加载内核?还是以某种方式缓存?如果没有,有没有办法在两者之间保留加载的模块?我目前没有调用 cuModuleUnload。

似乎只为 MATLAB 进程创建了一次 CUDA 上下文,因为只有第一次调用库很慢。随后对 mex 库的 matlab 函数调用速度很快。所以我想我可以假设相同的 CUDA 上下文正在被重用。

【问题讨论】:

标签: matlab cuda nvidia mex cuda-context


【解决方案1】:

简短的回答是肯定的,您可以重复使用它们。

MEX 文件中 C++ 中的全局/静态变量或静态成员仅在动态加载 MEX 文件时创建一次,只要它们不依赖于 Matlab 内存管理器(mxMallocmxCreateNumericArray 等)。当 Matlab 退出或 MEX 文件被clear mex 卸载时,它们会被销毁。也可以用MEX API保护MEX文件:mexLock防止意外卸载,mexAtExit注册析构回调等。

【讨论】:

  • 但每次调用时我都会在函数内部调用 cuModuleLoad。所以,我的问题是 CUDA 如何管理资源。
  • 这是一个当你多次调用cuModuleLoad 时会发生什么的问题。检查 CUDA 文档。但是您可以通过使用标志或将其包装在类构造函数/析构函数中并将该实例设为静态来仅初始化一次 CUDA 资源。
  • 我可以试试。这似乎肯定会导致一些问题,因为一段时间后,cuModuleLoad 失败,错误代码为 2(内存不足)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多