【问题标题】:graphics libraries and GPUs [duplicate]图形库和 GPU [重复]
【发布时间】:2012-11-07 08:16:22
【问题描述】:

可能重复:
How does OpenGL work at the lowest level?

当我们制作一个使用 OpenGL 库的程序时,例如 Windows 平台,并且有一个支持 OpenGL 的显卡,会发生什么:

  1. 我们使用将图形与 OpenGL 链接的编程语言(例如 Visual C++)开发了我们的程序。

  2. 为目标平台(如Windows)编译和链接程序

  3. 当您运行程序时,由于我们有支持 OpenGL 的显卡,安装在同一个 Windows 上的驱动程序将负责管理同一个图形。为此,当 CPU 将所需的数据发送到显卡上的芯片(例如 NVIDIA GPU)时,绘制结果。

  4. 在这个上下文中,我们谈论图形加速和下载到 CPU 的那个计算帧缓冲区结束我们图形表示的工作。

  5. 在这种环境下,当GPU的驱动接收数据时,如何利用GPU的能力来加速绘图?翻译接收到的指令和数据 CUDA 语言类型以利用并行能力?或者只是将从 CPU 接收到的数据复制到设备内存的特定区域?这部分不太明白。

  6. 最后,如果我有一个支持 OpenGL 的卡,安装在 Windows 中的驱动程序会检测到问题吗?会出现 CPU 错误,还是会计算我们的帧缓冲区?

【问题讨论】:

标签: opengl gpu nvidia


【解决方案1】:

你最好在电脑游戏网站上工作。他们经常发表文章,介绍 3D 图形的工作原理以及“人工制品”在游戏或驱动程序出现错误时如何呈现。

您还可以阅读有关 Mesa 或 Gallium 等 3D 库架构的文章。

总体驱动程序有一组方法来实现 Direct 3D 或 OpenGL 或其他标准 API 的这个或那个功能。当他们加载时,他们会检查硬件。您可以拥有便宜的视频卡或昂贵的视频卡,最近的一张或 3 年前发布的一张……那是不同的硬件。因此,驱动程序正在尝试将每个 API 功能映射到可以在给定计算机上使用、由 GPU 加速、由 CPU 加速(如 SSE4)甚至一些更基本的实现的实现。

然后驱动程序尝试估计 GPU 负载。有时功能可以加速,但GPU(尤其是低端的)已经被其他任务超载,那么它可能会尝试在CPU上计算而不是等待GPU时隙。

当您犯错时,总会有几种变体,具体取决于驾驶员的智力和素质。

  • 也许驱动程序会为您修复错误,忽略您的命令并运行自己的一组命令。
  • 也许驱动程序会向您的程序返回一些错误代码
  • 也许驱动程序会按原样执行命令。如果你用红色而不是绿色涂漆 - 这是一个错误,但司机无法知道的那种。在 PC 游戏相关网站上搜索“3d artefacts”。
  • 在最坏的情况下,您的错误会干扰驱动程序中的错误,并且您的计算机会崩溃并重新启动。

当然,所有这些自适应策略都相当复杂且不确定,这会导致 3D 驱动程序被封闭,并且其内部知识受到严密保护。

搜索专注于 3D 游戏甚至 3D 建模的网站 - 他们应该评价“更值得购买”的视频卡,有时当他们审查新的芯片系列时,他们会撰写关于所有这些技术内部的相当详细的文章。

【讨论】:

    【解决方案2】:

    第 5 题。 驱动程序所做的一些事情:它将您的 GPU 程序(顶点、片段等着色器)编译为特定卡的机器指令,将编译后的程序上传到设备内存的适当区域,并将程序安排为在卡上的许多图形核心上并行执行。 它将图形数据(顶点坐标、纹理等)上传到适当类型的图形卡内存,使用来自程序员的各种提示,例如日期是否经常更新、不经常更新或根本不更新。 它可以利用图形卡中的特殊单元来向/从主机内存传输数据,例如,一些 nVidia 卡有一个 DMA 单元(一些 Quadro 卡可能有两个或更多),它可以上传例如纹理并行通常的驱动程序操作(其他传输、绘图等)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-18
      • 2011-07-01
      • 2013-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-13
      • 2013-06-11
      相关资源
      最近更新 更多