2

我是否认为现代消费类显卡(比如那些传统的 nVidia 和 ATi 型号)使用完全相同的 GPU 结构和操作进行实际图形渲染(通过 DirectX、OpenGL 等)和裸计算(通过 OpenCL、CUDA 等)。 )? 这实际上是所有 DirectX/OpenGL 功能都支持的软件(固件+驱动程序)部分,而无需以纯硬件方式执行任何特定于图形的操作吗?所有这一切都使它成为图形加速卡(而不是纯粹的通用计算加速单元)软件逻辑抽象层 - 仅仅是在硬件上运行的应用程序吗?

我真正感兴趣的是是否有可能(无论需要多少工作和技术)使用 CUDA 编写一个完整的软件(用户空间)3D 渲染(比如 3D 游戏)引擎/ OpenCL 将像卡本身(及其固件和驱动程序)一样高效(或接近)实现所有 DirectX/OpenGL 功能,并且在该引擎工作时是否有任何卡硬件部件将被闲置。

导致我提出这个问题的原因包括我从经验中了解到的以下事实:

  1. 硬件图形加速驱动程序曾经有许多可见的错误。

  2. 软件渲染(我过去常常玩 3D 游戏,因为它是一个选项)几乎总是更稳定(不太容易出现挂起和视觉伪影)。

  3. 通用 CUDA/OpenCL 操作似乎相对稳定且具有确定性,比“硬件”图形加速更可靠。

因此,以“软件”方式实现 3D 渲染但尽可能使用 GPU 而不是 CPU 进行计算似乎是一个奇怪的想法。例如,这似乎几乎可以解决 Linux 驱动程序的混乱。

4

2 回答 2

2

不,您不能使用 OpenCL/Cuda 实现全速 OpenGL/Direct3D。

3D 渲染过程的一些关键部分,例如曲面细分和光栅化,以及整个可编程图形管道的东西都是硬连线的。来自AMD 的 GCN 白皮书第 12 页:

3D 管道由几种类型的可编程着色器(例如顶点着色器、外壳着色器、域着色器、几何着色器和像素着色器)和各种操纵三角形和像素的固定功能硬件组成。

在 AMD 的 GCN 架构中,有一个他们称之为导出单元(第 8 页)的东西,"the Compute Unit's window to the fixed function graphics hardware"您无法使用最后一个 OpenCL 标准访问它。

您很可能会在 NVidia GPU 中找到一些类似的东西。

更务实地回答您上次的询问:您需要一个驱动程序才能执行 GPGPU,这意味着您无论如何都无法解决“Linux 驱动程序混乱”。

于 2013-05-24T08:15:17.557 回答
1

图形卡的物理设计与通用计算单元不同。

通用计算加速单元将具有更少、更快的内核。例如,英特尔的显卡拥有 80 个 x86 内核,而 Nvidia 的显卡拥有一千或两个内核。

然而,除此之外,它们几乎是相同的。由于延迟问题,相同的延迟问题,相同的吞吐量目标。

为了回答另一个问题,DirectX 和 OpenGL 是在软件中完成的,这样可以极大地受益于 GPU 的架构。

于 2013-04-26T20:37:51.650 回答