M.6 SIMD 超级计算机、向量计算机、多媒体 SIMD 指令扩展与 GPU 的发展(第 4 章)
本节首先以或许是最声名狼藉的超级计算机 Illiac IV 为例,介绍早期 SIMD(单指令、多数据)体系结构;随后转向或许最负盛名的超级计算机 Cray-1,介绍向量体系结构。接下来讨论多媒体 SIMD 扩展。这个名称的流行,部分得益于一场以“Bunny People”为主角的广告活动:一群穿着半导体生产线洁净服的工人跳起了迪斯科。最后,我们介绍 GPU 的历史,它就没有这么多戏剧性了。
SIMD 超级计算机
然而,通用多处理器的成本非常高,因此还考虑了其他设计选择,希望在不严重降低系统能力或效率的情况下减少成本。这些选择,就是将三个主要组成部分之一重新集中起来。……将[控制单元]集中,就形成了……Illiac IV 这样的阵列处理器的基本组织结构。
——Bouknight 等人[1972]
……对 Illiac IV 来说,编程非常困难,而且这种体系结构可能并不适合我们当时尝试运行的一些应用。我的主要看法是:在 Illiac IV 上,应用与体系结构之间并没有形成很好的匹配。
——David Kuck,Illiac IV 软件设计者、并行软件的早期先驱;Andrew Goldstein 于 1991 年进行的口述史访谈,IEEE History Center,New Brunswick,New Jersey
SIMD 是最早的并行计算模型之一,可以追溯到第一台大规模多处理器 Illiac IV。这类机器不像向量体系结构那样将数据计算流水线化,而是使用一组构成阵列的功能单元,因此也可以称为阵列处理器。
SIMD 风格计算机的最早思想来自 Unger[1958]和 Slotnick、Borck、McReynolds[1962]。Slotnick 的 Solomon 设计构成了 Illiac IV 的基础;后者也许是超级计算机项目中最声名狼藉的一个。它虽然成功推动了几项后来被证明有用的技术,但作为计算机却失败了。尽管最终只建成原计划多处理器的四分之一,成本仍从 1966 年估计的 800 万美元,上升到 1972 年的 3100 万美元。按 2011 年美元价值计算,相当于从 5400 万增至 1.52 亿美元。实际性能最高只有 15 MFLOPS,而最初预测完整系统可达到 1000 MFLOPS[Hord,1982]。机器于 1972 年交付 NASA Ames Research 后,又经过三年工程改进才可使用。这些事件减缓了 SIMD 的研究,但 Danny Hillis[1985]通过拥有 65,536 个 1 位处理器的 Connection Machine,使这种体系结构重获生机。
SIMD 多处理器的基本权衡,是单个处理器的性能与处理器数量之间的权衡。20 世纪 80 年代的 SIMD 超级计算机,更重视大规模并行,而非单个处理器的性能。例如,Connection Multiprocessor 2 提供 65,536 个 1 位宽处理器,而 Illiac IV 的方案采用 64 个 64 位处理器。大规模并行 SIMD 多处理器依靠互连或通信网络,在处理单元之间交换数据。
20 世纪 80 年代,Thinking Machines 和后来的 MasPar 先后使 SIMD 模型复兴;但它随后又退出了超级计算机主流,主要有两个原因。第一,它缺乏灵活性。许多重要问题并不具备数据并行性,而且这种体系结构缩小规模后缺乏竞争力;也就是说,小规模 SIMD 多处理器的性价比往往不如其他方案。第二,SIMD 无法利用 80 年代 SISD(单指令、单数据)微处理器技术在性能和成本上的巨大优势;当时这种技术的性能每 18 个月就翻一番。SIMD 多处理器的设计者不能利用这种低成本技术,而必须为其多处理器设计定制处理器。
向量计算机
我当然不是在发明向量处理器。据我所知,今天已有三种,分别是 Illiac-IV、[CDC]Star 和 TI[ASC]。它们都是开创性的处理器。……作为先驱,一个问题就是总会犯错,而我从来、从来不想成为先驱。能够看看先驱犯过哪些错误,再做第二个,总是更好。
——Seymour Cray,1976 年在 Lawrence Livermore Laboratories 介绍 Cray-1 的公开演讲
最早的向量处理器,是 1972 年公布的 Control Data Corporation(CDC)STAR-100[Hintz 和 Tate,1972]和 Texas Instruments ASC[Watson,1972]。两者都是内存—内存向量处理器,标量单元相对较慢。STAR 的标量与向量共用运算单元,导致标量流水线极深。两种处理器的启动开销都很高,处理的向量通常有数百至数千个元素。向量处理开始优于标量处理的交叉点,可能要超过 50 个元素。看来,这两种处理器的设计没有充分重视 Amdahl 定律的作用。
Seymour Cray 在 CDC 参与了 6600 和 7600 的研制,随后创立 Cray Research,并于 1976 年推出 Cray-1[Russell,1978]。Cray-1 采用向量寄存器体系结构,显著降低了启动开销和内存带宽需求。它还高效支持非单位步长,Cray 也发明了链接技术。最重要的是,Cray-1 当时还是世界上最快的标量处理器。出色的标量与向量性能相互匹配,可能是 Cray-1 成功的最关键因素。有些客户购买它,主要就是看中其优异的标量性能。后来的许多向量处理器,都以这款最早取得商业成功的向量处理器的体系结构为基础。Baskett 和 Keller[1977]对 Cray-1 作了很好的评估。
1981 年,CDC 开始交付 CYBER 205[Lincoln,1982]。205 与 STAR 的基本体系结构相同,但各方面性能都有提升;其向量单元还可以扩展到最多四条通道,每条通道具有多个功能单元,以及每周期可传送多个字的宽 load-store 流水线。CYBER 205 的峰值性能远高于 Cray-1,但在实际程序中,差距小得多。
1983 年,Cray Research 交付了第一台 Cray X-MP[Chen,1983]。更快的时钟周期——9.5 ns,而 Cray-1 为 12.5 ns——更好的链接支持,以及多条访存流水线,使 Cray Research 保住了超级计算机领域的领先地位。改进的链接支持,使存在 RAW 依赖的向量操作能够并行执行。后来推出的 Cray-2 是全新设计,最多可配置四个处理器。其重要特点是采用 DRAM,从而在当时实现了很大的内存容量。第一台 Cray-2 配备 256M 个 64 位字的内存,比此前所有已交付 Cray 机器的内存总量还大!Cray-2 的时钟比 X-MP 快得多,流水线也深得多;但它没有链接功能,内存延迟极大,每个处理器也只有一条访存流水线。总体而言,只有在问题需要其巨大主存时,Cray-2 才比 Cray X-MP 更快。
同年,日本处理器厂商进入超级计算机市场。最先出现的是 Fujitsu VP100、VP200[Miura 和 Uchida,1983],后来又有 Hitachi S810 和 NEC SX/2[Watanabe,1987]。这些处理器的性能接近 Cray X-MP。总体而言,这三家厂商的处理器峰值性能远高于 Cray X-MP,但由于启动开销很大,典型性能常常更低。Cray X-MP 倾向于多处理器方法,先推出双处理器版本,再推出四处理器版本;相比之下,三种日本处理器强调可扩展的向量能力。
1988 年,Cray Research 推出 Cray Y-MP,它是更大、更快的 X-MP,最多允许八个处理器,周期缩短到 6 ns。满配八个处理器的 Y-MP 通常是最快的超级计算机,不过单处理器的日本超级计算机可能快于单处理器 Y-MP。1989 年末,Cray Research 分成两家公司,都以研制 90 年代初可交付的高端处理器为目标。Seymour Cray 领导分拆出的 Cray Computer Corporation,直到该公司于 1995 年倒闭。其首款处理器 Cray-3 原计划采用砷化镓实现,但公司未能开发出可靠且具有成本效益的实现技术。1996 年,Seymour Cray 在车祸中不幸去世;此前不久,他又创办了一家公司开发高性能系统,但这一次采用商用通用组件。
Cray Research 则专注于 C90:一种最多支持 16 个处理器、时钟频率为 240 MHz 的新高端系统,于 1991 年交付。1993 年,公司推出第一种高度并行的处理器系统 T3D,最多采用 2048 个 Digital Alpha 21064 微处理器。1995 年,公司宣布推出新的低端向量机 J90 和高端机器 T90。T90 与 C90 很相似,但采用三维封装和光学时钟分配,时钟频率达到约两倍,即 460 MHz。
1995 年,Cray Research 被 Silicon Graphics 收购。1998 年发布的 SV1 系统,将速度快得多的 CMOS 处理器接入 J90 的存储系统,并为每个 CPU 增加向量数据缓存,以满足提高后的内存带宽需求。2000 年,Silicon Graphics 将 Cray Research 出售给 Tera Computer,合并后的公司更名为 Cray Inc.。
日本超级计算机厂商继续改进其设计。2001 年,NEC SX/5 普遍被认为是当时最快的向量超级计算机,具有 16 条工作于 312 MHz 的通道,最多 16 个处理器共享内存。同年发布的 NEC SX/6 是第一种商用单芯片向量微处理器,将乱序四发射超标量处理器、标量指令和数据缓存,以及八通道向量单元集成在一个芯片上[Kitagawa 等人,2003]。Earth Simulator 由 640 个节点通过完整交叉开关连接而成,每个节点包含八个共享本地内存的 SX-6 向量微处理器。2004 年发布的 SX-8 将通道数减为四条,却将向量时钟频率提高到 2 GHz。标量单元以较低的 1 GHz 运行;这在向量机中很常见,因为向量单元缺少冒险,更容易采用深流水线。
2002 年,Cray Inc. 推出基于全新向量 ISA 的 X1。X1 的 SSP 处理器芯片,集成了工作于 400 MHz、带标量缓存的乱序超标量处理器,以及工作于 800 MHz 的双通道向量单元。四个 SSP 芯片组合为一个 MSP 时,峰值向量性能达到 12.8 GFLOPS,与同时代 NEC SX 机器具有竞争力。2004 年交付的增强型 X1E,将这两个频率分别提高到 565 MHz 和 1130 MHz。许多思想借鉴自 Cray T3E;T3E 是采用现成微处理器的 MIMD(多指令、多数据)计算机。X1 的新指令集具有更多寄存器,内存以本地方式分布在各处理器旁,但处于共享地址空间中。乱序标量单元与向量单元解耦,使标量单元能超前运行。当数据为利用 MSP 缓存而分块时,向量会变短,这不太适合八通道向量单元。为处理这些较短向量,每个只有两条向量通道的处理器可以执行不同的循环。
Cray X2 于 2007 年公布。考虑到市场规模,投资开发新芯片很难证明其合理性,因此它可能成为最后一种实际建造的 Cray 向量体系结构。其处理器时钟频率为 1.3 GHz,具有八条向量通道,单精度峰值性能为 42 GFLOP/s,并包含 L1 和 L2 缓存。每个节点为四路 SMP,最多配备 128 GB DRAM;整个系统最大为 8K 个节点。
NEC SX-9 于 2008 年公布,每个节点最多有 16 个处理器,每个处理器具有八条通道,运行于 3.2 GHz,双精度向量峰值性能为 102 GFLOP/s。16 处理器 SMP 可配备 1024 GB DRAM;最大系统规模为 512 个节点。
现代向量化编译器技术的基础和数据依赖的概念,由 Illinois 大学的 Kuck 及其同事[1974]建立。Padua 和 Wolfe[1986]对向量化编译器技术作了很好的概述。
多媒体 SIMD 指令扩展
一家计算机硬件公司……怎么可能与迪斯科有什么共同之处?如果看看世界上最大的微处理器公司……Intel 于 1997 年推出的一场广告活动,就会发现共同之处还真不少。
——IBS Center for Management Research,“Dancing Its Way Towards Leadership”,2002 年
翻阅历史,1957 年的 TX-2 已经采用分段 ALU 来支持当时的媒体处理,但这些思想后来淡出了视野,直到 30 年后个人计算机时代才被重新发现。桌面微处理器都要支持自身的图形显示;随着晶体管预算增加,为图形操作增加支持就成为必然。许多图形系统用 8 位表示三原色中的每一种颜色,再用 8 位表示像素的透明度。视频会议和电子游戏加入扬声器、麦克风后,也需要支持声音。音频采样要求高于 8 位的精度,但 16 位就足够。
每种微处理器都有专门支持,使字节和半字在内存中占用更少空间;但典型整数程序很少对这种宽度的数据执行算术运算,因此支持通常仅限于数据传送。Intel i860 在公司内部是以图形加速器的定位获得立项的。其设计者认识到,许多图形和音频应用会对由此类数据组成的向量执行相同操作[Atkins,1991;Kohn,1989]。1989 年 i860 的晶体管预算还无法容纳向量单元,但只要将 64 位 ALU 内的进位链分段,就能同时操作由八个 8 位、四个 16 位或两个 32 位操作数组成的短向量。这种分段 ALU 的成本很低。适合利用这种支持的应用,包括 MPEG 视频、电子游戏中的三维图形、数字摄影,以及视频会议中的音频和图像处理。
这种多媒体支持后来像病毒一样,传播到几乎所有桌面微处理器。HP 率先在取得市场成功的桌面 RISC 中加入这种支持;很快,其他厂商也都在 20 世纪 90 年代提出了各自的版本。
这些扩展最初称为子字并行或向量。Intel 市场部门用 SIMD 来描述 1996 年公布的 80x86 MMX 扩展后,SIMD 成了流行名称;其中一部分功劳,要归于成功的电视广告:迪斯科舞者穿着以半导体生产线洁净服为原型的服装。
图形处理单元
自 NVIDIA 于 2007 年 9 月推出 CUDA API、GPU 计算进入高性能计算主流以来,已经过去近三年。此后,这项技术以出人意料的强劲且稳定的速度被采用。一两年前还在开展小规模试点的许多组织,已经转向企业级部署;GPU 加速机器也已进入 TOP500 榜单,而且从第二名就开始出现。高性能计算界向来不以快速接受新事物著称,CUDA 却能得到相对迅速的采用,这是一个值得关注的信号。
人们通常认为 GPU 计算更困难,我却认为,它迄今的成功表明,其复杂程度并不超过高质量的 CPU 编程。而且,它能更清楚、更简洁地表达一大类问题中的并行性,使代码更易维护、更具可扩展性,也更适合映射到未来的众核体系结构。
——Vincent Natol,“Kudos for CUDA”,HPCwire,2010 年
三维图形流水线硬件从 20 世纪 80 年代初大型、昂贵的系统,发展为小型工作站,再发展到 90 年代中后期的 PC 加速器。期间发生了三项主要变化:
- 性能领先的图形子系统,价格从 50,000 美元降到 200 美元。
- 性能从每秒 5000 万像素提升到每秒 10 亿像素,从每秒 10 万顶点提升到每秒 1000 万顶点。
- 硬件原生能力从线框,即多边形轮廓,发展到以固定颜色平面着色的填充多边形,再到以插值颜色平滑着色的填充多边形,最终支持带纹理映射和初步多重纹理的全场景抗锯齿。
可扩展 GPU
图形系统从一开始就将可扩展性视为有吸引力的特征。工作站图形系统通过改变安装的像素处理器电路板数量,让客户选择像素处理能力。20 世纪 90 年代中期以前,PC 图形几乎没有扩展选择,只有 VGA 控制器。支持三维的加速器出现后,市场开始容纳不同档次的产品。3dfx 在 Voodoo2 中引入最初的 SLI(Scan Line Interleave,扫描线交错),支持多板扩展,并在 1998 年一度占据性能冠军位置。同样在 1998 年,NVIDIA 开始基于同一体系结构推出不同产品,包括高性能的 Riva TNT Ultra 和低成本的 Vanta。最初通过按速度分档和封装区分,后来转向独立芯片设计,例如 GeForce 2 GTS 与 GeForce 2 MX。在原文所述时期,同一代体系结构需要四到五种独立 GPU 芯片设计,才能覆盖桌面 PC 的性能和价格范围;此外,笔记本和工作站还有各自的细分市场。收购 3dfx 后,NVIDIA 于 2004 年从 GeForce 6800 开始延续多 GPU SLI 概念,以对程序员和用户透明的方式提供多 GPU 扩展能力。整个扩展范围内的功能行为一致,同一个应用无需修改,就能在该体系结构系列的任何实现上运行。
图形流水线
早期图形硬件可以配置,却不能由应用开发者编程。每一代产品都会提供渐进式改进,但开发者的需求日益复杂,要求的新功能越来越多,已无法合理地全部作为内置固定功能提供。Lindholm 等人[2001]介绍的 NVIDIA GeForce 3,迈出了通向真正通用、可编程着色器的第一步:把原本内部专用的浮点顶点引擎指令集开放给应用开发者。这与 Microsoft DirectX 8 和 OpenGL 顶点着色器扩展的发布同步。DirectX 9 时期的后续 GPU,将通用可编程性和浮点能力扩展到像素片段阶段,并允许顶点阶段访问纹理。2002 年推出的 ATI Radeon 9700,具有可通过 DirectX 9 和 OpenGL 编程的 24 位浮点像素片段处理器。GeForce FX 则加入了 32 位浮点像素处理器。这是统一不同阶段功能这一总体趋势的一部分,至少从应用程序员的角度看如此。NVIDIA 的 GeForce 6800 和 7800 系列仍分别采用不同的处理器设计,并为顶点处理和片段处理配备独立硬件。2005 年的 Xbox 360 引入了一种早期统一处理器 GPU,使顶点着色器和像素着色器能够在同一个处理器上执行。
GPGPU:过渡阶段
支持 DirectX 9 的 GPU 出现后,一些研究者注意到 GPU 原始计算性能的增长趋势,开始探索用 GPU 解决复杂并行问题。DirectX 9 GPU 的设计只针对图形 API 要求的功能;要使用其计算资源,程序员必须将问题转化为原生图形操作。例如,要同时运行许多个像素着色器实例,就必须向 GPU 提交一个三角形;如果需要矩形形状,还必须进行裁剪。着色器无法向内存执行任意散布(scatter)操作。将结果写入内存的唯一方法,是把它作为像素颜色值输出,再配置帧缓冲操作阶段,将结果写入二维帧缓冲区,或者根据需要与已有值混合。除此之外,将一轮计算结果传给下一轮的唯一方法,是把所有并行结果写入像素帧缓冲区,再把这个帧缓冲区作为纹理映射,输入下一计算阶段的像素片段着色器。在那个时期,将通用计算映射到 GPU 上十分别扭。尽管如此,勇于探索的研究者仍通过艰苦努力,展示了一些有用的应用。这个领域被称为 GPGPU,即 GPU 上的通用计算。
GPU 计算
在为 GeForce 8800 开发 Tesla 体系结构时,NVIDIA 意识到:如果程序员能够把 GPU 当作处理器来思考,它的潜在用途会广泛得多。NVIDIA 选择了一种编程方法,让程序员显式声明工作负载中的数据并行部分。为支持 DirectX 10 这一代产品的逻辑图形流水线,NVIDIA 已经开始研制高效的浮点与整数处理器,使其能够同时运行多种工作负载。该处理器的设计利用了这样一种常见情况:一组线程执行同一条代码路径。为满足编译后的 C 程序的要求,NVIDIA 加入了按整数字节地址寻址的 load 和 store 指令;还引入线程块,即协作线程数组、线程块网格,以及屏障同步,来派发和管理高度并行的计算工作,并加入原子内存操作。NVIDIA 开发了 CUDA C/C++ 编译器、库和运行时软件,使程序员易于使用新的数据并行计算模型并开发应用。
为了创建独立于厂商的 GPU 编程语言,许多公司正在为 OpenCL 开发编译器。OpenCL 具有 CUDA 的许多特征,却能运行在多得多的平台上。按原文 2011 年的情况,为 GPU 编写 CUDA 代码的性能远高于编写 OpenCL 代码。
AMD 收购第二大 GPU 厂商 ATI,预示着 GPU 计算将进一步普及。原文这一部分即将定稿时公布的 AMD Fusion 体系结构,是传统 GPU 与传统 CPU 的初步融合。NVIDIA 也宣布了 Project Denver,将 ARM 标量处理器与 NVIDIA GPU 放在同一地址空间中。等这些系统交付后,值得关注的问题包括:它们究竟集成得多紧密,以及这种集成会怎样影响数据并行应用和图形应用的性能与能耗。
参考文献
SIMD 超级计算机
Bouknight, W. J., S. A. Deneberg, D. E. McIntyre, J. M. Randall, A. H. Sameh, and D. L. Slotnick [1972]. “The Illiac IV system,” Proc. IEEE 60:4, 369–379. Also appears in D. P. Siewiorek, C. G. Bell, and A. Newell, Computer Structures: Principles and Examples, McGraw-Hill, New York, 1982, 306–316.
Hillis, W. D. [1985]. The Connection Multiprocessor, MIT Press, Cambridge, Mass.
Hord, R. M. [1982]. The Illiac-IV, The First Supercomputer, Computer Science Press, Rockville, Md.
Slotnick, D. L., W. C. Borck, and R. C. McReynolds [1962]. “The Solomon computer,” Proc. AFIPS Fall Joint Computer Conf., December 4–6, 1962, Philadelphia, Penn., 97–107.
Unger, S. H. [1958]. “A computer oriented towards spatial problems,” Proc. Institute of Radio Engineers 46:10 (October), 1744–1750.
向量体系结构
Asanovic, K. [1998]. “Vector Microprocessors,” Ph.D. thesis, Computer Science Division, University of California, Berkeley.
Baskett, F., and T. W. Keller [1977]. “An Evaluation of the Cray-1 Processor,” in High Speed Computer and Algorithm Organization, D. J. Kuck, D. H. Lawrie, and A. H. Sameh, eds., Academic Press, San Diego, Calif., 71–84.
Chen, S. [1983]. “Large-scale and high-speed multiprocessor system for scientific applications,” Proc. NATO Advanced Research Workshop on High Speed Computing, June 20–22, Julich, West Germany. Also in K. Hwang, ed., “Superprocessors: Design and applications,” IEEE, August, 59–73, 1984.
Flynn, M. J. [1966]. “Very high-speed computing systems,” Proc. IEEE 54:12 (December), 1901–1909.
Gebis, J. and Patterson, D. [2007]. “Embracing and extending 20th-century instruction set architectures,” IEEE Computer, 40:4 (April), 68–75.
Hintz, R. G., and D. P. Tate [1972]. “Control data STAR-100 processor design,” Proc. IEEE COMPCON, September 12–14, 1972, San Francisco, 1–4.
Kitagawa, K., S. Tagaya, Y. Hagihara, and Y. Kanoh [2003]. “A hardware overview of SX-6 and SX-7 supercomputer,” NEC Research and Development Journal 44:1 (January), 2–7.
Kozyrakis, C., and D. Patterson [2002]. “Vector vs. superscalar and VLIW architectures for embedded multimedia benchmarks,” Proc. 35th Annual Intl. Symposium on Microarchitecture (MICRO), November 18–22, 2002, Istanbul, Turkey.
Kuck, D., P. P. Budnik, S.-C. Chen, D. H. Lawrie, R. A. Towle, R. E. Strebendt, E. W. Davis, Jr., J. Han, P. W. Kraska, and Y. Muraoka [1974]. “Measurements of parallelism in ordinary Fortran programs,” Computer 7:1 (January), 37–46.
Lincoln, N. R. [1982]. “Technology and design trade offs in the creation of a modern supercomputer,” IEEE Trans. on Computers C-31:5 (May), 363–376.
Miura, K., and K. Uchida [1983]. “FACOM vector processing system: VP100/ 200,” Proc. NATO Advanced Research Workshop on High Speed Computing, June 20–22, Julich, West Germany. Also in K. Hwang, ed., “Superprocessors: Design and applications,” IEEE, August, 59–73, 1984.
Padua, D., and M. Wolfe [1986]. “Advanced compiler optimizations for supercomputers,” Communications of the ACM 29:12 (December), 1184–1201.
Russell, R. M. [1978]. “The Cray-1 processor system,” Communications of the ACM 21:1 (January), 63–72.
Vajapeyam, S. [1991]. “Instruction-Level Characterization of the Cray Y-MP Processor,” Ph.D. thesis, Computer Sciences Department, University of Wisconsin–Madison.
Watanabe, T. [1987]. “Architecture and performance of the NEC supercomputer SX system,” Parallel Computing 5, 247–255.
Watson, W. J. [1972]. “The TI ASC—a highly modular and flexible super processor architecture,” Proc. AFIPS Fall Joint Computer Conf., December 5–7, 1972, Anaheim, Calif., 221–228.
多媒体 SIMD
Atkins, M. [1991]. “Performance and the i860 Microprocessor,” IEEE Micro, 11: 5 (September), 24–27, 72–78.
Kohn, L., and N. Margulis [1989]. “Introducing the Intel i860 64-Bit Microprocessor,” IEEE Micro, 9:4 (July), 15–30.
GPU
Akeley, K., and T. Jermoluk [1988]. “High-performance polygon rendering,” Proc. SIGGRAPH 88, August 1–5, 1988, Atlanta, Ga., 239–46.
Hillis, W. D., and G. L. Steele [1986]. “Data parallel algorithms,” Communications of the ACM 29:12 (December), 1170–1183 (http://doi.acm.org/10.1145/7902.7903).
IEEE 754-2008 Working Group. [2006]. DRAFT Standard for Floating-Point Arithmetic, 754-2008 (https://doi.org/10.1109/IEEESTD.2008.4610935).
Lee, W. V., et al. [2010]. “Debunking the 100X GPU vs. CPU myth: an evaluation of throughput computing on CPU and GPU,” Proc. ISCA ’10, June 19–23, 2010, Saint-Malo, France.
Lindholm, E., M. J. Kligard, and H. Moreton [2001]. A user-programmable vertex engine. In SIGGRAPH ’01: Proceedings of the 28th annual conference on Computer graphics and interactive techniques, 149–158.
Moore, G. E. [1965]. “Cramming more components onto integrated circuits,” Electronics 38:8 (April 19), 114–117.
Williams, S., A. Waterman, and D. Patterson [2009]. “Roofline: An insightful visual performance model for multicore architectures,” Communications of the ACM, 52:4 (April), 65–76.