我有一个二进制文件,它的大小超过200 MB,这使我认为自己完成这样的任务非常困难。我正在尝试查看驱动程序如何与GPU精确通信(因为我需要为一个科学项目仿真GPU),并且至少需要通过检查设备驱动程序来了解DX和OpenGL在GPU端如何工作的一些想法。 。它是32位和64位,并且可以在Windows上运行,但这并不是一个问题,因为主要的工作是弄清楚它如何发送数据/命令包,它们发送到什么地址,如何扫描PCI /等等,以及如何在没有任何文档的情况下帮助我更好地了解GPU内部功能的工作原理。我知道这将很困难,并且我将设法模拟我认为它将如何工作,并且仅模拟我知道如何访问它并从那里开始工作。我之所以问我,是因为我需要这些专业人士的帮助,以帮助他们解决这些问题:

1.人们如何开始对这一层进行逆向工程?

2。我应该从这个过程中学到GPU的体系结构吗?

3.整体信息是否足以以某种方式管理仿真/模拟GPU?

我100%认真,所以我希望能得到至少可以让我动起来的答案。

评论

如果您想从一开始就这样做,则可能需要在接下来的几年中专门用于该项目。但是,人们一直在对ATI和NVidia卡进行逆向工程以产生免费的Linux驱动程序,您可能想看看这些项目做了什么。 nouveau.freedesktop.org/wiki和xorg.freedesktop.org/wiki/RadeonFeature可能会让您入门。驱动程序尚未完成,因此它们可能已实现或未实现您感兴趣的功能。

这有点多余,但是请确保您擅长Windows驱动程序开发。与您一无所知相比,倒车要容易得多

@AcidShout如果最终结果是对设备驱动程序进行逆向工程可以帮助我完成的高级GPU仿真,那么这并不是多余的。大多数GPU仿真都是非常“高级”的,而不能在较低级别上处理芯片的黑暗和复杂操作。

可能对此页面感兴趣:“免费和开源图形设备驱动程序”(en.wikipedia.org/wiki/…)

#1 楼

哼...
逆向工程这么大的软件将需要大量的意志,时间,当然还有技术知识。
说实话,除非您正在考虑创办公司或提供驱动程序的开源/免费软件版本,否则您实际上是在浪费时间。尤其是在科学项目中。

您必须记住,逆向工程不是一门精确的科学,因为制造商总是将他们的大部分技术保密。有足够的动力,您必须首先了解目标技术的工作方式。可以通过阅读可用的手册并对该平台进行微基准测试(在这种情况下为GPU)来“部分”完成该操作。 。您的微基准测试结果中总是会出现异常值。

由于您更关心GPU /主机通信协议,而不是GPU的体系结构,因此我建议您检查Ocelot 。
这是一个针对GPU和CPU的开源仿真器,我相信它将是一个很好的信息来源。不需要做很多事情,而是将PTX代码加载到GPU的特定存储区域中,以便在其中进行读取和执行。有关PTX的更多信息,请转到此链接。

评论


是的,我之前尝试过Ocelot,但并不是我要找的东西。虽然有所帮助,但它根本无法解决棘手的问题,例如了解GPU管道和更详细的指令集。不幸的是,CUDA与金属的距离还不够:我希望将GPU仿真到一个实际的GPU设备驱动程序可以在裸机系统级别与仿真GPU交互的程度。您说的很多东西都有帮助,但这是假设我对兼容性层或执行层更感兴趣,但实际上并没有像栈/寄存器级别那样模拟GPU等CPU。

–马松露中的松露
2015年3月26日19:41



是的,我想让它开源,如果值得证明的话,可以免费,这取决于我自己能走多远。基本上,它会超越我,但我想先让轮子运转。由于许多GPU仿真只是对宿主API功能(例如OpenGL / DirectX)的执行层转换,因此我想解决以前从未见过的事情,这是从头开始的系统级GPU仿真。

–马松露中的松露
15年3月26日在19:47

在这种情况下,您将必须仔细研究目标GPU的体系结构细节,这些细节绝对不容易找到/找到。请注意,这将特定于特定的硬件平台,并且维护和改进将是一团糟。我本人负责一家知名微芯片制造商的硬件仿真,并且可以向您保证,即使使用机密材料,也很难取得很好的结果。裸机是地狱!

– Yaspr
15年3月27日在9:45

模拟微芯片?在什么级别?例如,您可以在超高层(例如仿真)上模拟GPU,在该GPU中,已知功能包可以转换为对texel /位图(OpenGL,DirectX)的直接API调用,或者可以采取一些步骤进一步(并通过仿真)或多或少地量化GPU所采取的每个步骤,以使它的复制与仿真器中的CPU仿真可以或多或少地精确一样;或者,可以仅以大多数内部操作(操作码,内存等)所需的级别来仿真GPU,并且可以跳过/细化每个细节。

–马松露中的松露
2015年4月4日在2:25



简单地说,我们将硬件模拟到纳米级的精度。主要是CPU和集成GPU的结合,为此我们使用了超级计算机。我认为这是比对操作码和指令进行仿真更高级的方法。我们通常涵盖所有硬件(互连网络,指令管道等)以及高级构造(操作码,寄存器等)。

– Yaspr
15年4月4日在11:30