我是不是认为现代消费类显卡使用完全相同的 GPU 结构进行实际图形渲染和裸计算?
Posted
技术标签:
【中文标题】我是不是认为现代消费类显卡使用完全相同的 GPU 结构进行实际图形渲染和裸计算?【英文标题】:Am I right thinking that modern consumer graphics cards use exactly the same GPU structures for actual graphics rendering and bare computations?我是否认为现代消费类显卡使用完全相同的 GPU 结构进行实际图形渲染和裸计算? 【发布时间】:2013-04-21 02:23:11 【问题描述】:我是否认为现代消费类显卡(比如那些传统的 nVidia 和 ATi 型号)使用完全相同的 GPU 结构和操作进行实际图形渲染(通过 DirectX、OpenGL 等)和裸计算(通过 OpenCL、CUDA , 等等。)?这实际上是所有 DirectX/OpenGL 功能都支持的软件(固件+驱动程序)部分,而无需以纯硬件方式执行任何特定于图形的操作吗?是不是让它成为一个图形加速卡(而不是一个纯粹的通用计算加速单元)一个软件逻辑抽象层——一个运行在硬件上的单纯的应用程序?
我真正感兴趣的是是否有可能(不管需要多少工作和专业知识)编写一个完整的软件(用户空间)3D 渲染(比如 3D 游戏)引擎使用 CUDA/OpenCL,它将像卡本身(及其固件和驱动程序)一样高效(或接近)实现所有 DirectX/OpenGL 功能,并且在此引擎工作时是否有任何卡硬件部件将被闲置.
导致我提出这个问题的原因包括我从经验中了解到的以下事实:
硬件图形加速驱动程序过去存在许多可见的错误。
软件渲染(我过去常常玩 3D 游戏)几乎总是更稳定(不太容易出现挂起和视觉伪影)。
通用 CUDA/OpenCL 操作似乎相对稳定且具有确定性,比“硬件”图形加速更可靠。
因此,以“软件”方式实现 3D 渲染但尽可能使用 GPU 而不是 CPU 进行计算似乎是一个奇怪的想法。例如,这似乎几乎可以解决 Linux 驱动程序的混乱。
【问题讨论】:
【参考方案1】:显卡的物理设计不同于通用计算单元。
通用计算加速单元将拥有更少、更快的内核。例如,英特尔的显卡拥有 80 个 x86 内核,而 Nvidia 的显卡拥有一千或两个内核。
然而,除此之外,它们几乎是相同的。由于延迟问题,相同的延迟问题,相同的吞吐量目标。
为了回答另一个问题,DirectX 和 OpenGL 是在软件中完成的,这样可以极大地受益于 GPU 的架构。
【讨论】:
我真正感兴趣的是是否有可能(不管需要多少工作和技术)编写一个完整的软件(用户空间)3D 渲染(比如说一个使用 CUDA/OpenCL 的 3D 游戏)引擎,它将像卡本身(及其固件和驱动程序)一样高效(或接近)实现所有 DirectX/OpenGL 功能,并且如果任何卡硬件部件将被留下此引擎工作时未使用。【参考方案2】:不,您不能使用 OpenCL/Cuda 实现全速 OpenGL/Direct3D。
3D 渲染过程的一些关键部分,例如曲面细分和光栅化,以及整个可编程图形管道都是硬连线的。来自AMD's GCN whitepaper的第12页:
3D 管线由几种类型的可编程着色器组成 (例如顶点、外壳、域、几何和像素着色器)和各种 操作三角形和像素的固定功能硬件。
在 AMD 的 GCN 架构中,有一个他们称之为 Export Unit(第 8 页)的东西,即 "the Compute Unit's window to the fixed function graphics hardware"
,您无法使用最新的 OpenCL 标准访问它。 p>
您很可能会在 NVidia GPU 中找到一些类似的东西。
更务实地回答您上次的询问:您需要一个驱动程序才能执行 GPGPU,这意味着无论如何您都无法解决“Linux 驱动程序混乱”。
【讨论】:
以上是关于我是不是认为现代消费类显卡使用完全相同的 GPU 结构进行实际图形渲染和裸计算?的主要内容,如果未能解决你的问题,请参考以下文章