草拟这个问题的背景:在工作中我们使用Dell Precision工作站.我现在有一台NVidia Quadro FX1700.
我的团队正在为实时数据采集系统开发图形组件.
因此,我们一直在关注图形操作是否不会占用过多的cpu时间.为了快速检查,我们运行了几个测试程序,它们以指定的速率(例如10 fps)绘制场景,我们使用普通的旧任务管理器来查看cpu使用率的位置.
其中一个程序很重视GDI DrawRectangle调用(已填充).这个程序总是占用大约40%的cpu用户时间,但是大约一年左右(这里只是猜测)它只使用大约2-3%的内核时间.很明显,这里正在进行一些硬件加速.事实上,如果我关闭HW-accell,我们将回到最初的40%用户时间.
所有这些当然都是好消息,因为我们已经在考虑转向OpenGL了.年复一年,GDI从未获得硬件加速的好处.直到前一段时间.

有谁知道更多关于这个?微软这样做了吗?或者是gfx-card供应商特定的?

编辑

Thnx已经答案了(Ferrucio,Torlack和Rob Walker),但我的问题还没有得到解答.我们在这里谈论一个填充的矩形.可能是最优秀的功能:只需将几个坐标发送到GPU并让它翻录.但它始终在cpu端实现.
到目前为止,答案让我相信NVidia终于看到了光明(超过10年之后)并加速了GDI.没有关于此的公告?根本没有信息可以找到.
我的内部客户问我关于图形加速的问题,我只能说“好吧,我们很幸运”.

EDIT2

根据不同的答案,它似乎与驾驶员有关.因此,NVidia多年来为其工作站卡制作了糟糕的GDI驱动程序.在这家公司中,GDI没有被加速,并且所有的测试都证实了这一点.

GDI通过调用图形设备驱动程序中的各种函数来工作.每个驱动程序都必须实现一组核心功能.其他功能可以由驱动程序实现.如果不是,GDI将自己执行这些功能.

如果某个特定功能没有在硬件中实现,那么驱动程序没有必要执行该功能的软件实现,因为GDI可能会做得更好. GDI针对性能进行了极好的优化.

随着越来越多的功能在硬件中实现,这些功能不仅表现得更好,而且GDI的工作也更少,从而减少了在图形上花费的cpu时间.

也可能是图形卡供应商为了快速将卡推向市场而可能没有实现卡可以执行的所有可能的硬件功能.然后,该驱动程序的更高版本可以实现该功能,从而提高性能.

Windows – GDI已经加速.有谁知道这发生的时间?的更多相关文章

  1. Windows – GDI已经加速.有谁知道这发生的时间?

    微软这样做了吗?或者是gfx-card供应商特定的?编辑Thnx已经答案了,但我的问题还没有得到解答.我们在这里谈论一个填充的矩形.可能是最优秀的功能:只需将几个坐标发送到GPU并让它翻录.但它始终在cpu端实现.到目前为止,答案让我相信NVidia终于看到了光明并加速了GDI.没有关于此的公告?

  2. windows – 在不同进程之间共享HDC

    我正在编写某种IPC功能,需要将某些资源从一个进程传递到另一个进程.这适用于Pipehandle等,可以通过DuplicateHandle复制.现在我需要将HDC从一个进程传递到另一个进程.这甚至可能吗?

  3. Windows – 如何获取与进程关联的GDI对象

    我正在调查我们的智能客户端应用程序中的GDI泄漏问题.我正在寻找一个工具来获取与进程关联的GDI对象.我可以在任务管理器中看到GDI对象,但是我需要定期捕获它.例如在文本文件中.使用GetGuiResourcesAPI函数编写一个程序来定期记录进程正在使用的GDI句柄数量应该是非常简单的.

  4. windows – 从崩溃转储中查找GDI /用户资源使用情况

    poolused命令获取一些信息.从崩溃转储(验尸)中查找资源泄漏可能很困难–如果它总是在同一个地方,使用泄漏内存的相同变量,而且你很幸运,你可以看到它的最后一个地方泄漏等等.在调试器下运行实时程序可能会容易得多.您也可以尝试使用MicrosoftDetours,但许可证并不总是有效.它也更具侵略性和先进性.

  5. 窗口 – 在DWM组合的窗口上使用GDI绘制时可以防止撕裂伪影吗?

    我在窗口上,在启用DWM组合的系统上绘制一个使用双缓冲GDI的动画,并在屏幕上看到清晰可见的tearing.有办法防止这种情况吗?

  6. 窗口 – 是否有任何方式节制CPU /内存的进程?

    我想我可以使用虚拟机,但我正在寻找一些有点轻.我使用WindowsXP,但是任何Windows机器的解决方案都是受欢迎的.谢谢.平台SDK用于在过去的好时光中使用压力工具,但它们可能仍然存在其他工具:记忆:表现&可靠性:可以使用EatMem>cpu:performance&可靠性:可以使用CPUBurn,Prime95等>句柄:可靠性:?

  7. 用于在Windows Aero Glass(DWM,GDI,GDI)上绘制所有Win32程序员的文档和API示例

    我正在寻找用于学习使用Win32/GDIAPI的好资源,或者将其直接使用Win32API绘制和绘制为玻璃形式的任何代替。我发现所有这些都有助于了解玻璃和解决各种问题。平原玻璃链接>UsingtranslucentwindowswithDelphi:在Delphi中使用Glass格式的介绍>Customdrawingonglass:涵盖如何在窗口的玻璃区域绘制位图或其他图像。这两篇文章将让您按照您在问题中的要求模仿Office和Chrome>HowtosetupvariousVCLcontrolstowor

  8. delphi – 如何使用GDI按像素强度将位图转换为灰度?

    我正在寻找如何使用GDI将32位位图转换为灰度的简单解决方案.是否有可能,例如通过改变位图的托盘或什么?

  9. delphi – GDI在第二个线程中使用TGIFImage处理泄漏

    当第二个线程使用VCL的TGIFImageclass加载gif图像时,该程序有时每次在线程中执行以下行时会泄漏几个句柄:也就是说,刚刚打开的gif图像被分配给线程拥有的位图。我还没有到目前为止,但是考虑到这是一个线程/时序问题,这并不意味着我不会,如果他们使用相似的代码到TGIFImage。不幸的是,我不知道如何将锁定建议应用于TGIFImage。一个改进是让后台线程在需要使用画布时发送主线程消息。

  10. GdiPlus[1]: 一个给 Delphi 提供的、新的 GDI+ 接口, 很好用!

    总结以上是DEVMAX为你收集整理的GdiPlus[1]:一个给Delphi提供的、新的GDI+接口,很好用!如果觉得DEVMAX网站内容还不错,欢迎将DEVMAX网站推荐给好友。

随机推荐

  1. static – 在页面之间共享数据的最佳实践

    我想知道在UWP的页面之间发送像’selectedItem’等变量的最佳做法是什么?创建一个每个页面都知道的静态全局变量类是一个好主意吗?

  2. .net – 为Windows窗体控件提供百分比宽度/高度

    WindowsForm开发的新手,但在Web开发方面经验丰富.有没有办法为Windows窗体控件指定百分比宽度/高度,以便在用户调整窗口大小时扩展/缩小?当窗口调整大小时,可以编写代码来改变控件的宽度/高度,但我希望有更好的方法,比如在HTML/CSS中.在那儿?

  3. 使用Windows Azure查询表存储数据

    我需要使用特定帐户吗?>将应用程序部署到Azure服务后,如何查询数据?GoogleAppEngine有一个数据查看器/查询工具,Azure有类似的东西吗?>您可以看到的sqlExpressintance仅在开发结构中,并且一旦您表示没有等效,所以请小心使用它.>您可以尝试使用Linqpad查询表格.看看JamieThomson的thispost.

  4. windows – SetupDiGetClassDevs是否与文档中的设备实例ID一起使用?

    有没有更好的方法可以使用DBT_DEVICEARRIVAL事件中的数据获取设备的更多信息?您似乎必须指定DIGCF_ALLCLASSES标志以查找与给定设备实例ID匹配的所有类,或者指定ClassGuid并使用DIGCF_DEFAULT标志.这对我有用:带输出:

  5. Windows Live ID是OpenID提供商吗?

    不,WindowsLiveID不是OpenID提供商.他们使用专有协议.自从他们的“测试版”期结束以来,他们从未宣布计划继续它.

  6. 如果我在代码中进行了更改,是否需要重新安装Windows服务?

    我写了一个Windows服务并安装它.现在我对代码进行了一些更改并重新构建了解决方案.我还应该重新安装服务吗?不,只需停止它,替换文件,然后重新启动它.

  7. 带有双引号的字符串回显使用Windows批处理输出文件

    我正在尝试使用Windows批处理文件重写配置文件.我循环遍历文件的行并查找我想要用指定的新行替换的行.我有一个’函数’将行写入文件问题是%Text%是一个嵌入双引号的字符串.然后失败了.可能还有其他角色也会导致失败.如何才能使用配置文件中的所有文本?尝试将所有“在文本中替换为^”.^是转义字符,因此“将被视为常规字符你可以尝试以下方法:其他可能导致错误的字符是:

  8. .net – 将控制台应用程序转换为服务?

    我正在寻找不同的优势/劣势,将我们长期使用的控制台应用程序转换为Windows服务.我们为ActiveMQ使用了一个叫做java服务包装器的东西,我相信人们告诉我你可以用它包装任何东西.这并不是说你应该用它包装任何东西;我们遇到了这个问题.控制台应用程序是一个.NET控制台应用程序,默认情况下会将大量信息记录到控制台,尽管这是可配置的.任何推荐?我们应该在VisualStudio中将其重建为服务吗?我使用“-install”/“-uninstall”开关执行此操作.例如,seehere.

  9. windows – 捕获外部程序的STDOUT和STDERR *同时*它正在执行(Ruby)

    哦,我在Windows上:-(实际上,它比我想象的要简单,这看起来很完美:…是的,它适用于Windows!

  10. windows – 当我试图批量打印变量时,为什么我得到“Echo is on”

    我想要执行一个简单的批处理文件脚本:当我在XP中运行时,它给了我预期的输出,但是当我在Vista或Windows7中运行它时,我在尝试打印值时得到“EchoisOn”.以下是程序的输出:摆脱集合表达式中的空格.等号(=)的两侧可以并且应该没有空格BTW:我通常在@echo关闭的情况下启动所有批处理文件,并以@echo结束它们,所以我可以避免将代码与批处理文件的输出混合.它只是使您的批处理文件输出更好,更清洁.

返回
顶部