// 基于扩展NVX_gpu_memory_info extension

UINT      QueryNVidiaCardMemory()

{

__try

{

int iVal = 0;

glGetIntegerv( GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX, &iVal );

return (UINT)iVal/1024;

}

__except(1)

{

}

return 0;

}

// 基于扩展WGL_AMD_gpu_association

UINT      QueryAmdCardMemory()

{

__try

{

typedef UINT (WINAPI * PFNWGLGETGPUIDSAMDPROC) (UINT maxCount, UINT* ids);

typedef INT (WINAPI * PFNWGLGETGPUINFOAMDPROC) (UINT id, INT property, GLenum dataType, UINT size, void* data);

PFNWGLGETGPUIDSAMDPROC wglGetGPUIDsAMD = (PFNWGLGETGPUIDSAMDPROC)wglGetProcAddress("wglGetGPUIDsAMD");

PFNWGLGETGPUINFOAMDPROC wglGetGPUInfoAMD = (PFNWGLGETGPUINFOAMDPROC)wglGetProcAddress("wglGetGPUInfoAMD");

if( !wglGetGPUIDsAMD || !wglGetGPUInfoAMD )

{

return 0;

}

UINT n = wglGetGPUIDsAMD(0, 0);

UINT ids[24];

#define WGL_GPU_RAM_AMD 0x21A3

size_t TotalMemSize = 0;

wglGetGPUIDsAMD(n, ids);

wglGetGPUInfoAMD(

ids[0],

WGL_GPU_RAM_AMD,

GL_UNSIGNED_INT,

sizeof(size_t),

&TotalMemSize

);

return (UINT)TotalMemSize;

}

__except(1)

{

}

return 0;

}

UINT      QueryDedicatedVideoCardMemory( bool bNvidiaCard, bool bAmdAtiCard )

{

__try

{

HWND hWnd = (HWND)你可以用的HWND;

HDC hdc = ::GetDC( hWnd );

if( hdc == NULL )

{

return 0;

}

PIXELFORMATDESCRIPTOR FormatDesc;

memset(&FormatDesc, 0, sizeof(PIXELFORMATDESCRIPTOR));

FormatDesc.nSize = sizeof(PIXELFORMATDESCRIPTOR);

FormatDesc.nVersion = 1;

FormatDesc.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | /*PFD_SUPPORT_GDI|*/ PFD_DOUBLEBUFFER;

FormatDesc.iPixelType = PFD_TYPE_RGBA;

FormatDesc.cColorBits = 32;

FormatDesc.cDepthBits = 32;

// FormatDesc.cStencilBits = 0;

FormatDesc.iLayerType = PFD_MAIN_PLANE;

GLuint PixelFormat = ChoosePixelFormat( hdc, &FormatDesc );

if( PixelFormat == NULL )

{

return 0;

}

SetPixelFormat( hdc, PixelFormat, &FormatDesc );

HGLRC hContext = wglCreateContext( hdc );

if( hContext == NULL )

{

return 0;

}

__try

{

if( wglMakeCurrent( hdc, hContext ) )

{

if( bNvidiaCard )

{

return QueryNVidiaCardMemory();

}

else if( bAmdAtiCard )

{

return QueryAmdCardMemory();

}

}

else

{

return 0;

}

}

__finally

{

wglMakeCurrent( NULL, NULL );

::DeleteDC( hdc );

wglDeleteContext( hContext );

}

}

__except(1)

{

}

return 0;

}

完美获取N卡A卡的显存大小(使用OpenGL)的更多相关文章

  1. Nvidia显卡怎样查看显存大小及硬件相关信息

    在电脑上安装Nvidia显卡驱动,平时也会通过Nvidia控制面板来查看显示显存位宽及宽带.显示显存容量和显示显存芯片信息等等,那么该如何查看Nvidia显存大小以及Nvidia硬件相关信息呢? 1. ...

  2. tensorflow 如何限制显存大小

    Python在用GPU跑模型的时候最好开多进程,因为很明显这种任务就是计算密集型的. 用进程池好管理,但是tensorflow默认情况会最大占用显存,尽管该任务并不需要这么多,因此我们可以设置显存的按 ...

  3. AI换脸必备知识:如何查看显卡型号以及显存大小!

    使用Deepfakes(AI换脸) 软件,拼的就是配置,耗的就是时间,考验的是耐心. 配置好了,时间就少了. 所以玩这种软件,硬核需求就是:配置,配置,配置.  我的电脑能跑这个软件么?也是很多新手的 ...

  4. C#获取电脑型号、系统版本、内存大小、硬盘大小、CPU信息

    摘要 有时需要获取电脑的相关信息.这时可以通过调用windows api的方式,进行获取. 方法 可以通过在powershell中 通过下面的命令进行查询,然后可以通过c#调用获取需要的信息. gwm ...

  5. TensorFlow中的显存管理器——BFC Allocator

    背景 作者:DeepLearningStack,阿里巴巴算法工程师,开源TensorFlow Contributor] 使用GPU训练时,一次训练任务无论是模型参数还是中间结果都需要占用大量显存.为了 ...

  6. (原)tensorflow中使用指定的GPU及GPU显存

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/6591923.html 参考网址: http://stackoverflow.com/questions ...

  7. [Pytorch]深度模型的显存计算以及优化

    原文链接:https://oldpan.me/archives/how-to-calculate-gpu-memory 前言 亲,显存炸了,你的显卡快冒烟了! torch.FatalError: cu ...

  8. 深度学习中GPU和显存分析

    刚入门深度学习时,没有显存的概念,后来在实验中才渐渐建立了这个意识. 下面这篇文章很好的对GPU和显存总结了一番,于是我转载了过来. 作者:陈云 链接:https://zhuanlan.zhihu. ...

  9. tensorflow中使用指定的GPU及GPU显存

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 本文目录 1 终端执行程序时设置使用的GPU 2 python代码中设置使用的GPU 3 设置tensorflow使用的显 ...

随机推荐

  1. 'Missing recommended icon file - The bundle does not contain an app icon for iPhone / iPod Touch of exactly '120x120' pixels, in .png format'

    创建120像素的高分辨率和60个像素定期如上,苹果文档中提到,并设置名称的新图标.例如,icon-120.png和icon-152.png. 将这个图标到你的项目资源文件夹并添加该图标到项目: 在此之 ...

  2. 运行开源项目,报错Error:(48, 37) 错误: -source 1.6 中不支持 diamond 运算符,请使用-source 7或者更高版本已启用diamond运算符

    错误定位 当时并没有弄明白为什么会出错,一脸懵逼相 解决办法: 将source compatibility和target compatibility都改为1.7,重新build就ok了. 错误原因: ...

  3. iOS常用库之Masonry

    简单介绍 Masonry 源码地址:https://github.com/Masonry/Masonry Masonry是一个轻量级的布局框架 拥有自己的描述语法 采用更优雅的链式语法封装自动布局 简 ...

  4. 最近自己封装了个JS脚本,用来创建和操作Table

    基于JQuery封装的Table操作脚本 /** 依赖JQuery **/ (function () { var Table = window.Table = function (rowCount, ...

  5. Microsoft Visual Stduio 2005 Ent安装报错解决方法

    错误:Microsoft Visual Studio 2015 Devenv : 安装时发生严重错误 安装过程第一次出现该错误时,查看了日志文件,错误提示如下: [0EEC:0EF0][2016-10 ...

  6. C# NPOI 导入与导出Excel文档 兼容xlsx, xls

    之前写了个小程序,导出一些数据成Excel,程序使用的是Microsoft.Office.Interop.Excel类来操作Excel. 在本机测试的时候都好好的,但是将生成文件放到其他电脑上却怎样也 ...

  7. 前端自动构建工具@gulp入门

    gulp是一个自动化的前端工具.它可以利用自身的插件来实现一些功能,如sass.less编译:浏览器自动刷新,文件压缩.重命名.代码校验(个人使用sublime的插件进行校验)等功能.当然这些功能也可 ...

  8. github中cesium-terrain-builder和cesium-terrain-server使用

    cesium-terrain-builder的使用: 这个是用来把含有高程数据的tif图片切片成.terrain的小文件,是给cesium-terrain-server提供服务的. cesium-te ...

  9. NetCDF 入门

    一.概述  NetCDF全称为network Common Data Format,中文译法为“网络通用数据格式”,对程序员来说,它和zip.jpeg.bmp文件格式类似,都是一种文件格式的标准.ne ...

  10. 关于本地缓存localStorage

    localStorage的优势 1.localStorage拓展了cookie的4K限制 2.localStorage会可以将第一次请求的数据直接存储到本地,这个相当于一个5M大小的针对于前端页面的数 ...