我如何知道正在使用多少视频卡内存?


15

我想以编程方式在运行时确定程序正在使用多少视频卡内存。具体来说,我想知道如何在使用OpenGL的Windows机器上执行此操作,但也对在其他平台上执行此操作的方法感兴趣。

我知道有一些实用程序可以向我显示程序运行时的内存使用情况,但是我希望能够从我的代码中查询该信息。


PS我已经回答了您的问题,但是由于这只是一个一般的编程问题,因此它更适合stackoverflow.com。如果我的回答不够彻底,欢迎您在此处重新张贴它,看看他们给出了什么答复。
Ricket 2010年

我也在stackoverflow上,但是我仍然在学习哪些问题适用于此。
Hitesh 2010年

3
这个问题在这里看起来很好。毕竟,他可能会得到所需的弃权。看到这一点: meta.gamedev.stackexchange.com/questions/3/...
四联

Answers:


14

您可以使用NVX_gpu_memory_info扩展名找到Nvidia卡的视频存储器,或者使用ATI_meminfo找到 ATI卡的视频存储器。这是我发现的一小段代码,可能会让您入门。


但是,flipcode的Paul Nettle想知道为什么人们想要找到可用的视频内存,他说

很难(有时甚至是不可能)确定视频内存量的原因与OpenGL不允许您锁定帧缓冲区并直接访问它的原因非常相似。

并从本质上解释说,“视频存储量”实际上可能没有任何意义。我同意他的说法,例如Windows Vista / 7计算机中的“可用”内存量无关紧要;希望没有可用内存,因为可用内存是浪费的内存。但是,如果应用程序需要,Windows会清除某些专门用于缓存的内存区域。


一些很棒的资源。我应该有机会在几天后尝试一下。
Hitesh 2010年

+1,摘要很棒。但是,我完全不同意没有任何意义-检查内存量总比让程序异常失效更好。
Kornel Kisielewicz

好吧,但是我认为重点并不一定是您不应该检查内存量,而是内存量并不是任何事情的明确指标。当卡内存不足时,这可能意味着它将会失败,或者可能意味着您的纹理数据将根据需要自动进行交换。0内存实际上并不意味着致命的内存不足错误。
莉吉特

1
我个人计划将其用作跟踪泄漏和观察硬件兼容性的简单指南。使用“ 20mb”?是的,它可能会在当今市场上的任何产品上运行。在具有六个动态分配的纹理且波动很大的简单游戏上使用“ 500mb”吗?糟糕,我的垃圾回收可能出了点问题。
ZorbaTHut 2010年

1
不幸的是,GL规范说,当驱动程序返回GL_OUT_OF_MEMORY时,它现在处于不确定状态,因此一旦内存不足,您基本上是SOL对于游戏来说还不错,但对于像Photoshop这样的应用程序来说,这是不可接受的。
gman 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.