如何直接访问GPU?

问题描述 投票:0回答:4

大多数人都知道,与 GPU 相比,CPU 的设计并不适合进行浮点计算。我想知道如何在没有任何抽象层或驱动程序的情况下使用 GPU 的能力。我可以使用汇编语言、C、C++ 语言对 GPU 进行编程吗(我的意思是如何编程?)。虽然汇编似乎可以帮助我直接访问 GPU,但 C/C++ 可能需要一个介质库(例如 OpenCL)来访问 GPU。

让我问你另一个问题:在没有任何第三方驱动程序的情况下,现代 GPU 的功能有多少会暴露给程序员?

graphics assembly cpu gpu
4个回答
8
投票

接口没有记录,因此像 OpenCL 这样的东西是直接对 GPU 进行编程的唯一实用方法。

如果没有驱动程序,您将不得不尝试自行对 GPU 的完整功能进行逆向工程。


3
投票

像 NVDIA 和 ATI 这样的 GPU 制造商都是闭源公司,他们选择不向公众披露 GPU 架构和工作方式。这就是为什么我们不能像使用最多CPU那样直接对GPU进行编程。我们利用 GPU 的能力进行计算的唯一方法是使用提供的库,例如 NVDIA 中的 CUDA。但是有一种可能的方法,您可以直接对 GPU 进行编程以进行计算,但为此您需要进行逆向工程并记录所有 GPU 及其寄存器和系统调用,并且您知道,由于我们的资源和时间有限,这是不可能的。

PS:唯一的其他方法是作为 GPU 核心开发人员登录并与供应商签署 NDA(保密协议),这对于像我们这样的初学者和个人来说可能不会发生。


1
投票

本质上,您必须在 Windows 或 Linux 上编写驱动程序。 接口可能会根据您尝试使用的芯片组进行记录。 英特尔网站上有大量 PDF 文档。 然而,这充其量只是一个不简单的练习,您的代码只能在该组硬件上使用。 在大多数情况下,仅仅阅读和理解文档就需要花费一些时间,因为“面向对象编程并不是它真正的工作原理”,并且如何执行此操作或操作方法不仅仅记录了硬件和寄存器。 然而,如果真的想这样做,你最好的选择是从 Linux 上针对特定芯片组的开源驱动程序开始,然后根据你的 SICK TWISTED 目的进行调整。 总而言之,除了学习方面之外,这可能是一个坏主意。


0
投票

是的,不幸的是,没有像 CPU 那样的单一开放 GPU 架构。甚至单独打开nVidia/AMD架构。太糟糕了。想象一下,您可以像为 x64 CPU 编译程序一样为 GPU 编译程序。这将消除驱动程序、不同操作系统等方面的任何问题,并允许使用 GPU 真正的全部功能。但是,是的,现代软件世界真是一团糟,有 9000 层抽象,没有静态链接,数以百万计的第三方依赖项......在过去,大多数游戏都有自己的操作系统,直接在硬件上运行,没有任何操作系统之间。我并不是说我们应该去那里,但是...

© www.soinside.com 2019 - 2024. All rights reserved.