位置: 编程技术 - 正文

用Quadro卡带Geforce卡实现非SLI多显卡多显示器协同绘制(卡带测评)

编辑:rootadmin

推荐整理分享用Quadro卡带Geforce卡实现非SLI多显卡多显示器协同绘制(卡带测评),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:卡带general,卡带rom,卡带general,卡带rom,卡带与cd,卡带rom,卡带rom,卡带rom,内容如对您有帮助,希望把文章链接给更多的朋友!

核弹厂为了卖显卡真是无所不用其极。当然人家号称Geforce就是用来玩游戏的,Quadro才适合更高端的工作。可是如果我只是用来做三维场景绘制,你Quadro比起Geforce也没见得有很大优势,一块K顶得上三块GTX的价&#;,直接吓得不省人事。幸好CAD&CG实验室有钱,让我借得一块K玩玩。

之前就说过插了4块GTX却只有一块在跑的凄惨经历。多番打听之后基本确凿了一件事情:单纯GTX是别想了。那么咱咬咬牙,用Quadro总是可以的。但是,如果没钱,只买得起一块Quadro,还有希望吗?又请出Google,寻遍中外论坛,未见有如我之奇葩要求者。算了,求人不如求己,自己试试吧。

要实现多显卡协同工作,首先需要有一块Quadro显卡,什么型号无所谓。然后,其他显卡,则Quadro、Telsa、Geforce都可以,多少张也都无所谓。

由于个人编程能力有限,窗口编写方面就借用大名鼎鼎的NeHe教程的框架,也就是用Win Api编写的窗口框架。当然,还得对框架进行一些修改。为什么不用freeglut之类的库?因为freeglut不让我碰它建好的窗口的RC,而它的代码我不会改……(计算机系大神们改起来是分分钟的事情)

然后,要用到nVidia家的WGL_NV_gpu_affinity特性。要使用这个功能,除了glew之外,还需要wglew:

Windows创建一个窗口的顺序是建立一个窗口DC(device context),再根据这个窗口的属性建立对应的用于OpenGL绘制的RC(render context)。要实现多显卡协同工作,就必须针对每一块显卡单独建立RC,也就意味着,要针对每块显卡单独建立窗口DC,然后绑定对应RC。

首先是注册窗口类。NeHe教程里注册窗口类和创建窗口是写在一起的。但是我们要创建多个同一个类的窗口,却不能把同样的类注册多次,所以先把RegisterClass的部分单独抽出来,只注册一次。

用Quadro卡带Geforce卡实现非SLI多显卡多显示器协同绘制(卡带测评)

然后就是CreateGLWindow函数。在这里,我加了一个传入参数:RCNum,用于标识窗口绑定到哪块显卡上。在wglMakeCurrent(hDC, hRC)一句出现后,初始化GL参数的InitGL()出现前,加入:

GpuMask的作用就是把需要工作的显卡标识出来,则之后的Affinity DC和Affinity RC都会跟GpuMask指定的显卡绑定。还有一点就是glewInit()函数必须在操作多显卡的代码之前,否则会出错。具体的工作原理倒是没搞清楚。

然后就可以用CreateGLWindow函数来创建一个用于OpenGL绘制的窗口了。此处有一点也是很重要的,就是创建出来的窗口的位置,必须跟当前窗口所在的显示器对应的显卡一致。也就是说,假如RCNum参数填了2,就应该把窗口创建在2号显卡(从0开始算)所连接的显示器里,并且窗口不要越界。假如RCNum传了2,而把窗口开到了1号显卡连接的显示器上,则绘制时工作的是2号显卡,但是绘制完成的内容则要通过内存转到1号显卡里给显示器显示,造成显卡之间的数据交换,极其影响帧数。

实际上如果只是这么建几个窗口的话,最后会发现显卡的负荷是间歇性的。原因是单线程的程序只能等待一块显卡SwapBuffer结束之后,才能进行下一块显卡的Swapbuffer,导致实际上同时还是只有一块显卡工作。因此程序还需要应用多线程技术,创建对应数量的线程,在每个线程内部创建窗口。线程之间互相不受影响,也不需要调用wglMakeCurrent(hDC, hRC)来切换窗口。如果需要窗口之间的同步,还需要使用Event来控制线程之间的进度(WGL_NV_gpu_affinity的说明里还提到了叫SwapGroup的特性,可以针对这种情况自动管理同步,但是我一直没有成功,还请指教)。这就涉及多线程的管理,不在本文细说。

如此就可以实现多显卡协同工作。如果几个窗口需要绘制同样的场景,记得每个窗口都要把场景所需要的顶点、纹理等传入GPU的数据初始化一遍。还是那句话,避免显卡之间的数据交换。

参考:

OpenGL编程逐步深入(四)Shaders OpenGl中的Shader在一些中文书籍或资料中都被翻译为着色器,单从字面意思也看不出Shader到底是什么,Shader实际上就是一段代码,用于完成特定功能的一个

OpenGL--纹理贴图基础 理论基础纹理贴图:通俗地讲就是可以把我们读取的纹理加载到图元表面的一种技术,这样大大的提高了图像的表现质量。实例代码//读取tga格式图片/*t

关于模型视图变换的一些理解 OpenGL可以通过glMatrixMode(GL_MODELVIEW)来修改模型视图矩阵的值。模型视图矩阵包含模型变换和视图变换,在OpenGL中经常将这两种变换混在一起进行讨论,这

标签: 卡带测评

本文链接地址:https://www.jiuchutong.com/biancheng/369547.html 转载请保留说明!

上一篇:关于混合(Blend)和浮点纹理的一件小事(关于混合基金投资风险以下表述正确的是)

下一篇:OpenGL编程逐步深入(四)Shaders(简述opengl的编程步骤)

  • 公司税务注销流程是否要不发生业务多久
  • 应交城建税分录
  • 餐饮服务税率是几个点
  • 预缴增值税的附加税
  • 小规模增值税的三个附加税计算公式是什么
  • 广告公司可以开劳务费吗
  • 资源税的销售额包括
  • 税务登记法人变更后多久生效
  • 上月暂估收入本月开票增值税实操
  • 无形资产后续支出计入什么科目
  • 受托加工物资如何做账
  • 建筑工程的适用范围
  • 民非企业补贴收入要缴纳增值税会计分录怎么写?
  • 实收资本印花税怎么申报税目
  • 工会开发票有税号吗?
  • 汇算清缴涉及到哪些科目的调整
  • 涉嫌虚开发票的几种情况
  • 会计报表怎么处理
  • 存货跌价准备会影响利润吗
  • 应收账款无法收回确认为坏账会计分录
  • 企业所得税汇算清缴表
  • 汽车过户费包括
  • 公司上市前缩股
  • 注册表怎么启动
  • 美团佣金收费标准结构图
  • 事业单位年末收入怎么算
  • 华硕win10笔记本如何恢复出厂设置
  • 鸿蒙怎么设置默认系统
  • 过路费进项税抵扣填在纳税申报的哪行
  • 体积最小的机械硬盘
  • 企业所得税扣除标准表
  • 会计费用科目分类表
  • 法定盈余公积金达到注册资本的多少时不再提取
  • FUXA个人学习总结(一)
  • css如何设置渐变色
  • 应付职工薪酬年末结转到哪个科目
  • 购进运输服务取得的增值税专用发票准予抵扣进项税额吗
  • 应付保理怎么做账
  • 看了这篇文章感触很深的说说
  • 鲜花售卖系统
  • php对接公众号支付
  • return函数
  • 诉讼费发票丢失可以补开吗
  • 包装物押金属于应税货物吗
  • 建筑劳务税率是13还是6
  • 主营业务收入含义
  • 零申报失败什么原因
  • 国有资产无偿划转需要缴税吗
  • 固定资产折旧指标有哪些
  • 不动产租赁如何避税
  • 转让旧固定资产怎么处理
  • 门市装修费用会计处理
  • 股权转让如何缴纳个税
  • 发票先到后付款怎样做凭证
  • 公司物资借用手续
  • 预计负债可以获取利润吗
  • 总账的建立
  • 财务人员需要填报的报表有哪些
  • mysql5.7.32免安装教程
  • 盘符在哪
  • 多种工具安装系统怎么用
  • win8删除所有内容
  • win10没有显示
  • win10系统怎么关闭病毒防护
  • mac怎么旋转窗口
  • win8的系统
  • win7系统谷歌浏览器错误代码a00a0017
  • linux云端服务器
  • win10按prtsc没反应
  • 遮罩层出现后怎么点击其他地方隐藏
  • dos批处理实例
  • jquery添加id属性
  • python开发者文档
  • android应用程序的主要语言是
  • android:theme="@style/apptheme"
  • js原生方法大全
  • python中get()函数
  • 分类所得税和综合所得税的优缺点
  • 百望税控盘电子发票开好了如何打印及导出发票
  • 江西国税电子税务局
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设