首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Cray-1 随 FPGA“复兴”

Cray-1 随 FPGA“复兴”

关键字:Cray-1   FPGA   硬件障碍  
  1976 年,迪斯科还大行其道,冷战正处于高潮,而我要到 9 年之后才出生。那年,正是 Cray-1 在计算机领域大显身手之际,个人计算当时还处于发展的初期(MITS Altair 一年前刚刚推出),同时 Control Data 和 IBM 等公司统领高端市场。Cray-1 是人们印象中用于定义“超级计算机”的传奇机器之一。其采用独特的 C 型结构,运行速度高达惊人的 80 MHz,桌面电脑直到 20 年之后才能达到这样的速度。Cray 速度快,也极富吸引力。

  现在,让我们把时间快进到 33 年后,那是 2009 年初的一个清晨,我起床后也想拥有一台 Cray 超级计算机。

  我首先要回顾一下基于 FPGA 的复古计算机技术。我 2007 年 12 月从南加州大学毕业并获得 BSEE 学位,当时我把它称作“计算机招魂术”。作为新生代电子工程师,我对神秘的计算机架构特别感兴趣,觉得正好可以借此提高我的 Verilog 水平。我毕业时为自己买了一套 Digilent 公司的 Spartan®-3E 1200 开发板当礼物。我的第一台计算机则是 1980 年代的老古
董 NonVon-1。它属于首批“大型并行”机之一,类似于同样古老但更为成功的 Connection Machine 系列(不过主要用于数据库)。这是一台非常有趣的设备,采用 8 位处理器的二进制树状结构(带 1 位 ALU)。

  Cray-1 是人们印象中用于定义“超级计算机”的传奇机器之一。其采用独特的 C 型结构,运行速度高达惊人的 80 MHz,桌面电脑直到 20 年之后才能达到这样的速度。

  经过几个月的折腾,我总算造出了一台 31 节点的超级计算机,不过其计算能力还比不上现今任何一块手表。虽然这东西没什么用处,却让我明白了摩尔定律的巨大作用,也激发我进一步动手的欲望。

  首台 NonVon-1 获得成功后,我又开始寻找新的项目(我的 Verilog 技能仍比较欠缺)。我认识到,低端 FPGA 已经能够处理一些比较高级的硬件了,目前甚至 32 位软处理器都比较常见了。我努力寻找一个能焕发新生的新目标,也考虑了不少选择,包括 UNIVAC 这台有趣的设备,不过它确实有点太老了。 Digital Equipment 公司的 PDP 系列已经被硬件仿真过。Z80 设备的软件仿真器也非常常见。因此,我想到了 Cray。

Cray-1 是什么?

  Cray-1 是 Seymour Cray 于 20 世纪 70 年代初离开 Control Data 后所成立新公司 Cray Research 推出的首台设备。当时该设备计算能力强大,需要占用整个房间来放置计算机和磁盘才能保证数据接收。此外,它还拥有一个全职工程师团队来确保正常运行,甚至还需要自备发电设备才能确保加电启动。该设备重新定义了当时的“超级计算机”(毕竟这是 Cray),而且幸运的是它的设计美妙而简单,相关资料也非常齐备(图 1 所示)。Cray-1 硬件参考手册(在因特网上很容易找到)非常详细,现在的用户往往只能拿到黑盒子,看到这么详细的说明肯定会感到震惊。几乎所有运算代码、寄存器及时序图都得到了妥善而详尽的保留。

  这台计算机本身是一款64 位流水线处理器,顺序指令发送,只有 128 条独特指令。它采用类似 RISC 的指令集,所有指令都既可在存储器和寄存器(加载或存储指令)之间,也可在两个操作数寄存器和一个目的地寄存器之间(全部算术/逻辑指令)。指令为 16 位或 32 位长。该设备使用三种不同类型的寄存器:地址、标量和矢量寄存器。地址寄存器为 24 位宽,并能够让设备对高达 4 Megaword (32 MB) 的主存储器进行寻址。标量寄存器为 64 位宽,用于计算。每个矢量寄存器包括 64 个 64 位寄存器,从而能够在进行大矩阵科学计算时确保出色的性能。


  图 1 — 让计算机爱好者感到幸运的是,Cray 的架构设计美妙而简单,而且相关资料保存完好。


  在 CPU 中,指令可发送给 13 个独立的全流水线“功能单元”。高强度的流水线功能对实现 Cray 当时极高的 80MHz 时钟频率而言至关重要。不同的功能单元处理逻辑操作、移位、乘法等。比方说,一个浮点乘法指令需要 7 个周期才能完成,但计算机每个周期都能发出一条新的乘法指令(假定不存在寄存器冲突)。该设计会产生一种有趣的情况,即没有“除法”指令,而是采用倒数近似值除法。也就是说,我们不是计算 X / Y,而是计算 (1 / Y) * X。单独的浮点“倒数近似值”函数单元可在 14 个时钟周期内计算出倒数。

马拉松

  我刚开始着手这一项目时,并不完全确定是否能靠自己的力量重新构建如此复杂
返回列表