用于粗粒度多核计算系统的两级编程模型及其编程方法与流程

文档序号:12362873阅读:171来源:国知局
用于粗粒度多核计算系统的两级编程模型及其编程方法与流程

本发明涉及高密度计算与信号处理领域,具体的说,是一种用于粗粒度计算系统的两级编程模型及其编程方法。



背景技术:

多核技术因为低功率消耗、强并行处理能力和优异的计算性能已经成为处理器设计的主流。然而,在多核计算系统上对算法进行高效映射,以充分发挥系统并行能力,已经成为制约多核计算系统运算性能的重要瓶颈,被称为“编程墙”。能否实现多核计算系统的高效映射,降低多核计算系统编程难度,直接关系到多核计算系统的运算能力能否被发挥,已经逐渐成为当今多核计算系统面临的主要问题之一。



技术实现要素:

本发明为克服现有技术的不足之处,提出了一种用于粗粒度计算系统的两级编程模型及其编程方法,以期能够为多核计算系统的编程提供更强的灵活性,降低粗粒度多核计算系统的编程难度,同时实现任务指令的复用,减少指令存储所占用可存储空间;顶层任务指令的出现还为多核计算系统的任务指令动态调度提供了基础。

本发明为达到上述目的所采用的技术方案是:

本发明一种用于粗粒度多核计算系统的两级编程模型的特点征是用于编写面向异构多核计算系统的任务指令,所述任务指令类型包括:运算指令、通用寄存器修改指令、跳转指令、分支指令、访存指令和接口指令,并用于操作所述两级编程模型中的若干体系寄存器、若干个通用寄存器;所述两级编程模型中各种寄存器均通过寄存器编号进行区分;

所述两级编程模型将所述粗粒度多核计算系统的同步动态随机存储器SDRAM的存储空间划分为物理寄存器区域、顶层任务指令区域、底层功能指令区域和数据存储区域;

所述物理寄存器区域作为若干个物理寄存器的存储空间,并通过所述物理寄存器的编号能映射到相应物理寄存器在SDRAM的存储位置;

所述顶层任务指令区域用于连续存储所述顶层任务指令;

所述底层功能指令区域用于连续存储所述顶层任务指令所对应的底层功能指令;

所述数据存储区域作为所述两级编程模型的存储器,并用于保存数据;

所述运算指令用于从若干物理寄存器中读取数据,并发送到相应的运算单元中进行运算后,将运算结果存到其他若干物理寄存器中,所述运算指令包含:运算顶层任务指令和运算底层功能指令;

所述运算顶层任务指令包含:任务编号、任务类型、任务的数据入口、数据出口、存储通道数量、运算单元类型及数量、对应的运算底层功能指令的存储地址和运算底层功能指令的长度信息;所述运算底层任务指令包含物理寄存器和运算单元的配置信息;

所述通用寄存器修改指令用于修改所述粗粒度多核计算系统中主控制器的通用寄存器数值;所述通用寄存器修改指令仅包含寄存器顶层任务指令,所述寄存器顶层任务指令包含任务类型和通用寄存器修改信息;

所述跳转指令根据两个通用寄存器数值之间或通用寄存器与预设数值之间的大小关系,对程序指针进行跳转操作,使程序指针跳转到预设的位置执行操作;所述跳转指令仅包含跳转顶层任务指令;所述跳转顶层任务指令包含任务类型、程序指针偏移量、参与比较的通用寄存器或预设数值信息;

所述分支指令是提供给主控制器,用于查询运算指令的计算结果并决定是否对程序指针进行跳转操作;所述分支指令令仅包分支顶层任务指令;所述分支顶层任务指令包含任务类型、程序指针偏移量、任务编号、程序指针和通用寄存器数值保存区域;

所述访存指令包含读取指令和存储指令,并分别用于将SDRAM中数据存储区域的数据读取到物理寄存器中和将物理寄存器中的数据存储到数据存储区域中;所述访存指令包含访存顶层任务指令和访存底层功能指令,所述访存顶层任务指令是由任务类型、体系寄存器编号和存储器地址构成;所述访存底层功能指令包含物理寄存器的配置信息;

所述接口指令包含输出指令和输入指令,并用于将SDRAM中数据存储区域的数据与上位机或其他数据处理芯片进行数据交换;所述接口指令包含接口顶层任务指令和接口底层功能指令,所述接口顶层任务指令包含任务类型、体系寄存器编号和接口类型;所述底层功能指令包括物理寄存器的配置信息和接口单元的配置信息;

以不同类型的任务指令分别完成不同的操作任务,并通过各类任务指令的组合,共同实现所述粗粒度多核计算系统的面向异构计算。

本发明一种用于粗粒度多核计算系统的两级编程方法的特点是用于编写面向异构多核计算系统的任务指令,所述任务指令分为顶层任务指令和底层功能指令;所述顶层任务指令则用于维护计算任务之间的数据传递关系;所述底层功能指令用于在一个计算任务内指导相应的功能单元执行具体的数据处理操作;所述任务指令类型包括:运算指令、通用寄存器修改指令、跳转指令、分支指令、访存指令和接口指令;所述访存指令包含读取指令和存储指令,所述接口指令包含输出指令和输入指令;将所述粗粒度多核计算系统的同步动态随机存储器SDRAM的存储空间划分为物理寄存器区域、顶层任务指令区域、底层功能指令区域和数据存储区域;所述两级编程方法是按以下步骤进行:

步骤1:分析待映射算法,根据多核计算系统内集成运算簇的种类和数量,将所述待映射算法拆分成若干个计算任务;

步骤2:将所述若干计算任务的粒度与粗粒度多核计算系统进行匹配,如果计算任务的粒度大于所述粗粒度多核计算系统中物理寄存器的容量,则根据物理寄存器的容量将计算任务拆分成若干粒度小于所述物理寄存器容量的子计算任务;

步骤3:对所述任意一种功能的子计算任务进行算法映射,编写相应子计算任务中使用的每一个功能单元的配置信息,并将各个功能单元的配置信息顺序排列起来后,使用占位指令字对排序后的配置信息进行填充,使得配置信息的长度满足所述粗粒度多核计算系统的同步动态随机存储器SDRAM突发长度的整数倍数,从而组成一种功能的子计算任务的底层功能指令;

步骤4:使用编写的脚本程序生成任意一种功能的子计算任务的顶层任务指令框架,所述顶层任务指令框架包含:任务类型、运算单元的种类和数量、任务指令的数据入口和数据出口数量、底层功能指令长度;

步骤5:当所有不同功能的子计算任务的底层功能指令和顶层任务指令框架都已经编写完毕,则进入步骤6;否则回到步骤3;

步骤6:将所有不同功能的子计算任务的底层功能指令依次收尾连接,并在连接的末端加入所述脚本程序提供的接口指令和访存指令的底层功能指令模板,再提取每一个不同功能的底层功能指令的起始地址,并编入所述顶层任务指令框架中;

步骤7:按步骤1中拆分的待映射算法的计算任务,将运算指令、跳转指令、分支指令的顶层任务指令按待映射算法的计算顺序排列起来,得到子计算任务序列;从而实现运算功能和程序控制;

步骤8:在需要使用所述数据存储区内的数据作为源数据的运算指令前加入所述读取指令,在需要保存运算结果到所述数据存储区的运算指令后加入所述存储指令;

步骤9:在需要循环执行的子计算任务序列前加入通用寄存器修改指令,在子计算任务序列后加入跳转指令,得到子任务循环序列,用于控制循环变量和程序指针PC,以实现循环功能;

步骤10:在所述子任务循环序列后加入输出指令,用于输出运算结果;

步骤11:在顶层任务指令中填充体系寄存器字段,得到计算任务序列;

步骤12:在所述计算任务序列前加入输入指令,用于输入源数据,从而实现待映射算法的映射过程。

与现有技术相比,本发明的有益技术效果体现在:

1、本发明两级编程模型及其编程方法的引入,通过将任务指令分为顶层任务指令和底层功能指令,以及任务指令的类型划分,提高了多核计算系统编程的灵活性,降低了多核计算系统的编程难度,方便了程序员在多核计算系统上的算法映射,大大提高了算法映射效率,在一定程度上缓解了“编程墙”的影响。

2、本发明通过在编程模型中包含若干体系寄存器和通用寄存器,并将粗粒度计算系统同步动态随机存储器SDRAM的一部分连续存储空间作为物理寄存器,各种寄存器均通过寄存器编号进行区分的方法,使底层程序的循环利用成为可能,避免了程序员为了实现程序的循环操作而多次复制底层功能指令,也避免了程序员在海量底层功能指令中修改循环体中需要变化的数值,大大提高了程序编写效率,同时降低了程序出错的概率,提高了程序编写的正确率。此外,将粗粒度计算系统同步动态随机存储器SDRAM的一部分连续存储空间作为物理寄存器也为寄存器重命名技术的引入提供了可能,从而消除数据的伪相关,维护数据真相关,进一步提高系统的发射效率,提高算力的利用率。

3、本发明粗粒度计算系统的任务指令分为顶层任务指令和底层功能指令两级,方便了程序员对底层程序的复用,避免了程序员多次编写相同功能的底层程序,从而提高了程序员对算法的映射效率,缩短了编程时间;将顶层任务指令分为多种类型,为多核计算系统的乱序执行提供了可能,在遇到接口指令时,由于数据必须先通过存储指令存放到SDRAM的数据存储区域,使数据实现了顺序整理,避免了乱序执行时由于程序执行顺序的不确定性导致的乱序输出,又不至于因为采用指令阻塞方式而降低整个系统的工作效率;访存指令和接口指令的设置也为主控制器的分支预测提供了可能,由于对功能单元中的接口单元的操作具有不可撤销性,当分支预测错误时,无法撤销接口单元的输出,从而会导致错误输出,而存储指令只有等任务被提交之后才会更新SDRAM中数据存储区域的数值,被存储到数据存储区域的值均能够保证其正确性,因此接口指令的执行不会导致错误输出,所以可以引入分支预测机制,进一步提高了多核计算系统的计算效率。

4、本发明两级编程模型的程序编写中,底层功能指令的编写用于实现具体单个计算任务内的数据处理操作过程,顶层任务指令的编写用于维护计算任务之间的数据传递关系;将底层功能指令作为类似函数的数据处理方法提取出来,使其与具体的待处理数据解耦,同时将顶层程序作为对底层功能指令的调用,降低了程序员对程序维护的难度;由于顶层任务指令和底层功能指令的分离,程序员在编写程序时只需要分别保证底层功能指令和顶层任务指令的正确性,在遇到错误需要调试时,也可以分别检查底层功能指令和顶层任务指令的正确性,方便了错误定位和错误排除,大大降低了程序的调试难度,极大地提高了编程效率。

附图说明

图1为本发明所面向的粗粒度多核计算系统的结构图;

图2为本发明SDRAM的存储空间分配和物理寄存器机构示意图;

图3为本发明运算指令的顶层任务指令结构模版;

图4为本发明跳转指令的顶层任务指令结构模版;

图5为本发明寄存器修改指令的顶层任务指令结构模版;

图6为本发明分支指令的顶层任务指令结构模版;

图7为本发明访存指令的顶层任务指令结构模版;

图8为本发明接口指令的顶层任务指令结构模版;

图9为本发明底层功能指令的数据组织格式示意图;

图10为本发明子任务循环序列的格式示意图;

图11为使用本发明编写示例任务程序时生成的底层功能指令和接口指令模板;

图12为使用本发明编写示例任务程序时最终得到的底层功能指令;

图13为使用本发明编写示例任务程序时编写顶层任务指令的步骤示意图。

具体实施方式

在本例实施中,一种用于粗粒度多核计算系统的两级编程模型,是用于编写面向异构多核计算系统的任务指令,任务指令类型包括:运算指令、通用寄存器修改指令、跳转指令、分支指令、访存指令和接口指令,并用于操作两级编程模型中的若干体系寄存器、若干个通用寄存器;两级编程模型中各种寄存器均通过寄存器编号进行区分;

粗粒度异构多核计算系统的结构如图1所示,包括存储器MEM、片上网络、主控制器MC和其他功能单元;主控制器负责任务指令的下发,其他功能单元在主控制器的控制下根据接收到的配置信息协同完成各种计算任务;

任务指令是指粗粒度操作系统中为了完成特定计算任务,发送给各个功能单元的包含工作内容的命令;

计算任务是指为了完成特定算法步骤而实施的一系列简单数据操作的集合;

如图2所示,两级编程模型将粗粒度多核计算系统的同步动态随机存储器SDRAM的存储空间划分为物理寄存器区域、顶层任务指令区域、底层功能指令区域和数据存储区域;

物理寄存器区域作为若干个物理寄存器的存储空间,并通过物理寄存器的编号能映射到相应物理寄存器在SDRAM的存储位置;

顶层任务指令区域用于连续存储顶层任务指令;

底层功能指令区域用于连续存储顶层任务指令所对应的底层功能指令;

数据存储区域作为两级编程模型的存储器,并用于保存数据;

体系寄存器是程序员用于表示数据流向的寄存器,不分配实际存储空间,但在计算任务执行时,体系寄存器会被映射到具体的物理寄存器,所以其存储空间与所映射到的物理寄存器容量相等;体系寄存器与物理寄存器的映射关系不是固定的,而是由计算系统的主控制器根据当前物理寄存器的状态选择空闲物理寄存器进行分配的;

物理寄存器占用SDRAM中的存储容量固定的连续存储空间,用于粗粒度计算系统中计算任务间的数据存储;粗粒度计算系统中包含若干物理寄存器,并用物理寄存器编号区别不同的物理寄存器,物理寄存器编号映射到物理寄存器在SDRAM的存储位置;

当计算任务的数据量大于体系寄存器所对应的物理寄存器容量时,需要将该计算任务分成两条或多条任务指令,占用多个体系寄存器,使每一条任务指令中数据量都不大于体系寄存器所对应的物理寄存器容量,由多条任务指令共同完成该计算任务;

当体系寄存器作为任务指令的数据入口时,功能单元从体系寄存器当前所对应的物理寄存器中读取数据,作为任务的源数据;当体系寄存器作为任务指令的数据出口时,功能单元向体系寄存器当前所对应的物理寄存器中存入运算结果,等待由其后的计算任务使用;

通用寄存器是指位于主控制器内的、可以由程序员通过任务指令对其数值进行操作的寄存器,通用寄存器可以作为循环变量使用,也可以在任务指令中作为体系寄存器编号使用;任务循环执行时,主控制器读取该通用寄存器中的当前数值作为体系寄存器的编号,随着通用寄存器数值的变化,作为任务指令数据出口和数据入口的体系寄存器编号也随之变化,从而实现任务指令的循环使用;

运算指令用于从若干物理寄存器中读取数据,并发送到相应的运算单元中进行运算后,将运算结果存到其他若干物理寄存器中,运算指令包含:运算顶层任务指令和运算底层功能指令;

如图3所示,运算顶层任务指令包含:任务编号、任务类型、任务的数据入口、数据出口、存储通道数量、运算单元类型及数量、对应的运算底层功能指令的存储地址和运算底层功能指令的长度信息;运算底层任务指令包含物理寄存器和运算单元的配置信息;

通用寄存器修改指令用于修改粗粒度多核计算系统中主控制器的通用寄存器数值;如图4所示,通用寄存器修改指令仅包含寄存器顶层任务指令,寄存器顶层任务指令包含任务类型和通用寄存器修改信息;

跳转指令根据两个通用寄存器数值之间或通用寄存器与预设数值之间的大小关系,对程序指针进行跳转操作,使程序指针跳转到预设的位置执行操作;跳转指令仅包含跳转顶层任务指令;如图5所示,跳转顶层任务指令包含任务类型、程序指针偏移量、参与比较的通用寄存器或预设数值信息;

分支指令是提供给主控制器,用于查询运算指令的计算结果并决定是否对程序指针进行跳转操作;分支指令令仅包分支顶层任务指令;如图6所示,分支顶层任务指令包含任务类型、程序指针偏移量、任务编号、程序指针和通用寄存器数值保存区域;

访存指令包含读取指令和存储指令,并分别用于将SDRAM中数据存储区域的数据读取到物理寄存器中和将物理寄存器中的数据存储到数据存储区域中;访存指令包含访存顶层任务指令和访存底层功能指令,如图7所示,访存顶层任务指令是由任务类型、体系寄存器编号和存储器地址构成;访存底层功能指令包含物理寄存器的配置信息;

接口指令包含输出指令和输入指令,并用于将SDRAM中数据存储区域的数据与上位机或其他数据处理芯片进行数据交换;接口指令包含接口顶层任务指令和接口底层功能指令,如图8所示,接口顶层任务指令包含任务类型、体系寄存器编号和接口类型;底层功能指令包括物理寄存器的配置信息和接口单元的配置信息;

以不同类型的任务指令分别完成不同的操作任务,并通过各类任务指令的组合,共同实现粗粒度多核计算系统的面向异构计算。

在本例实施中,一种用于粗粒度多核计算系统的两级编程方法,是用于编写面向异构多核计算系统的任务指令,任务指令分为顶层任务指令和底层功能指令;顶层任务指令则用于维护计算任务之间的数据传递关系;底层功能指令用于在一个计算任务内指导相应的功能单元执行具体的数据处理操作;任务指令类型包括:运算指令、通用寄存器修改指令、跳转指令、分支指令、访存指令和接口指令;访存指令包含读取指令和存储指令,接口指令包含输出指令和输入指令;将粗粒度多核计算系统的同步动态随机存储器SDRAM的存储空间划分为物理寄存器区域、顶层任务指令区域、底层功能指令区域和数据存储区域;两级编程方法是按以下步骤进行:

步骤1:分析待映射算法,根据多核计算系统内集成运算簇的种类和数量,将待映射算法拆分成若干个计算任务;

步骤2:将若干计算任务的粒度与粗粒度多核计算系统进行匹配,如果计算任务的粒度大于粗粒度多核计算系统中物理寄存器的容量,则根据物理寄存器的容量将计算任务拆分成若干粒度小于物理寄存器容量的子计算任务;

步骤3:对任意一种功能的子计算任务进行算法映射,编写相应子计算任务中使用的每一个功能单元的配置信息,并将各个功能单元的配置信息顺序排列起来后,使用占位指令字对排序后的配置信息进行填充,使得配置信息的长度满足粗粒度多核计算系统的同步动态随机存储器SDRAM突发长度的整数倍数,从而组成一种功能的子计算任务的底层功能指令,形成如图9所示结构;

步骤4:使用编写的脚本程序生成任意一种功能的子计算任务的顶层任务指令框架,顶层任务指令框架包含:任务类型、运算单元的种类和数量、任务指令的数据入口和数据出口数量、底层功能指令长度;

步骤5:当所有不同功能的子计算任务的底层功能指令和顶层任务指令框架都已经编写完毕,则进入步骤6;否则回到步骤3;

步骤6:将所有不同功能的子计算任务的底层功能指令依次收尾连接,并在连接的末端加入脚本程序提供的接口指令和访存指令的底层功能指令模板,再提取每一个不同功能的底层功能指令的起始地址,并编入顶层任务指令框架中;

步骤7:按步骤1中拆分的待映射算法的计算任务,将运算指令、跳转指令、分支指令的顶层任务指令按待映射算法的计算顺序排列起来,得到子计算任务序列;从而实现运算功能和程序控制;

步骤8:在需要使用数据存储区内的数据作为源数据的运算指令前加入读取指令,在需要保存运算结果到数据存储区的运算指令后加入存储指令;如果算法中存在数据缩减指令,如累加、乘累加运算,可以通过嵌入一对存储指令和读取指令,来维护系统的运算粒度,从而使计算任务的数据粒度适合所述粗粒度多核计算系统,更好地发挥所述粗粒度多核计算系统的计算能力;

步骤9:在需要循环执行的子计算任务序列前加入通用寄存器修改指令,在子计算任务序列后加入跳转指令,得到子任务循环序列,用于控制循环变量和程序指针PC,以实现循环功能,如图10所示;

步骤10:在子任务循环序列后加入输出指令,用于输出运算结果;

步骤11:在顶层任务指令中填充体系寄存器字段,得到计算任务序列;

步骤12:在计算任务序列前加入输入指令,用于输入源数据,从而实现待映射算法的映射过程。

此处以完成以下简单计算任务为例,示例性地简述编程过程:

计算任务:数组A数据量32M,数组B数据量32M,数组C数据量2M,按顺序组成一个66M数据量的数据块;数组A和数组B按顺序每16个数进行乘累加运算,得到2M中间运算结果,再同数组C依序做加法运算,得到2M运算结果,最后将运算结果输出。

下面给出该计算任务的算法模型:

在进行任务指令编写时,首先编写底层功能指令,本例中包括两部分运算过程,在目标系统中均可由功能节点中的可重构运算单元RCU完成,操作分别为16点乘累加和加法,分别生成其配置信息,并取得接口指令的程序模板,如图11所示;

将已经获得的配置信息顺次连接,组成底层功能指令,其结构如图12所示;

如图13所示,逐步完成顶层任务指令的编写,图中的子图分别对应之前所述的步骤7到步骤12;其中RCU(T,A,B,…)代表在某一类称作RCU的运算单元中执行操作,T表示操作的类型,A,B,…表示数据出口和数据入口;LOAD(A,B)代表将存储器区域中以B为起始地址处的数据读取到体系寄存器A中;STORE(A,B)代表将体系寄存器A中的数据存储到存储器区域中以B为起始地址处;GREG(A=x,B=y,…)代表将通用寄存器A的数值修改为x,将通用寄存器B的数值修改为y,…;JUMP(A,B)代表当循环计数器没有达到A的数值时,程序指针跳转B项;IN(A,B)指向存储器区域地址A的位置输入数据量为B的数据;OUT(A,B)指从存储器区域地址A的位置输出数据量为B的数据。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1