Graphics 如何直接访问GPU?

Graphics 如何直接访问GPU?,graphics,assembly,cpu,gpu,Graphics,Assembly,Cpu,Gpu,正如你们大多数人所知,与GPU相比,CPU并没有很好地设计来进行浮点计算。我想知道如何在没有任何抽象层或驱动程序的情况下使用GPU的能力。我能用汇编、C、C++语言编程一个GPU吗?虽然汇编似乎可以帮助我直接访问gpu,但C/C++可能需要一个媒体库(例如OpenCL)来访问gpu 让我再问你一个问题:如果没有任何第三方驱动程序,现代GPU的功能有多少会暴露给程序员?接口没有文档记录,因此类似的东西是直接编程GPU的唯一实用方法 如果没有驱动程序,您将无法独自对GPU的完整功能进行反向工程。实际

正如你们大多数人所知,与GPU相比,CPU并没有很好地设计来进行浮点计算。我想知道如何在没有任何抽象层或驱动程序的情况下使用GPU的能力。我能用汇编、C、C++语言编程一个GPU吗?虽然汇编似乎可以帮助我直接访问gpu,但C/C++可能需要一个媒体库(例如OpenCL)来访问gpu


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

接口没有文档记录,因此类似的东西是直接编程GPU的唯一实用方法


如果没有驱动程序,您将无法独自对GPU的完整功能进行反向工程。

实际上,您必须在Windows或Linux上编写驱动程序。根据您尝试使用的芯片组,可能会记录接口。英特尔在其网站上有大量的PDF文档。然而,这充其量只是一个不平凡的练习,您的代码只能在这组硬件上使用。在大多数情况下,温顺地阅读和理解文档需要花费一点时间,因为“OOPs不是它真正的工作方式”,以及如何做到这一点或那一点不只是硬件和寄存器的文档。然而,如果你真的想这样做,你最好的选择是在Linux上为特定的芯片组开发开源驱动程序,然后将其用于你的目的。总而言之,除了学习方面,这可能是个坏主意。

像NVDIA和ATI这样的GPU制造商是封闭源代码公司,他们选择不向公众披露GPU架构和工作。这就是为什么我们不能直接编程的GPU,因为我们可以用最多的CPU。我们可以利用GPU的能力进行计算的唯一方法是在NVDIA的情况下使用提供的库,如CUDA。但是有一种可能的方法,你可以直接编程一个GPU进行计算,但为此你需要逆向工程和记录所有GPU及其寄存器和系统调用,你知道这是不可能的,因为我们访问有限的资源和有限的时间


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

是的,从实际意义上说,这是不可能的。这不是不可能的,只是一个非常非常非常糟糕的主意。要访问硬件,您必须编写一个驱动程序。并花费数周/数月/数年时间学习硬件的工作原理。AFAIK对于当前的Intel和ATI芯片,这些接口都有很好的文档记录。通过文档,otoh只是一个寄存器列表。像Intel HD这样的板载芯片,或者像Ryzen这样的APU怎么样?我可以吗?ATI/AMD为开源radeon驱动程序使用了一些开发人员,并发布了一些规范。好吧,这真的是唯一一个完全拒绝开放任何东西的英伟达。