图形驱动程序如何以编程方式从 CPU 与 GPU 通信?
How does a graphics driver programmatically communicate from CPU to GPU?
我很想知道 CPU 指令如何与 GPU 交互。据我了解,CPU 有一组它可以理解和执行的指令(机器代码),驱动程序是一种通过 CPU 与 GPU 通信的软件。
但是这个软件是如何通信的呢? CPU 是否包含明确告诉它与另一个设备通信的某些汇编指令?
我能否编写汇编代码或 C/C++ 代码来与显卡通信,就像驱动程序在特定机器环境下所做的那样?
与 PC 上的任何硬件设备一样,显卡将对特定内存地址和可能 input/output 端口的读写做出响应。 PCI 总线定义了它们的分配方式。
没有与显卡通信的特定 CPU 指令,在写入内存位置的情况下,它仅使用普通指令来执行此操作,而在端口 IO 的情况下,它仅使用通用指令指示这样做。在这两种情况下,都需要一些 CPU 设置来 "map" 内存位置到虚拟地址 space 或允许访问端口。
例如,可以将对内存位置 1234567 的写入定向到图形卡以向其指示命令。 (当然这只是一个虚构的例子)
您当然可以编写自己的驱动程序来执行此操作,但是您必须确切地知道卡需要什么才能进行不同的操作,而这通常是只有制造商知道的秘密,他们在驱动程序软件中实现了它。有些卡片比其他卡片有更好的文档记录,有些已经部分逆向工程。
作为冯诺依曼架构,内存总线是一个硬件系统的中心。每个设备都与内存总线通信,包括 CPU.
让我们看看CPU,它只能向内存总线发出基本的read/write操作,以及一些额外的操作,比如lock/barrier。
其他设备也是如此,例如,GPU 可以通过 PCI 接口通过 DMA read/write 主内存;并且GPU也将一些寄存器映射到主总线上,写入特定的地址,映射的寄存器可以发出特定的命令。
一般来说,所有设备都通过主内存总线相互通信。
但是extra,CPU还有一个中断接口,这就更不用说了
是的,内存地址映射到计算机系统中的每个设备。基本的事情是,如果你写入某个映射到设备的内存区域,设备就会被写入。为此,该设备具有映射到主存储器的特定寄存器和其他可编程空间。使用这些寄存器,您可以为您的案例配置 GPU 等设备。最后,对于巨大的数据传输,显然 GPU 使用了 DMA 传输,因此一旦启动 DMA 传输,它就可以在没有 CPU 干预的情况下工作。
所以底线是,要与 GPU 或其他硬件设备通信,您需要研究安装 GPU 的系统架构,因为它最终是系统软件退回到安装 GPU 的系统中,负责各种内存映射和分配。
显卡并不比计算机内外的任何其他物品更神奇。您如何阅读此网页,您至少有两台计算机通过接口 (ethernet/internet) 相互通信。内存、pcie(视频、硬盘、usb 等)、usb(鼠标、键盘等)、网络都通过最终绑定到 cpu 的接口连接到主 cpu' s 外部接口(内存总线,没有更好的术语)。
我们喜欢认为这些设备中的许多都是纯逻辑的,这似乎是有道理的,当您写入路由到该外围设备的某个地址时,该地址和数据会告诉该逻辑块执行某些操作。但就像在另一台计算机提供服务的一台计算机上阅读此网页一样,它不必是纯逻辑,你只需要一个接口来移动数据。不仅是 gpu,你电脑中的许多其他东西都有内部处理器,网络接口可能,鼠标和键盘可能有,硬盘最有可能,而且我们现在知道笔记本电脑上的电池组有一个处理器和固件好吧(mac 电池感染了病毒,在全新安装后会再次感染计算机)。
没有魔法。您计算机中这些其他处理器上的 software/firmware 运行 与逻辑没有什么不同,它们的一部分工作是等待来自主 cpu 的命令来做事。鼠标请给我按钮状态。 Gpu 请给我画一个三角形。
视频cpu中没有特殊的汇编语言指令。 cpu 不知道墙上的一个洞里的视频卡,驱动程序 knows/determines 它知道如何与之通信的视频卡的地址 space,通过那个地址 space 它写入告诉视频卡做事所需的数据值。给我画一个三角形可能涉及几项数据,毫无疑问是三个角的坐标,可能是填充颜色或者是直线,这可能只是与该外设通信接口定义的一部分。
这里没有魔法,如果您想请某人为您做某事,您可以提供一份清单让他们做,并以他们可以理解的方式进行交流(前往 123 main street,拨打电话门铃,告诉接电话的人你想要两张今晚演出的门票,给他们这笔钱,return 加上零钱和门票),使用硬件更容易,因为该外围设备的通信接口定义明确。
除了上述答案之外,CPU 通过发送变量(内存地址)作为在 GPU 内部具有意义的值来联系和处理 GPU,还执行图形 API(OpenGL、Vulkan.. .) 需要做的,这些 API 通常用于与 GPU 交互,通过许多步骤实现硬件加速渲染(如果它用于渲染而不是 GPGPU 情况),其中一个基础是渲染管道。
我很想知道 CPU 指令如何与 GPU 交互。据我了解,CPU 有一组它可以理解和执行的指令(机器代码),驱动程序是一种通过 CPU 与 GPU 通信的软件。
但是这个软件是如何通信的呢? CPU 是否包含明确告诉它与另一个设备通信的某些汇编指令?
我能否编写汇编代码或 C/C++ 代码来与显卡通信,就像驱动程序在特定机器环境下所做的那样?
与 PC 上的任何硬件设备一样,显卡将对特定内存地址和可能 input/output 端口的读写做出响应。 PCI 总线定义了它们的分配方式。
没有与显卡通信的特定 CPU 指令,在写入内存位置的情况下,它仅使用普通指令来执行此操作,而在端口 IO 的情况下,它仅使用通用指令指示这样做。在这两种情况下,都需要一些 CPU 设置来 "map" 内存位置到虚拟地址 space 或允许访问端口。
例如,可以将对内存位置 1234567 的写入定向到图形卡以向其指示命令。 (当然这只是一个虚构的例子) 您当然可以编写自己的驱动程序来执行此操作,但是您必须确切地知道卡需要什么才能进行不同的操作,而这通常是只有制造商知道的秘密,他们在驱动程序软件中实现了它。有些卡片比其他卡片有更好的文档记录,有些已经部分逆向工程。
作为冯诺依曼架构,内存总线是一个硬件系统的中心。每个设备都与内存总线通信,包括 CPU.
让我们看看CPU,它只能向内存总线发出基本的read/write操作,以及一些额外的操作,比如lock/barrier。
其他设备也是如此,例如,GPU 可以通过 PCI 接口通过 DMA read/write 主内存;并且GPU也将一些寄存器映射到主总线上,写入特定的地址,映射的寄存器可以发出特定的命令。
一般来说,所有设备都通过主内存总线相互通信。
但是extra,CPU还有一个中断接口,这就更不用说了
是的,内存地址映射到计算机系统中的每个设备。基本的事情是,如果你写入某个映射到设备的内存区域,设备就会被写入。为此,该设备具有映射到主存储器的特定寄存器和其他可编程空间。使用这些寄存器,您可以为您的案例配置 GPU 等设备。最后,对于巨大的数据传输,显然 GPU 使用了 DMA 传输,因此一旦启动 DMA 传输,它就可以在没有 CPU 干预的情况下工作。
所以底线是,要与 GPU 或其他硬件设备通信,您需要研究安装 GPU 的系统架构,因为它最终是系统软件退回到安装 GPU 的系统中,负责各种内存映射和分配。
显卡并不比计算机内外的任何其他物品更神奇。您如何阅读此网页,您至少有两台计算机通过接口 (ethernet/internet) 相互通信。内存、pcie(视频、硬盘、usb 等)、usb(鼠标、键盘等)、网络都通过最终绑定到 cpu 的接口连接到主 cpu' s 外部接口(内存总线,没有更好的术语)。
我们喜欢认为这些设备中的许多都是纯逻辑的,这似乎是有道理的,当您写入路由到该外围设备的某个地址时,该地址和数据会告诉该逻辑块执行某些操作。但就像在另一台计算机提供服务的一台计算机上阅读此网页一样,它不必是纯逻辑,你只需要一个接口来移动数据。不仅是 gpu,你电脑中的许多其他东西都有内部处理器,网络接口可能,鼠标和键盘可能有,硬盘最有可能,而且我们现在知道笔记本电脑上的电池组有一个处理器和固件好吧(mac 电池感染了病毒,在全新安装后会再次感染计算机)。
没有魔法。您计算机中这些其他处理器上的 software/firmware 运行 与逻辑没有什么不同,它们的一部分工作是等待来自主 cpu 的命令来做事。鼠标请给我按钮状态。 Gpu 请给我画一个三角形。
视频cpu中没有特殊的汇编语言指令。 cpu 不知道墙上的一个洞里的视频卡,驱动程序 knows/determines 它知道如何与之通信的视频卡的地址 space,通过那个地址 space 它写入告诉视频卡做事所需的数据值。给我画一个三角形可能涉及几项数据,毫无疑问是三个角的坐标,可能是填充颜色或者是直线,这可能只是与该外设通信接口定义的一部分。
这里没有魔法,如果您想请某人为您做某事,您可以提供一份清单让他们做,并以他们可以理解的方式进行交流(前往 123 main street,拨打电话门铃,告诉接电话的人你想要两张今晚演出的门票,给他们这笔钱,return 加上零钱和门票),使用硬件更容易,因为该外围设备的通信接口定义明确。
除了上述答案之外,CPU 通过发送变量(内存地址)作为在 GPU 内部具有意义的值来联系和处理 GPU,还执行图形 API(OpenGL、Vulkan.. .) 需要做的,这些 API 通常用于与 GPU 交互,通过许多步骤实现硬件加速渲染(如果它用于渲染而不是 GPGPU 情况),其中一个基础是渲染管道。