11 cpu gpu graphics-card drivers bus
假设我正在使用计算机,或多或少是任何典型的现代计算机。设备驱动程序负责我在屏幕上看到的所有内容,包括在我键入此内容时更新屏幕(当然,这在操作系统的范围内,例如 Windows)。
让我们将其降低到硬件不关心是否有内核,而只接受指令的级别。
基本上,GPU 是如何“确切地知道”如何做所有事情的?驱动程序是否基本上控制了使用驱动程序提供的特殊指令计算用于显示的二进制数据可能或需要的每个微小的、内在的或硬件电路级功能?
如果是这样,GPU 是否像 CPU 一样使用“特殊”语言或“汇编”来理解发送给它的指令?
我的知识有太多空白,而且 GPU 背后存在这种令人不快的“谜团”,并可以通过硬件直接访问它们。
例如,GPU 和 CPU 必须能够以某种方式连接,因此可以通过 CPU 组件访问 GPU 并实现正确的数据/地址总线。设备供应商不可能让驱动程序之外的 GPU 无法访问,因为驱动程序也是编译代码,而 GPU 作为可编程电路,必须使用二进制指令。
我问过这些类型的问题,但在许多网站上,它们很快就被删除了,为什么没有答案,那么这里的大谜团/秘密是什么?它是主板上的一块硬件,可以像其他任何硬件一样访问。
所以真的......假设这是一个关于软件和硬件的“确定”问题,任何人都可以直接访问GPU而无需供应商特定文件,因为这些文件并不神奇。
那么,GPU 是如何从裸机、直接硬件角度在特定于硬件的层面上“编程”的呢?
基本上,GPU 是如何“确切地知道”如何做所有事情的?驱动程序是否基本上控制了使用驱动程序提供的特殊指令计算用于显示的二进制数据可能或需要的每个微小的、内在的或硬件电路级功能?
不,该设备有自己的 IC 来控制设备功能的所有硬件级方面,并且它们与协调设备上方面的中央处理器接口并提供可以使用的更高级别的编程接口访问、读取、写入和控制设备。
如果是这样,GPU 是否像 CPU 一样使用“特殊”语言或“汇编”来理解发送给它的指令?
是和否。像大多数设备一样,视频卡使用标准来简化问题。他们使用VESA 等标准访问启动时视频等常规功能,或使用CUDA访问 GPU 编程功能。此外,程序可以使用机器代码(通常由 C 编译为汇编程序)结合设备的编程文档(可从适配器的网站获得)直接访问非标准或设备相关的功能。
我的知识有太多空白,而且 GPU 背后存在这种令人不快的“谜团”,并可以通过硬件直接访问它们。
驱动程序直接访问设备,这就是他们具有特殊访问权限的原因(出于安全和稳定性原因,在 Vista+ 中不允许常规用户级程序直接访问硬件)。使用端口、DMA(直接内存访问)和内存映射访问设备。
例如,GPU 和 CPU 必须能够以某种方式连接,因此可以通过 CPU 组件访问 GPU 并实现正确的数据/地址总线。设备供应商不可能让驱动程序之外的 GPU 无法访问,因为驱动程序也是编译代码,而 GPU 作为可编程电路,必须使用二进制指令。
驱动程序可以通过访问内存映射端口等来使用常规 CPU 指令读取和写入设备。作为一个易于理解的示例,您可以通过写入地址 B8000 的“内存”以文本模式将字符放在屏幕上。这个地址不是 RAM,而是映射到视频卡的内存,所以写入它会写入屏幕。同样,你可以通过把你想要的字符写在写tothe屏幕AL
注册表,0x09
在AH
寄存器中,然后调用BIOS中断0x10
。更高级的功能也不例外;您可以使用设备公开和记录的任何接口读取和写入适配器的内存,调用其芯片上的函数等等。
所以真的......假设这是一个关于软件和硬件的“确定”问题,任何人都可以直接访问GPU而无需供应商特定文件,因为这些文件并不神奇。
仅对于符合标准的功能,但对于其他所有内容(即更高级的内容),您需要查阅制造商的编程文档。
那么,GPU 是如何从裸机、直接硬件角度在特定于硬件的层面上“编程”的呢?
通过多层:
我不完全是计算机体系结构方面的天才,但我会尽力根据我的知识分点来处理你的问题。
设备驱动程序负责我在屏幕上看到的所有内容,包括当我键入此内容时屏幕会更新(当然,这是在操作系统的范围内,例如 Windows)。
确实如此,主要是因为与GPU的直接交互并不容易实现。因此出现了 DirectX 和 OpenGL 等图形框架。
维基百科上这个方便的定义更详细地解释了这一点:
设备驱动程序通过充当硬件设备和使用它的应用程序或操作系统之间的转换器来简化编程。程序员可以独立于最终用户使用的任何特定硬件来编写更高级别的应用程序代码。
基本上,GPU 如何准确地“知道”如何做所有事情?驱动程序是否基本上控制使用驱动程序提供的特殊指令计算用于显示的二进制数据可能或需要的每个微小的、固有的或硬件电路级功能?
GPU 是微处理器。因此,他们进行处理。它们处理从CPU(即元素的位置)馈送到适当显示器的数据。他们“知道”如何做所有事情,因为它们是按照这种方式制造的,并且一大群人就向 GPU 发送数据和从 GPU 发送数据的正确方法达成了一致。
将显示驱动程序视为缓冲区或代理。想象一下您是一个程序窗口,用户将您向上移动。您要求 GPU 刷新显示。但是,当 GPU 讲克林贡语而您讲瓦肯语时,驱动程序会收到您的命令,将其转换为 GPU,然后 GPU 执行您的命令。
如果是这样,GPU 是否像 CPU 一样使用“特殊”语言或“汇编”来理解发送给它的指令?
来自维基百科:
ARB汇编语言是一种低级着色语言,可以表征为汇编语言。它由 OpenGL 架构审查委员会 (ARB) 创建,旨在标准化控制硬件图形管道的 GPU 指令。
有这个例子,请记住各个制造商(NVIDIA、ATI)都有自己的指令集。
此外,还有OpenCL和许多其他方法可以在某种程度上直接将指令编程到 GPU。
所有这些都应该在某种程度上回答你的问题。
归档时间: |
|
查看次数: |
9865 次 |
最近记录: |