一种面向GPDSP的多核并行计算实现方法与流程

文档序号:16068258发布日期:2018-11-24 12:53阅读:194来源:国知局

本发明涉及gpdsp(general-purposedigitalsignalprocessor,通用计算数字信号处理器)技术领域,尤其涉及一种面向gpdsp的多核并行计算实现方法。

背景技术

gpdsp作为一种异构多核处理器,它同时包含了cpu核单元和dsp核单元,其中cpu核单元主要用于负责包括存储管理、文件控制、进程调度、中断管理任务在内的通用事务管理,以及提供对通用操作系统的完整支持,dsp核单元包含若干强大计算能力的64位向量处理阵列,用于支持高密集运算任务的解算。

由于gpdsp是包含cpu核和dsp核的异构多核处理器,包括寄存器文件、片内向量阵列存储器、片内共享存储阵列、片外ddr存储器等多层次存储架构,针对gpdsp的异构多核并行编程,目前还没有有效的解决方案,若简单的直接套用同构多核并行编程方法来实现,不能有效发挥gpdsp的强大计算能力。如现有的cpu多核处理器运行通用操作系统,通常会提供基于openmp或mpi的通用并行编程方法,但是如上述,gpdsp除了包含多个cpu核外,同时还包含多个含64位向量处理阵列的dsp核,并且由dsp核提供主要的计算性能,若直接使用现有的基于openmp或mpi的通用并行编程方法,不能实现cpu和多dsp核间的并行编程,即无法应用于gpdsp实现构多核并行编程。因此,亟需提供一种适用于gpdsp的多核并行计算实现方法,以能够充分发挥多核cpu和多核dsp高性能。



技术实现要素:

本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种能够充分发挥多核cpu和多核dsp高性能实现多核并行计算,且实现方法简单、使用方便、应用灵活及高效的面向gpdsp的多核并行计算实现方法。

为解决上述技术问题,本发明提出的技术方案为:

一种面向gpdsp的多核并行计算实现方法,步骤包括:

s1.将目标gpdsp应用程序划分为主体框架部分以及核心计算部分,在gpdsp中的cpu端构建实现所述主体框架部分的cpu程序模块,在dsp端构建实现所述核心计算部分的dsp程序模块,由所述cpu程序模块对所述dsp程序模块进行调用;

s2.分别在dsp端对所述dsp程序模块、以及在cpu端对所述cpu程序模块进行编译,再将编译后dsp程序模块和cpu程序模块进行统一编译,得到单芯片gpdsp程序;

s3.运行所述gpdsp程序,执行程序中所述cpu程序模块时,通过调用所述dsp程序模块执行指定的计算任务,并由gpdsp内多个dsp核并行进行计算。

作为本发明的进一步改进:所述步骤s1中具体将包括目标gpdsp应用程序中数据准备、控制逻辑以及任务管理部分划分为主体框架部分,以及将目标gpdsp应用程序中需占用指定时间的算法、计算任务划分为核心计算部分。

作为本发明的进一步改进,所述步骤s2的具体步骤为:所述dsp程序模块通过dsp端的编译器或汇编器编译成二进制可执行代码,得到编译后dsp程序模块;所述cpu程序模块通过cpu端的编译器完成编译,得到编译后cpu程序模块,将编译后dsp程序模块、编译后cpu程序模块在cpu的编译环境下统一链接为单芯片的gpdsp程序可执行代码,得到所述单芯片gpdsp程序。

作为本发明的进一步改进:所述步骤s3中调用所述dsp程序模块时,具体通过所述cpu程序模块根据所需执行的计算任务,将所述dsp程序模块以及所述dsp程序模块计算所需的参数、数据传输到dsp核指定位置处,启动dsp核运行所述dsp程序模块,直到所述dsp程序模块完成计算。

作为本发明的进一步改进,所述步骤s3的具体步骤为:

s31.运行所述gpdsp程序,执行程序中所述cpu程序模块时,若需要调用所述dsp程序模块,转入执行步骤s32;

s32.所述cpu程序模块根据所需执行的计算任务,将所述dsp程序模块以及所述dsp程序模块计算所需的参数、数据传输到dsp核指定位置处;

s33.启动dsp核运行,所述dsp程序模块由多核dsp并行执行,以并行完成所述cpu程序模块传过来的计算任务;

s34.当所述cpu程序模块检测到所述dsp程序模块的计算结束标志时,退出当前计算;继续执行所述cpu程序模块,若需要调用所述dsp程序模块,返回执行步骤s32,直到全部计算任务运行结束。

作为本发明的进一步改进,所述步骤s32的具体步骤为:

s321.预先将gpdsp中的dsp核内存地址空间划分为用于存储计算所需参数数据的参数段、用于存储程序代码的代码段以及用于存储计算所需数据的数据段;

s322.调用所述dsp程序模块时,所述cpu程序模块将计算所需参数数据传递到dsp端的所述参数段,将dsp端的所述dsp程序模块的程序代码传递到所述代码段,以及将所述dsp程序模块计算所需数据传递到所述数据段。

作为本发明的进一步改进:所述步骤s322中具体将计算所需参数数据传递到dsp端的所述参数段的起始地址para_addr,将dsp端的所述dsp程序模块的程序代码传递到所述代码段的起始地址code_addr,以及将所述dsp程序模块计算所需数据传递到所述数据段的起始地址data_addr,并在完成传输后,在指定的程序运行状态地址写入程序计算开启标志。

作为本发明的进一步改进,所述步骤s33的具体步骤为:

s331.预先在所述dsp程序模块中构建入口程序子模块以及对应不同计算子任务的多个dsp子程序模块,各个dsp子模块对应由不同的dsp核执行,所述入口程序子模块包括每个dsp核均需要执行的入口程序,由所述入口程序子模块读取各dsp核的id值,并根据读取到的各id值分别跳转到对应各个dsp核的所述dsp子程序模块;

s332.启动各dsp核运行时,各dsp核并行执行对应的所述dsp子程序模块,以分别读取所述cpu程序模块传送的参数数据、计算所需数据以及读取的dsp核的id值,并分别加载各dsp核所需要的数据执行对应计算任务;

s333.完成当前所有计算任务后,在指定的程序运行状态地址state_addr写入程序计算结束标志。

作为本发明的进一步改进:所述步骤s332具体分别读取存放在dsp核内参数段的起始地址para_addr中参数数据、数据段的起始地址data_addr中数据以及dsp核的id值,并分别计算各dsp核的计算任务所对应的数据起始地址、数据长度。

作为本发明的进一步改进:所述步骤s33中多核并行执行时,还包括各个dsp核采用基于gpdsp的dsp核间硬件同步机制实现多核间的同步操作。

与现有技术相比,本发明的优点在于:

1、本发明面向gpdsp的多核并行计算实现方法,考虑gpdsp多核异构的体系结构特征,通过将应用程序进行主体框架、核心计算的划分后,分别在cpu、dsp端构建实现主体框架、核心计算的程序模块,由cpu端程序调用dsp端程序,能够支持gpdsp结构的统一并行编程,由于cpu、dsp端程序分别独立构建,cpu端不需要关注dsp底层的体系结构和硬件细节,只需要关注调用dsp端程序计算所需要的接口参数,在dsp端则可以便于深入挖掘dsp体系结构的指令级并行性、向量处理器阵列的向量化优化以及多核dsp间的并行优化与同步,能够最大限度的发挥出gpdsp中多核dsp的峰值计算性能,从而实现方便、灵活且高效的面向gpdsp的多核并行计算,充分发挥gpdsp的多核性能。

2、本发明面向gpdsp的多核并行计算实现方法,在cpu端与dsp端独立构建程序模块,通过dsp端的编译器或汇编器编译成二进制可执行代码提供给cpu端程序调用,实现了计算任务模块化,可以简化计算任务的调试,保证应用程序的可靠性和稳定性。

3、本发明面向gpdsp的多核并行计算实现方法,通过将dsp端程序综合成一个可执行程序代码,由cpu端程序调用dsp端程序的二进制可执行代码,最终在cpu的编译环境下统一链接为单芯片的gpdsp程序可执行代码,实现gpdsp中多核并行计算的统一并行编程,有利于提高高级语言编程的开发效率,特别是针对多核、向量运算阵列等并行资源,且具有通用性和易用性好、应用范围广的优点。

附图说明

图1是本实施例面向gpdsp的多核并行计算实现方法的实现流程示意图。

图2是本发明具体实施例中生成gpdsp多核并行程序的实现流程示意图。

图3是本发明具体实施例中实现多核并行计算的实现流程示意图。

具体实施方式

以下结合说明书附图和具体优选的实施例对本发明作进一步描述,但并不因此而限制本发明的保护范围。

如图1所示,本实施例面向gpdsp的多核并行计算实现方法,步骤包括:

s1.将目标gpdsp应用程序划分为主体框架部分以及核心计算部分,在gpdsp中的cpu端构建实现主体框架部分的cpu程序模块,在dsp端构建实现核心计算部分的dsp程序模块,由cpu程序模块对dsp程序模块进行调用;

s2.分别在dsp端对dsp程序模块、以及在cpu端对cpu程序模块进行编译,再将编译后dsp程序模块和cpu程序模块进行统一编译,得到单芯片gpdsp程序;

s3.运行gpdsp程序,执行程序中cpu程序模块时,通过调用dsp程序模块执行指定的计算任务,并由gpdsp内多个dsp核并行进行计算。

本实施例考虑gpdsp多核异构的体系结构特征,通过将应用程序进行主体框架、核心计算的划分后,分别在cpu、dsp端构建实现主体框架、核心计算的程序模块,由cpu端程序(cpu程序模块)调用dsp端程序(dsp程序模块),能够支持gpdsp结构的统一并行编程,由于cpu、dsp端程序分别独立构建,cpu端不需要关注dsp底层的体系结构和硬件细节,只需要关注调用dsp端程序计算所需要的接口参数,在dsp端则可以便于深入挖掘dsp体系结构的指令级并行性、向量处理器阵列的向量化优化以及多核dsp间的并行优化与同步,能够充分发挥gpdsp的多核性能,从而实现方便、灵活且高效的面向gpdsp的多核并行计算。

本实施例上述方法,通过分别在dsp端对dsp程序模块、以及在cpu端对cpu程序模块进行编译,最终是在cpu的编译环境下统一链接为单芯片的gpdsp程序可执行代码,可以实现gpdsp中多核并行计算的统一并行编程,有利于提高高级语言编程的开发效率,特别是针对多核、向量运算阵列等并行资源,且具有通用性和易用性好、应用范围广的优点,同时由cpu程序模块调用dsp程序模块,可以实现计算任务模块化,简化计算任务的调试,保证应用程序的可靠性和稳定性。

本实施例中,步骤s1中具体将包括目标gpdsp应用程序中数据准备、控制逻辑以及任务管理等部分划分为主体框架部分,以及将目标gpdsp应用程序中需占用指定时间的核心算法、计算任务划分为核心计算部分,主体框架部分、核心算法部分的划分具体可根据实际需求进行设定。具体首先对待实现的目标gpdsp应用程序进行功能划分,以分别由cpu端程序、dsp端程序来实现,其中gpdsp程序的主体框架(如数据准备、控制逻辑、任务管理等)采用cpu端程序实现,占主要计算时间的核心算法或计算任务采用dsp端程序实现,cpu端程序、dsp端程序分别独立构建,dsp端程序可以由dsp支持的编程语言实现,能够便于最大限度的发挥出gpdsp中多核dsp的峰值计算性能,cpu端程序可以由cpu支持的编程语言实现,通过cpu端的编译器完成编译,cpu端不需要关注dsp底层的体系结构和硬件细节,只需要关注调用dsp端程序计算所需要的接口参数。

本实施例中,步骤s2的具体步骤为:dsp程序模块通过dsp端的编译器或汇编器编译成二进制可执行代码,得到编译后dsp程序模块;cpu程序模块通过cpu端的编译器完成编译,得到编译后cpu程序模块,最终将编译后dsp程序模块、编译后cpu程序模块在cpu的编译环境下统一链接为单芯片的gpdsp程序可执行代码,得到单芯片gpdsp程序。即将dsp端的所有程序综合成一个可执行程序代码,通过dsp端的编译器或汇编器编译成二进制可执行代码提供给cpu端程序调用,cpu端程序调用的即是dsp端程序的二进制可执行代码,最终在cpu的编译环境下再统一链接为单芯片的gpdsp程序可执行代码,实现gpdsp中多核并行计算的统一并行编程。

本实施例中,步骤s3中调用dsp程序模块时,具体通过cpu程序模块根据所需执行的计算任务,将dsp程序模块以及dsp程序模块计算所需的参数、数据传输到dsp核指定位置处,启动dsp核运行dsp程序模块,直到dsp程序模块完成计算。cpu端程序在运行的过程中,通过调用dsp端程序完成占主要计算时间的核心算法和计算任务,cpu端程序调用dsp端程序的实现方式即是将dsp端程序的二进制可执行代码传输到dsp核的指定位置(如代码段起始地址)处,启动dsp核运行dsp端程序,直到检测到dsp端程序运行结束标志。

本实施例中,步骤s3的具体步骤为:

s31.运行gpdsp程序,执行程序中cpu程序模块时,若需要调用dsp程序模块,转入执行步骤s32;

s32.cpu程序模块根据所需执行的计算任务,将dsp程序模块以及dsp程序模块计算所需的参数、数据传输到dsp核指定位置处;

s33.启动dsp核运行,dsp程序模块由多核dsp并行执行,以并行完成cpu程序模块传过来的计算任务;

s34.当cpu程序模块检测到dsp程序模块的计算结束标志时,退出当前计算;继续执行cpu程序模块,若需要调用dsp程序模块,返回执行步骤s32,直到全部计算任务运行结束。

由上述步骤可实现面向gpdsp的多核并行计算,cpu端程序在运行的过程中,通过调用dsp端程序完成占主要计算时间的核心算法和计算任务,在dsp端由多核dsp并行执行核心计算任务,能够结合gpdsp的结构体系特性充分发挥gpdsp的多核性能。

本实施例中,步骤s32的具体步骤为:

s321.预先将gpdsp中的dsp核内存地址空间划分为用于存储计算所需参数数据的参数段、用于存储程序代码的代码段以及用于存储计算所需数据的数据段;

s322.调用dsp程序模块时,cpu程序模块将计算所需参数数据传递到dsp端的参数段,将dsp端的dsp程序模块的程序代码传递到代码段,以及将dsp程序模块计算所需数据传递到数据段。

本实施例中,步骤s322中具体将计算所需参数数据传递到dsp端的参数段的起始地址para_addr,将dsp端的dsp程序模块的程序代码传递到代码段的起始地址code_addr,以及将dsp程序模块计算所需数据传递到数据段的起始地址data_addr,并在完成传输后,在指定的程序运行状态地址写入程序计算开启标志。

本实施例实现cpu端的cpu程序模块调用dsp端的dsp程序模块,具体先将gpdsp的dsp核内存地址空间按照实际程序需求划分为不交叉的三部分:参数段,起始地址为para_addr,长度为para_len;代码段,起始地址为code_addr,长度为code_len;数据段,起始地址为data_addr,长度为data_len;然后由cpu端程序传递dsp端程序计算所需要的接口参数,其中将dsp端程序计算所需要的参数数据传递到dsp端存放参数的起始地址para_addr,将dsp端程序代码传递到dsp端存放代码的起始地址code_addr,将dsp端程序计算所需的数据传递到dsp端存放数据的起始地址data_addr,完成传输后,在指定的程序运行状态地址写入程序计算开启标志,并启动dsp核运行。

本实施例启动dsp核运行后,每个核心算法和计算任务的dsp端程序由多核dsp采用共享数据的并行计算方法,并行完成cpu端程序传过来的计算任务,步骤s33的具体步骤为:

s331.预先在dsp程序模块中构建入口程序子模块以及对应不同计算子任务的多个dsp子程序模块,各个dsp子模块对应由不同的dsp核执行,入口程序子模块包括每个dsp核均需要执行的入口程序,由入口程序子模块读取各dsp核的id值,并根据读取到的各id值分别跳转到对应各个dsp核的dsp子程序模块;

s332.启动各dsp核运行时,各dsp核并行执行对应的dsp子程序模块,以分别读取cpu程序模块传送的参数数据、计算所需数据以及读取的dsp核的id值,并分别加载各dsp核所需要的数据执行对应计算任务;

s333.完成当前所有计算任务后,在指定的程序运行状态地址state_addr写入程序计算结束标志。

本实施例中,步骤s332具体各dsp子模块读取存放在参数段的起始地址para_addr中参数数据、数据段的起始地址data_addr中数据以及dsp核的id值,并分别计算目标dsp核的计算任务所对应的数据起始地址、数据长度。

在具体应用实施例中,各个dsp核实现并行计算流程为:

a)在dsp端将每个核心算法和计算任务的dsp端程序综合成一个可执行程序代码;设gpdsp包含的dsp核数量为n,dsp端程序代码包含n+1个子代码段:子代码段0(init)为dsp端程序代码的运行入口代码,子代码段1(core1),子代码段2(core2),…,子代码段n(coren)分别为核dsp1,dsp2,…,dspn上运行的程序代码;

b)dsp端程序代码的子代码段0(init)是每个dsp核都需要执行的入口代码,该子代码段读取dsp核的id值,根据dsp核的id值分别跳转到各个dsp核的子代码段1(core1),子代码段2(core2),…,子代码段n(coren);

c)各个dsp核的程序代码采用共享数据的方法进行并行计算,各个dsp核的程序代码分别读取存放在参数段起始地址para_addr的参数数据、数据段起始地址data_addr中数据和读取的dsp核的id值,分别计算本dsp核计算任务所在的数据起始地址和数据长度,各个dsp核的程序代码分别加载本dsp核计算所需要的数据执行本核的计算子任务。

本实施例中,步骤s33中多核并行执行时,还包括各个dsp核采用基于gpdsp的dsp核间硬件同步机制实现多核间的同步操作,以采用dsp支持的硬件同步机制进行多核dsp间的并行设计与优化,最大限度的发挥出gpdsp中多核dsp的峰值计算性能。

以下以在具体应用实施例中实现面向gpdsp的多核并行计算对本发明进行进一步说明:

首先生成gpdsp多核并行程序,如图2所示,具体流程包括:

步骤1:对待实现的gpdsp应用程序进行功能划分,以划分为cpu端程序(cpu端程序模块)和dsp端程序(dsp端程序模块)两部分;

步骤2:cpu端程序由cpu支持的编程语言实现,包括配置调用dsp端程序计算所需要的接口参数;

步骤3:dsp端程序由采用dsp支持的编程语言实现,包括:

步骤3.1:对dsp体系结构的指令级并行性、向量处理器阵列的向量化等进行充分优化;

步骤3.2:采用dsp支持的硬件同步机制进行多核dsp间的并行设计与优化,以最大限度的发挥出gpdsp中多核dsp的峰值计算性能;

步骤3.3:通过dsp端的编译器或汇编器编译成二进制可执行代码;

步骤4:使用cpu端编译器工具对cpu端的源代码和dsp端的二进制可执行代码进行统一编译和链接,最终生成统一的单芯片gpdsp可执行代码。

生成gpdsp多核并行程序后,执行gpdsp多核并行程序以实现多核并行计算,如图3所示,具体流程包括:

步骤1:gpdsp应用程序在cpu端启动;

步骤2:cpu端程序在运行的过程中,调用dsp端程序完成占主要计算时间的核心算法和计算任务;cpu端程序调用dsp端程序的实现方式是将dsp端程序的二进制可执行代码传输到dsp核的代码段起始地址,启动dsp核运行dsp端程序,直到检测到dsp端程序运行结束标志,详细步骤包括:

步骤2.1:cpu端程序将dsp端程序计算所需要的参数数据传递到dsp端存放参数的起始地址para_addr,将dsp端程序代码传递到dsp端存放代码的起始地址code_addr,将dsp端程序代码计算所需的数据传递到dsp端存放数据的起始地址data_addr,完成传输后,在指定的程序运行状态地址写入程序计算开启标志,并启动dsp核运行;

步骤2.2:dsp端程序由多核dsp采用共享数据的并行计算方法,并行完成cpu端程序传过来的计算任务;

步骤2.3:各个dsp核的程序代码分别读取存放在起始地址para_addr的参数数据、数据段起始地址data_addr中的数据和读取的dsp核的id值,分别计算本dsp核计算任务所在的数据起始地址和数据长度,各个dsp核的程序代码分别加载本dsp核的所需要的数据执行本核的计算子任务;

步骤2.4:各个dsp核的程序代码采用gpdsp提供的dsp核间硬件同步机制实现多核间的同步操作;

步骤2.5:dsp端程序代码完成计算任务后,由dsp1在指定的程序运行状态地址state_addr写入程序计算结束标志。

步骤3:当cpu端程序检测到dsp端程序计算结束标志时,dsp核退出当前计算,继续执行cpu端程序,若运行中需要调用dsp端程序计算时,重新执行上述步骤2、步骤3,直到全部计算任务运行结束。

步骤4:计算完毕。

上述只是本发明的较佳实施例,并非对本发明作任何形式上的限制。虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明。因此,凡是未脱离本发明技术方案的内容,依据本发明技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均应落在本发明技术方案保护的范围内。

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