时过境迁,在x86 主宰云端资料中心、中低阶伺服器、工作站、桌机一路到笔电的今日,可能已经没有多少人能回想起「RISC 与CISC 之争」曾发生在1990 年代初期的史迹,但毕竟x86 指令集公认是充满缺陷的产物,连当代最伟大的计算机结构教科书都「白纸黑字」并「烧录」于无数莘莘学子的脑中,而AMD K5 的创造者更是用一句「毫无道理可循」(it just doesn't make a lot of sense)一锤定音,几无争议空间。
让人满脸黑线的,只有动辄挥出「逆向思考全垒打」的大恩大德,将x86 的市场胜利,视为「x86 指令集架构优良」佐证的天真论点,并时有所闻,连ARM 都比x86 更「记忆体存取密集」(Memory-Intensive)这种话都讲得出口。
我们先来瞧瞧当年AMD K5 的总工程师Mike Johnson 怎么评论x86 指令集,由设计x86 处理器的大师级人物(他本人的确是超纯量管线技术的先驱者,那份变成首本超纯量技术专书的史丹佛大学博士论文非常有名,附录更深度分析设计超纯量x86 处理器的困难点)写出来的批评,特别有说服力,也一再被后人引述:
The complexity of the x86 is not an impassable barrier. The x86 really isn't all that complex—it just doesn't make a lot of sense…. The biggest weakness in the x86 instruction set is the lack of registers coupled with an extremely painful addressing scheme.
从这短短一段话,可看到几个重点:
「毫无道理可循」(doesn't make a lot of sense):相较于指令编码程度统──4 Bytes(32 bits)的多数RISC体系,x86指令集的格式和编码极度混乱,长短粗细肥瘦不一,从1~17 Bytes都有可能。影响所及,遍及所有的环节,从快取记忆体撷取指令、实作指令管线化,到处理器发生中断例外时要迅速储存执行状态并尽快回复等,都造成非常严重的后遗症,激增研制高效能x86处理器的门槛,也增加验证产品的时间与成本。
「缺乏足够的暂存器」(the lack of registers):一般RISC指令集都会定义32个通用资料暂存器(讲的精确一点是31个)或浮点运算暂存器,但x86在64位元和AVX之前,怎么样都只有少少的8个(因为要扣掉ESP和EBP,说6个或许比较贴切)。当引进指令管线化和更先进的超纯量管线后,自然就激增了暂存器冲突的机率,这也是激发x86处理器拥有强大非循序指令执行(暂存器重新更名)与高效率记忆体子系统的主因。
[attach]52852[/attach]