在加载驱动程序之前,CPU如何与GPU通信?[重复]


24

这个问题在这里已有答案:

据我了解,GPU有自己的指令集,其指令由图形驱动程序生成。然后将GPU指令发送到GPU。那么,在加载驱动程序之前图形通信如何工作?是否有一些基本指令,GPU必须至少实现这些指令以确保计算机可以执行基本的显示任务?


Answers:


34

“有一些基本指令......?” 对,就是这样。所有GPU都需要实现几个简单接口中的一个 - 它们太原始而不能被称为“指令集” - 操作系统附带的平台固件(“BIOS”或“UEFI”)和驱动程序知道如何与之交谈。现在通常选择的“简单接口”是“VGA”(“视频图形阵列”),这是最初为该标准的视频卡定义的寄存器级接口。(现在30多岁了!)

例如,如果Windows系统上的设备管理器将图形卡识别为“Microsoft基本视频适配器”,则操作系统无法找到该卡的特定驱动程序,而是加载了与VGA兼容的驱动程序。

嗯,从技术上讲,Windows 总是加载该驱动程序(因此它可以显示例如启动进度屏幕),然后(在启动后很晚)识别并加载显卡的“真实”驱动程序。

VGA标准仅支持一些低分辨率图形模式和文本模式,并且不涉及我称之为“运行程序”甚至GPU上的“指令”。本质上,系统固件或“基本视频驱动程序”只是将其置于所需模式,然后将位写入位图; 位图中的位直接对应于屏幕上的像素。必须完成绘制直线或曲线的任何算法都在CPU中完成。这是一种非常低级且缓慢的方式,可以让屏幕上显示内容。但对于操作系统安装和早期启动进度屏幕等,它足以显示固件,并与固件进行简单的交互。

维基百科:视频图形阵列


1
完整的情况很复杂。第一批“VGA”卡确实有限。很长一段时间Windows NT需要支持800x600,但是,只有16种颜色。看起来很糟糕!请参阅我链接的维基百科文章。
Jamie Hanrahan

9
Windows更可能使用VESA BIOS Extentions(VBE)作为其基本适配器。VBE得到广泛支持,允许16-24位色彩和高达1600x1200像素。
8

3
它不会是VESA BIOS扩展,因为Windows断然不会调用BIOS / UEFI代码任何引导的最初阶段完成之后。
Jamie Hanrahan

2
我见过一些计算机,包括我的笔记本电脑,其中“旋转点”Windows启动屏幕启动极低分辨率(320x200,我会说,VGA的256色模式),然后快速切换到更高的分辨率。
Artelius

1
即使是16x颜色的800x600也超出了VGA的功能。VGA最大为640x480 16种颜色。然而,图形芯片制造商超越了这一点,并将添加“SuperVGA”又名SVGA模式,这将增加颜色和分辨率,同时还拥有自己的专有模式。VESA出现了访问这些专有模式的标准方法,但这是在PC开始主要是GUI驱动的时候,因此驱动程序是一个不错的选择。当3D加速开始加入时也是如此。因此,虽然大多数卡都与VESA兼容,但没有人谈论它。
trlkly

16

我将通过解释旧硬件如何工作来尝试清除所有这些背后的“伏都教”。现代GPU不能像这样工作,但它们模仿CPU到图形卡的界面。

TL;博士

80年代和90年代早期的图形芯片/卡必须非常快速地产生输出(相对于时钟速度),因此它们不执行指令,而是具有固定电路。他们只是将数据从RAM中吸出,因此CPU只需要将数据转储到正确的RAM中,然后图形芯片将其拾取并将其丢弃在屏幕上。CPU还可以在图形芯片上设置各种配置变量。

细节:

在80年代,家用电脑有一个非常“愚蠢”的图形芯片,有一些固定的行为。如果我向后通过管道,它将是最有意义的。

CRT显示器

这些监视器需要模拟输入。换句话说,更高的电压=更亮的输出。彩色监视器有3个通道(红色,绿色和蓝色(或者,例如YUV或YIQ)。这些电压调节了电子束的强度。简单的东西。

CRT监视字面上使用的电磁铁,使电子束从左向右偏转,然后从低处再次开始,从左到右,从上到下依次开始。然后回到顶部并重复。

DAC

图形芯片具有“数模转换”转换器(非常常见的电子元件)。这将数字值(例如,2,4或8位)转换为可提供给监视器的电压。

扫描

图形芯片必须与电子束“保持同步”,向DAC发送正确的值,以便它能够在正确的时间输出相应的电压。(时钟用于此,我不会进入。)这里没有时间执行指令。一切都是硬连线的,并且需要一小段固定的时钟周期。

视频模式

早期的芯片速度不是很快,RAM也有限。因此,它们倾向于允许选择各种模式和其他配置参数,例如背景颜色,字体选择,光标位置和大小,调色板选择和精灵。大多数提供高分辨率“仅字符”模式和低分辨率逐像素模式。

三个值得注意的VGA模式是:

  • 16(ish)颜色80x25文本模式(这实际上是BIOS加载屏幕的样子)
  • 16色640x480高分辨率模式
  • 256色320x200高彩色模式

绘画像素

非常粗略,根据图形系统,管道看起来像这样:

当前像素位置⇒处理字符/字体/精灵/像素/配置数据⇒像素值⇒调色板⇒DAC

这是需要从几个RAM位置读取的第二步。例如,在文本模式下,将查找一个1字节的字符。这将形成字体表的索引。将从该表中查找一点,指示该像素是前景色还是背景色。将获取第三个字节以获得该前景/背景颜色。总而言之,从RAM读取3个字节。

但是这种“流动”几乎是一组简单的固定电路,它们的排列方式与刚刚描述的流程完全相同。

内存总线接口

英特尔CPU有这种令人烦恼的遗留物称为IO总线,但它并不重要,所以我假装它不在那里。

CPU通过在存储器总线上广播READ或WRITE请求以及地址来访问RAM。虽然大多数有效地址都会从RAM中获得响应,但某些范围会由设备处理。例如,从特定地址读取可能会为您提供有关键盘按键的信息。

通过写入“图形范围”的右侧部分,您既可以编写屏幕内容,也可以设置图形卡配置参数。“哑”图形芯片不执行任何指令。它只是一直在流动,有几个字节流过它的电路并输出电压。

使用VGA,显卡实际上有RAM ,因为您可以在将图形卡写入图形RAM之前将其配置为预处理数据,以在某些情况下提高性能。

VESA

VGA后的图形卡提供更高的分辨率和良好的色深,但工作原理类似。许多现代图形卡仍然提供与此兼容,以便在引导期间提供更高的分辨率。但VGA是“万无一失”的,实际上每张卡都会效仿。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.