cudaMemGetInfo获取的显存占用与实际不符问题

问题:        

        在windows或者wsl下开发cuda程序时使用cudaMemGetInfo查询显存占用时会与nvidia-smi、gpu-z等查询的区别很大。并且不管实际显存被占用了多少,使用cudaMemGetInfo每次查询都是一个固定的显存占用值,这种情况和内存虚拟化很像,每个进程都有自己的虚拟空间。而在Linux服务器下使用cudaMemGetInfo查询时则为实际占用的显存大小。

原因:

        windows系统下,当我们显卡插入显示器时显卡会处于WDDM模式。

        在 WDDM 模式下,GPU 内存不由 CUDA 直接管理,也不由 GPU 驱动程序直接管理。GPU内存由Windows操作系统管理。微软提供的该软件将GPU内存视为虚拟资源,因此CUDA对实际内存使用情况一无所知,而只知道微软组件告诉它有关GPU内存的信息。如果我们想通过cudaMemGetInfo接口来获取实际的显存占用则需要切换为TCC模式。

两种模式区别

TCC:该模式下,GPU 完全用于计算,不能作为本地显示输出。
WDDM:该模式下,GPU 既用于计算又用于本地显示输出。

WDDM 模式简介

        随着越来越多的硬件供应商发展到基于硬件的计划模型,其中的工作直接从用户模式提交到 GPU,而 GPU 管理各种工作队列本身,就有必要不必 VidMm 在提交到 GPU 引擎之前检查和修补每个命令缓冲区。

        为实现此目的,WDDM v2 支持 GPU 虚拟寻址。 在此模型中,为每个进程分配一个唯一的 GPU 虚拟地址空间,其中每个要在其中执行的 GPU 上下文。 分配由进程创建或打开,在该进程的 GPU 虚拟地址空间中分配唯一的 GPU 虚拟地址,该地址空间在分配的生存期内保持不变并且唯一。 这允许用户模式驱动程序通过其 GPU 虚拟地址引用分配,而不必担心基础物理内存在其生存期内发生变化。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

混元太极马保国

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

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

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

打赏作者

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

抵扣说明:

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

余额充值