不久前,我与某人发生了争论,争论的焦点是没有独立或集成显卡解决方案的计算机(在本例中是 Ryzen)是否可以显示主板内置 HDMI 连接的输出。
我选择“是”,因为我认为软件渲染是可行的。当然,可以使用 CPU 将正确的信号发送到 HDMI 连接器,而无需 VGA 卡。
我尝试过在谷歌上搜索这个问题,但不幸的是,问的大多数问题都是由计算机新手提出的,所以答案并不是我想要的。
答案1
当然,可以使用 CPU 将正确的信号发送到 HDMI 连接器,而无需 VGA 卡。
这被称为“位拆裂”——本质上 CPU 会不断改变 I/O 寄存器来创建信号。
这是可能的,而且已经通过非常低速的接口(如串行端口)实现了。旧式 Commodore 64 几乎通过其 RS-232 实现并利用其用于与打印机和磁盘驱动器通信的总线实现了这一点。RS-232 的速度不能超过每秒 2400 位(2.4Kbit/秒)。
但 HDMI 是一种非常非常快的接口。例如,HDMI 2.0 的速度为 18Gbps。这意味着 CPU 每秒必须执行 180 亿次调制信号的操作。
假设你最快的 CPU 也大约是 3GHz,而这意味着指令的周期时间是 1/3,000,000,000 -
几乎所有的CPU指令都需要一个以上的周期
I/O 指令是“序列化的”(因为它们必须按顺序执行),所以推测等高级 CPU 功能没有帮助。
因为工作必须按照 1 个管道的顺序进行,所以多个 CPU 没有帮助。
I/O 指令不与内存或寄存器交互,因此缓存/MMX/SSE/AVX/EVEX 除了帮助确定要发送到管道的内容外不会执行任何操作。
因此,我认为现代 x86 CPU 无法实现 18GHz 的“bit-bang”,甚至无法达到 3Ghz。如果 HDMI 接口没有最低速度,刷新率可能会非常非常低。
但您可以看到为什么专用硬件会驱动接口。
无论如何,您仍然需要某种最低限度的硬件来进行连接,因为您的 CPU 连接到总线,并且该硬件必须使用与该总线相同的“语言”或协议才能与 CPU 交互。对于像 Commodore 64 及其同类的旧系统,它具有“多功能接口适配器”或“复杂接口适配器”之类的设备 - CPU 会读取/写入此芯片以获取“端口”的状态(它已连接到 CPU 总线并出现在 CPU 总线上),并且该芯片将与背面的物理端口或主板插槽中的引脚进行物理连接。
对于现代 x86 CPU,目前最接近的是 PCI-E,PCI-E 控制器现在内置于 CPU 中,但曾经是芯片组的一部分。因此,您仍然需要某种东西来接收 PCI-E 信号并将其转换为 HDMI 信号。
VGA 则不同尽管。
答案2
不可以。如果没有内置图形单元,这些端口就没有物理连接。您需要某种连接到该端口的硬件,该端口才真正可用。
答案3
我认为你的朋友赢了赌注。
通过 HDMI 或其他物理接口输出实际视频需要满足两个条件:
- 生成连续的视频帧
- 通过视频连接器传输帧。
这是与实际硬件端口进行通信的任务,CPU 本身无法合理地完成。
鉴于你期望实际产量通过 HDMI 端口,有两个原因不能单独通过 CPU 完成此操作:
- 渲染视频输出的每一帧需要大量重复计算。CPU可以完成工作,但这会严重妨碍其完成“日常工作”的能力,导致系统运行缓慢。GPU 专为此类工作而设计。
- 将视频帧的数字表示转换为将其传输出物理端口所需的信号需要针对该端口定制的硬件。CPU 旨在在许多不同的系统中工作,并且无法控制它们可能要使用的物理视频端口。这使得纯 CPU 无法端到端地处理生成视频帧的任务和通过物理端口输出。即使是内置 GPU 的现代 CPU 也依赖于主板上提供的附加组件来输出视频,从技术上讲,这两个部分共同构成了显卡。
显然,CPU 可以执行任务 1,但任务 2 需要额外的硬件才能完成。在现代计算机中,这就是图形适配器。