不管你是不是专业人士,但肯定经常听到“位”这个词,比如32位,64位等等。现代CPU最常见的就是32位和64位。许多应用程序都提供32位和64位版本。
但是对游戏和工控比较熟悉的消费者,肯定还记得8位机,16位机。这些低位数的处理器曾经在游戏机上应用很广泛,现如今在工控领域也还有大量应用场景。
科技一直在进步,CPU处理位的能力多年来一直在提高。现在电脑中最流行的64位CPU于20世纪90年代首次推出,现已成为主流。但是很多人都会有这种疑惑,为什么现在还没有128位CPU。
首先复习一下什么是位。它是计算中的信息单位,表示“0”或“1”,是数字系统中最小的单位,也是所有编程的基础。位只能为1或0(因此是二进制),这些数字可以解释为真或假、开或关,也可以为正或负。
在讨论CPU架构时,位宽通常指CPU可以访问的内存地址空间的大小。如,64位CPU 可以寻址16 EB的内存空间,远远超出了当今最大的超级计算机的需求。也有地方认为位宽指的是单词运算的整数宽度,如32位处理器在计算两个64位整数的运算时就需要多次运算。
单个位本身并不是很有用,组合多个位才可以表示更复杂的数据,如数字、字母或其他字符。如,在4位计算中,可以表示的最大整数是15(从0到15),由公式2x - 1计算得出,其中x 示有多少位。在4位计算中,可以计算的最大整数是 15,比16小1,因为计算机内部从0开始计数,而非1。
如果4位能存储16个不同的整数,那么转换为8位、32位甚至128位依此类推即可。但这里处理的是指数计算,数量一开始变化很慢,但随后激增。这里有一个表格,显示了可以用二进制从1位到128位计算的最大整数。
位数 | 可表达最大整数 |
1-bit | 1 |
2-bit | 3 |
4-bit | 15 |
8-bit | 255 |
16-bit | 65,535 |
32-bit | 4,294,967,295 |
64-bit | 18,446,744,073,709,551,615 |
128-bit | 340,282,366,920,938,463,463,374,607,431,768,211,455 |
重要的不是整数长度本身,而是可寻址空间。这就是为什么32位机器只能寻址大约 4GB的内存,而64位机器可寻址16 EB(16777216 TB)。
我们希望计算机能够执行更复杂的任务。1位、2位或4位无法完成太多任务,Intel 4004是第一个可以称作处理器的芯片,是一个4位机,主要用途就是制作桌面计算器。
到了8位机时代,街机、游戏机和家用计算机这些产品开始变得可行。随着时间的推移,处理器的生产成本越来越低,体积越来越小,CPU位数也随之增长。
当将SNES和Sega Genesis等16位游戏机与8位机前辈(如Atari, NES红白机)进行比较时,位数增长的优势很快就会显现出来。超级马里奥兄弟3是NES红白机上游戏逻辑和图形最复杂的游戏之一,与两年后在16位机上发布的超级马里奥世界相比,就相形见绌了,当然这期间GPU改进对游戏效果提升也有很大贡献。
除了游戏,随着位数的增加,计算机在其他领域的应用都得到了改进。从8位的256个可能值变为16位的65,536个可能值意味着可以更精确地跟踪时间、显示更多颜色以及处理更大的文件。搭载英特尔8位8088 CPU的IBM PC,和搭载8位6502的苹果II,开启了个人计算机普及的时代。
接着业界很快发展到16位和32位,最后是64位,64位计算在20世纪90年代末到21世纪初成为主流。最重要的早期64位CPU有Nintendo 64的处理器,AMD Athlon 64和 Opteron。在软件方面,64位在21世纪初开始获得Linux和Windows主流操作系统支持。发展64位计算的历史也充满坎坷,英特尔安腾(Itanium)服务器CPU是最著名的失败案例,也是该公司有史以来最差的处理器之一。
如今,64位CPU无处不在,从智能手机到PC再到服务器。位数较少的芯片仍在生产,但只应用在小众领域。然而,自第一款64位CPU上市以来已经过去了近三十年了,为什么还没有128位CPU呢。
是不是128位技术上不可行,实现和制造很困难?事实并非如此。现代处理器中的许多组件(如内存总线和SIMD单元)已经使用128位或更大的位宽来执行特定任务。如,AVX-512指令集允许处理512位宽的数据。这些SIMD指令已从32位发展到64位、128位、256位,一直到512位,所以高于64位宽的技术上完全可行。
64位CPU可以处理超过18千万亿个唯一数字,从0到18,446,744,073,709,551,615。而128位CPU能处理超过340,282,366,920,938,463,463,374,607,431,768,211,456个数字,这已经超过天文级别。即使其中一个位要用作正负符号,其表示范围从负170,141,183,460,469,231,731,687,303,715,884,105,728到正170,141,183,460,469,231,731,687,303,715,884,105,727,找到计算包含如此多零的数字的用途也相当困难。
128位整数重要的用途包括IPv6地址、通用唯一标识符(UUID)(我的世界中有用到)和 ZFS等文件系统。但128位CPU不是处理这些任务的必要条件,已有的64位硬件完全满足需求。归根结底,没有128位CPU的主要原因是没有对128位硬件-软件生态系统的需求。128位计算技术就像是一个超级先进的锤子,使用最NB的材料,最NB的铸造技术,超豪华的真皮把手设计,但是我们现在不需要这么一个锤子来打钉子。
虽然128位CPU目前还不流行,没有公司会在近期发布相关产品,但128位CPU也不会永远不会出现。RISC-V的规范为未来128位架构的可能性留有余地,但并未详细说明其技术细节,因为目前确实没有迫切需要设计它。
128位可以表达的最大数字是340,282,366,920,938,463,463,374,607,431,768,211,455,这个数字虽然大,但远不及宇宙中的原子数量,后者被认为是具有现实意义的最大数字。如果想模拟原子级别的大空间,那么128位CPU还真的能派上用场。现在也许看起来128位CPU用途不明显,正如许多年前我们想不到1GiB的内存能干什么。