论文部分内容阅读
当前流行的半导体技术使得计算越来越廉价,但同时带宽却越来越昂贵。因此,高性能计算机系统必须充分开发局部性以提高应用的计算密集性,同时还要充分开发并行性,以提高硬件中计算部件的利用率。传统的编程模型(如OMP和MPI等)和体系结构(如多核体系结构)大多强调了对并行性开发的支持,而对局部性(如生产者—消费者局部性)开发的支持还不够。流编程模型正好可以满足这两个需求。它通过数据流的定义显示描述了大量的并行性,同时通过计算核心内部以及之间的数据使用关系大大减少了程序的全局带宽。流体系结构通过提供大量的计算部件以开发流编程模型所表示出来的多个层次的并行性(包括数据级、指令级以及任务级),同时通过提供多级寄存器层次以开发流编程模型所表现出来的局部性。本文主要从流处理器体系结构、编程语言、编译优化技术以及编程方法等方面展开了研究,具体工作和创新点如下:1)在体系结构方面,我们设计并实现了一个面向科学计算的流处理器——飞腾64(FT64),它具有64位的计算环境,峰值性能达到16GFLOPS。FT64从指令集系统、流控制器、微码控制器、计算簇、存储层次以及网络接口和主机接口等多个方面进行了优化和扩展设计。例如,FT64为科学计算中常用的乘加运算提供了大量硬件和指令上的支持。此外,FT64提供了流级通信(一种共享存储的通信方式)和消息传递两种通信机制,以便于扩展到大规模并行系统。2)在编程语言和编译方面,我们设计了一个面向科学计算的流编程语言——Stream FORTRAN 95(SF95)。SF95基于FORTRAN 95扩充了10条编译指导命令。它隐式地定义了stream和kernel,精确地抽象了流体系结构的主要特征。3)在编译方面,我们为SF95流编程语言设计了一个编译器——SF95Compiler。它面向科学计算实现了面向流体系结构的大量优化,包括流转换、代码转换和一个内联的超越函数库。4)在编程方法方面,我们为传统程序提供了一种映射到SF95流程序的方法来继承已有的科学计算程序。首先,我们仿照当年循环可向量化和可并行化的定义,给出了循环流化以及循环可流化的定义;然后,基于循环相关性分析的理论,我们研究了串行循环、可向量循环以及可并行化循环与可流化循环之间的关系,给出了这三种程序映射到SF95程序的条件。最后,我们针对科学计算中的9个典型应用核心进行了测试,包括3个NPB的测试用例(EP、MG和CG),一个SPEC2000的测试用例(Swin),以及五个重要的科学计算核心(FFT、Laplace、Jacobi、GEMM和NLAG-5)。结果显示,除了CG以外,我们的FT64比Itanium 2执行性能更高或者至少相当。