来自发布的幻灯片 here ,似乎只有 Linux 内核版本 4.14 或更新版本支持通过调用 malloc
或 new
而不是 Nvidia 的 cudaMallocManaged
使用系统分配器? ...如果是这样,有没有办法查询 Nvidia 驱动程序或 CUDA 运行时,以了解系统分配器是否可用于正确分配内存块以在 CUDA 统一内存模型中使用?或者如果检测到的操作系统不在白名单上,这是否必须是您保留操作系统/内核版本白名单并回退到传统 cudaMallocManaged
的东西?如果是后者,有人知道已批准的操作系统版本白名单吗?
最佳答案
所以我遇到了这个问题,因为我以为我的系统是支持的,但不是。长话短说,因为这个“功能”似乎需要兼容硬件和软件的完美 Storm ,所以我坚持使用旧的 API。我知道这可能不是您想要的答案。
如果您真的想使用 malloc
或 new
,我会说您的查询将是以下组合:
- 询问操作系统其运行的内核版本。请参阅
uname
系统调用。 - 运行
deviceQuery
(或类似的)来检查 CUDA 版本(8.0 或更高版本)和 GPU(寻找大于或等于 6.0 的计算能力)。
有关操作系统支持的更多信息可在此处找到:https://www.phoronix.com/scan.php?page=news_item&px=HMM-In-Linux-4.14 .似乎内核版本 4.14 或更高版本应该具有此功能。
关于c++ - 支持 CUDA 统一内存系统分配器的操作系统版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49143545/