LT-SP2汇编器的设计与实现*

2012-07-25 03:20佘增辉樊晓桠
微处理机 2012年3期
关键词:指令集标号体系结构

佘增辉,樊晓桠,张 萌

(西北工业大学计算机学院,西安710129)

1 概述

在媒体应用、信号处理和科学计算等领域,以密集计算为典型特征的流应用[1]正成为微处理器面对的一类主要负载。十多年来,国际学术界和工业界涌现出了多种流体系结构和流处理器,典型的结构有 Imagine、Merrimac、CELL、RAW、TRIPS、STORM系列高性能DSP、NVIDIA的GPU和AMD流处理器等。LT-SP2是一款面向流应用的多核流处理器体系结构,能对大规模数据进行并行处理。LT-SP2采用两级流编程模型,流级(Stream)和核心级(Kernel)。Stream级程序主要进行程序控制和资源分配,Kernel级程序则进行高度的并行计算。两级编程模型能够有效地把访存和计算分离开来,保证了计算所需的数据带宽。

基于LT-SP2采用的两级编程模型,流应用程序的运行需要两级编译器[2]提供支持。流应用程序采用高级语言编写,然后经过Stream级编译器和Kernel级编译器两级编译生成目标二进制在LTSP2流计算平台上运行。所论述的汇编器作为Kernel级编译器的一部分,负责Kernel级程序的指令调度和寄存器分配,在LT-SP2的研究中具有重要意义。在航天应用领域,空间粒子辐射能够引起存储器粒子翻转[3]等错误,大大降低了系统的安全性。LT-SP2汇编器通过引入冗余备份和校验机制,提升了计算系统的容错性能。首先介绍了LT-SP2的体系结构与指令集,然后进一步讨论LTSP2汇编器的设计与实现问题,最后对实验结果进行了分析。

2 LT-SP2流体系结构与指令集

2.1 LT-SP2流体系结构

针对流应用具有的丰富并行性、多层次局域性和数据访问可预知性等特点,LT-SP2体系结构充分挖掘数据级并行[4]和优化存储结构,提出了一种处理大规模并行计算问题的高效解决方案。图1为LT-SP2流体系结构顶层框图,其主要构件可以分成7个部分,分别是主处理器(Host Processor)、片上主存(Main Memory)、I/O控制器(I/O Controller)、流控制器(Stream Controller)、流寄存器文件(Stream Register File,SRF)、特殊寄存器文件和四个短向量计算簇(Short Vector Cluster,SVC)。

图1 LT-SP2流体系结构顶层框图

主处理器和四个短向量计算簇是LT-SP2流体系架构的主要计算部件。主处理器控制流级程序的运行,完成流的定义、流的加载和调用核心程序。短向量计算簇(SVC)内部构件包括向量load-store单元(Vector Load/Store Unit,VLSU),向量简单定点计算部件(Vector Simple Integer Unit,VSIU),向量复杂定点计算部件(Vector Complex Integer Unit,VCIU),向量置换部件(Vector Permute Unit,VPU),向量浮点计算部件(Vector Floating-Point Unit,VFPU)和向量寄存器文件(Vector Register File,VRF)。四个短向量计算簇以协处理器的方式工作,通过执行核心级程序完成大批量的并行计算任务。

为了有效解决流计算中对高数据吞吐率的要求,LT-SP2流体系结构定义了软件参与管理的三级存储层次,从里到外依次是SVC内部向量寄存器VRF、片上流寄存器 SRF、片上主存储器M.M。在LT-SP2上开发流应用程序时,首先在通用计算机上用高级语言编写流应用程序,然后通过交叉编译和汇编,生成目标平台上可运行的二进制代码,最后下载到LT-SP2流计算平台上运行。

2.2 LT-SP2指令集分析

LT-SP2指令集属于精简指令集,拥有数量丰富的运算类指令,而控制转移类指令相对较少。

LT-SP2采用短向量的SIMD技术,一条指令可以同时对多个数据元素执行同一种操作,指令集具有高度的数据并行性。指令集定义了32个128位宽的向量寄存器(V0~V31)和32个128位宽的标量寄存器(R0~R31),所有的数据通路和执行部件宽度也为128位。根据数据元素位数的不同,可实现对16个8bit的数据元素,8个16bit的数据元素,以及4个32bit的数据元素执行同一操作。

指令操作数寻址模式比较简单,只有寄存器变址寻址和立即数寻址。LT-SP2指令集是一种典型的Load/Store类指令,数据只有通过Load类指令从外部存储器加载进向量寄存器,通过Store类指令存回外部存储器。所有的运算类指令都面向向量寄存器进行操作,指令的源操作数来源于片上的向量寄存器堆或者指令中的立即数,多数指令有四个操作数,三个源操作数和一个目的操作数。SRF组织结构分成了4个独立的Bank存储空间,对目标端的4个SVC单元独立编址,对主处理器端统一编址。

指令二进制编码采用32位,最低位是校验位,可以归纳成如图2所示的三种格式。

图2 LT-SP2指令格式

3 LT-SP2汇编器的设计

LT-SP2汇编器的设计目标是实现对LT-SP2短向量指令集的全面支持,允许多种操作数模式,引入冗余备份和校验机制来提高系统的容错性能。

3.1 汇编器框架设计

通过对LT-SP2体系结构以及汇编器功能进行分析,LT-SP2汇编器的主要框架设计如图3。汇编器包含常用的功能模块,如词法语法分析器[5]、符号表管理、错误处理和目标代码生成器等。在语义处理和代码生成器之间引入操作模式管理,实现对多种操作数宽度的运算支持。校验码产生器用于生成目标二进制码中的校验位信息。代码冗余模块对关键代码段进行冗余备份,保证关键代码在校验出错的情况下能正确执行。

图3 LT-SP2汇编器总体框架设计

3.2 多种操作数模式支持

LT-SP2的寄存器宽度为128位,汇编器支持字节(8bit)、半字(16bit)和字(32bit)3种操作数模式。例如add vD,vA,vB实现将vA和vB相应位置上的数据相加,结果存至vD的对应位置上,vA、vB和vD均为128位宽度。通过汇编器编译后一条add指令能够实现16个8bit、8个16bit或4个32bit操作数的并行加法,扩展了指令集功能。

3.3 冗余备份和校验机制

LT-SP2主要面向媒体应用、信号处理和科学计算等领域中的超大规模计算难题。为了将应用范围扩大到航天或航空领域,需解决存储器中的粒子翻转问题,保证代码在平台上正确执行。冗余备份和校验机制的引入能够在一定程度上提高系统的安全性。

LT-SP2汇编器中冗余备份和校验机制的主要设计思想是:对汇编源程序中的关键代码段进行冗余备份,在进行校验出错的情况下能恢复出备份的正确代码,以达到提高系统整体安全性的目的。

4 LT-SP2汇编器的实现

汇编器的实现通常有两种方式,一种是移植已有的成熟汇编器源码,另一种是采用编译程序自动构造工具辅助设计[6]。LT-SP2汇编器采用第二种实现方式,运用编译程序自动构造工具 flex和bison[7]生成部分代码。

4.1 汇编器工作流程

根据以上设计,实现的汇编器工作流程如图4所示。

词法和语法分析阶段主要识别关键字、特殊寄存器、操作数和各种符号定义,过滤掉所有的注释语句和完成源汇编程序代码行的计数,并进行相应的语义处理。labelNode链表存储新定义的标号,refNode链表存储未提前定义的标号引用。遇到新标号定义时,扫描labelNode表,若已经定义,表示标号重复定义错误,否则将新标号加入labelNode表,并扫描refNode表回填先前引用,回填结束后删除该引用节点。遇到新引用标号时,扫描labelNode表,若已提前定义,则直接进行代码生成,否则加入refNode表,待标号定义时回填。在目标代码生成之前进行冗余备份与校验码生成。

图4 LT-SP2汇编器工作流程

4.2 冗余备份和校验机制的实现

冗余备份和校验机制的具体实现方式是采用双度冗余与奇偶校验相结合,其中双度冗余中只对关键代码段实行隔行备份,实现原理如图5所示。

图5 冗余和校验机制实现

首先判断程序段是否为关键代码,是关键代码则进行奇偶校验。若存储器中的指令出现粒子翻转则出现校验错误,启用冗余恢复机制,执行PC+1所指向的备份指令;若校验正确则执行当前代码,将PC+2指向下一条执行指令。PC为程序计数器[8],存放现行指令的地址。汇编器在进行汇编时对关键代码段进行两次代码生成,并产生带有校验位的二进制码。

4.3 错误处理

汇编器应具有较强的查错和改错能力,并能以简明的形式向用户报告错误的性质以及出现的具体位置。LT-SP2的错误处理过程被嵌入到汇编程序处理的各个阶段,能正确报告词法、语法和语义错误等。当识别词法和语法错误时由词法分析器和语法分析器报告错误类型及错误位置。语义错误的处理在语法自动翻译时进行,识别操作数超出范围等语义上的错误。在汇编程序处理的末尾阶段扫描ref-Node表,如链表非空,表示有引用节点未定义,报告引用标号未定义错误。

5 实验结果与分析

根据以上设计,在LT-SP2流计算平台下,最终实现了一款全面支持LT-SP2指令集的核级汇编器。实验设计分为两个部分,分别测试汇编器的功能正确性和对系统容错能力的支持程度。首先,按照流计算两级编程模型,在平台上流化了一批并行计算程序,例如FIR滤波、拉普拉斯边缘检测、矩阵乘法和向量点积等。实验结果显示所编写的核心级源程序经过LT-SP2汇编器汇编后下载到目标平台上能正确运行,验证了汇编器功能的正确性。其次,通过对关键代码段的执行结果统计,系统能够有效地对奇偶校验出错的代码行进行恢复,体现了汇编器的健壮性。

6 结束语

针对LT-SP2流计算体系结构,讨论了流处理器设计中LT-SP2汇编器的构造原理。此汇编器属于交叉汇编器,汇编过程在宿主机上进行,产生的机器码在LT-SP2流计算平台上运行。汇编器的研究简化了流处理器测试程序的编制,加速了流应用程序的开发进度。经测试表明,LT-SP2汇编器功能正确,冗余备份和校验机制的引入提高了系统的整体容错性能。下一步的工作重点将是对汇编器进行功能改进,优化代码执行的效率,以及采用高级的编码校验机制,进一步提高系统的容错性能。所论述的LT-SP2汇编器设计方法对流处理器研究中核级汇编器的研发具有重要参考价值。

[1] Scott Rixner.Stream Processor Architecture[M].Boston:Kluwer Academic Publishers,2001.

[2] 张春元,文梅,伍楠,等.流体系结构技术发展探讨[J].国防科技大学学报,2009,31(5):1-5.

[3] 辛明瑞.面向空间应用的容错RISC处理器体系结构研究[D].西安:西北工业大学,2006.

[4] MPC7410/MPC7400 RISC Microprocessor User’s Manual[M].Freescale Semiconductor,Inc,2002.

[5] Alfred V Aho,Monica S Lam,Ravi Sethi,等.编译原理:Principles,Techniques,and Tools(第2版)[M].北京:机械工业出版社,2009.

[6] 陈惠斌,刘春林,胡定磊.一种快速构造汇编器的方法及其应用[J].计算机工程与科学,2006,28(6):131-134.

[7] John Levine.Flex&bison(影印版)[M].南京:东南大学,2010.

[8] Bryant R E,O’Hallaron D R,龚奕利,雷迎春译.深入理解计算机系统(第2版)[M].北京:机械工业出版社,2010.

猜你喜欢
指令集标号体系结构
基于Kubernetes的RISC-V异构集群云任务调度系统①
3DNow指令集被Linux淘汰
基于粒计算的武器装备体系结构超网络模型
作战体系结构稳定性突变分析
实时微测量系统指令集及解析算法
基于DODAF的装备体系结构设计
基于路P8m+4t+2的交错标号的图S(4m+1,4(t+1),4m-1)的优美标号*
基于云计算的航天器控制系统自组织体系结构
非连通图D3,4∪G的优美标号
非连通图(P1∨Pm)∪C4n∪P2的优美性