一种提高协处理器运算效率的方法
【专利摘要】本发明公开了一种提高协处理器运算效率的方法。该方法向协处理器中开辟的向量数据存储空间不再是一整块内存,而是由n个N长度的存储块组成的存储块阵列。这样的内存结构可在一个时钟内同时对n个存储块进行读操作,一次读出n个数据。当数据进入协处理器时,协处理器根据存储块阵列的结构,将数据写入存储块阵列中,每当完成一个完整向量数据的接收,则产生一次互相关使能信号,启动数据准备逻辑电路。在上述高效内存结构下,数据准备逻辑电路可以实现一个时钟周期即准备好互相关向量,提供给互相关运算电路,支持该运算电路的流水化计算。这样就可使得协处理器在接收数据、准备数据的同时进行数据的互相关计算。
【专利说明】一种提高协处理器运算效率的方法
【技术领域】
[0001] 本发明涉及计算机硬件方法设计领域,具体是一种提高协处理器运算效率的方 法。
【背景技术】
[0002] 在图像处理、模式识别和信息搜索等众多领域,都需要对协处理器中的多个一维 向量进行相关匹配运算,以考查向量间的相关性。常用的相关运算有绝对差、均方差和积相 关等多种,在实际中会根据具体应用,从精度、效率和通用性三个方面来衡量以选择较优的 算法。虽然相关算法有所不同,但归根结底都是两个向量对应点的遍历计算。对于一个有 N个η点向量的集合,向量互相关(两两相关)需要进行次运算(运算次 数是〇(N2)级),同时相关运算本身也较为复杂,所以一维向量互相关是运算密集的算法,运 算量较大,在实时性要求严格的领域都需要通过FPGA实现算法协处理器来辅助计算。
[0003] 对于N个η点一维向量的互相关算法来说,传统按部就班的设计方法和工作流程 如下(参见图1):
[0004] (1)外部处理单元将N个向量(第一向量、第二向量、......、第N向量,共NXn个 点数据)发送给协处理器,协处理器接收到向量数据并保存在预先开辟的一整块足够大的 内存空间中;
[0005] (2)协处理器完成所有N个向量的数据接收和存储后启动互相关运算流程。互相 关运算流程中包括数据准备和互相关运算两个步骤。其中数据准备是将要进行互相关运算 的两个向量缓存到运算缓存区A和运算缓存区B ;而互相关运算本身则是成熟的硬件电路, 实现对运算缓存区A和运算缓存区B中的数据进行相关运算,能够流水化计算;
[0006] (3)在数据准备时,协处理中的数据准备逻辑电路首先从内存中读取第一向量缓 存到运算缓存区Α,再读取第二向量缓存到运算缓存区Β,再将运算缓存区A中的第一向量 与运算缓存区B中的第二向量进行互相关运算;
[0007] (4)协处理器完成步骤(3)的互相关运算后读取第三向量缓存到运算缓存区Β,再 将运算缓存区A中的第一向量与运算缓存区B中的第三向量进行互相关运算。以此类推, 即可完成第一向量与第N向量的互相关运算;
[0008] (5)再从内存空间读取第二向量缓存到运算缓存区Α,再读取第三向量缓存到运 算缓存区Β,将运算缓存区A中的第二向量与运算缓存区B中的第三向量进行互相关运算, 后续按照(4)中步骤再依次完成第二向量与第四向量、第五向量到第N向量的互相关运 算;
[0009] (6)按向量顺序重复步骤(5),完成后续所有向量的两两互相关运算。
[0010] 以上传统设计的不足在于数据接收与运算顺序进行。一方面在完成全部向量数 据接收后才启动运算,一定程度上浪费了时间;另一方面,由于每次数据准备工作需要将协 处理器内存中数据缓存到缓存区,直接的内存数据读取操作较慢(即读一个向量的η个点 数据要η个硬件时钟周期),这就使得协处理器一直处于数据准备一运算一数据准备一运 算……的顺序流程中,即无法并行工作,也无法发挥互相关电路的流水计算能力,极大的降 低了协处理器的运算效率。
【发明内容】
[0011] 针对现有技术的不足,本发明拟解决的技术问题是:设计一种提高协处理器运算 效率的方法。该方法向协处理器中开辟的向量数据存储空间不再是一整块内存,而是由η 个N长度的存储块组成的存储块阵列。这样的内存结构可在一个时钟内同时对η个存储 块进行读操作,一次读出η个数据。当数据进入协处理器时,协处理器根据存储块阵列的结 构,将数据写入存储块阵列中,每当完成一个完整向量数据的接收,则产生一次互相关使能 信号,启动数据准备逻辑电路。在上述高效内存结构下,数据准备逻辑电路可以实现一个时 钟周期即准备好互相关向量,提供给互相关运算电路,支持该运算电路的流水化计算。这样 就可使得协处理器在接收数据、准备数据的同时进行数据的互相关计算。
[0012] 本发明解决所述技术问题的技术解决方案是:设计一种提高协处理器运算效率的 方法,所述协处理器包括存储块阵列、存储块阵列电路、数据准备逻辑电路、运算缓存区Α、 运算缓存区B和互相关运算电路;所述存储块阵列分别与存储块阵列电路和数据准备逻辑 电路相连接,所述存储块阵列电路分别与存储块阵列和数据准备逻辑电路相连接,所述数 据准备逻辑电路相连接分别与存储块阵列、存储块阵列电路、运算缓存区Α、运算缓存区B 和互相关运算电路相连接,所述运算缓存区A分别与数据准备逻辑电路和互相关运算电路 相连接,所述运算缓存B分别与数据准备逻辑电路和互相关运算电路相连接,所述互相关 运算电路分别与数据准备逻辑电路、运算缓存区A和运算缓存区B相连接;其特征在于具体 步骤如下:
[0013] (1)外部串行数据发送给协处理器,按照如下方式保存到协处理器存储块阵列中: 将N个向量存储到协处理器的η个存储块中,每个向量包含η个数据,第一向量中的η个数 据(D1、D2、……、Dn)进入后依次保存到第一存储块的第一地址处、第二存储块的第一地址 处、……、第η存储块的第一地址处;第二向量中的η个数据进入后依次保存到第一存储块 的第二地址处、第二存储块的第二地址处、……、第η存储块的第二地址处;以此类推完成 N个向量数据的存储;
[0014] (2)在进行步骤⑴的数据存储过程中,当完成第一向量的η个数据存储后没有特 殊操作,协处理器继续接收数据;但当第二向量的η个数据都进入协处理器并完成存储时, 协处理器存储块阵列电路会产生一个互相关使能信号;后续每当一个向量,即第二向量到 第N向量的η个数据都进入协处理器并完成存储时,存储块阵列电路都会产生一个互相关 使能信号;
[0015] (3)存储块阵列电路发送的互相关使能信号使数据准备逻辑电路启动;数据准备 逻辑电路首先从存储块阵列中读取最后进入协处理器并完成存储的第M向量,所述M的取 值范围是2 < M < Ν,放到运算缓存区A中,再读取第一向量到运算缓存区Β,同时向互相关 运算电路给出运算使能信号,启动互相关运算电路,计算运算缓存区A和运算缓存区B中两 个向量的互相关;
[0016] (4)在电路设计时序上紧随步骤(3),数据准备逻辑电路按时钟依次再读取第二 向量、第三向量、……、第M-I向量到运算缓存区Β,以连续的数据流支持互相关运算电路的 计算流水,流水化的计算第M向量与第一向量、第二向量、……、第M-I向量的互相关;
[0017] (5)完成步骤(4)中的工作后,数据准备逻辑电路判断是否有新的产生于步骤(2) 中的互相关使能信号,如果没有,则挂起数据准备逻辑电路和互相关运算电路,等待新的 互相关使能信号;一旦数据准备逻辑电路获取新的互相关使能信号,则按照步骤(3)、步骤 (4)完成新进入协处理器的第M+1向量与第一向量、第二向量、……、第M向量的互相关运 算;
[0018] (6)重复上述步骤直至完成所有N个向量的两两互相关运算,由互相关运算电路 将最终的计算结果输出,从而完成提高协处理器运算效率。
[0019] 与现有技术相比,本发明的有益效果是:
[0020] (1)数据存储空间不再是一整块内存,而是由η个N长度的存储块组成的存储块阵 列,提高了向量数据的读取效率;
[0021] (2)在协处理器接收向量数据的同时对向量开展互相关运算,不用等到所有数据 接收完,提高了协处理器的运算效率;
[0022] (3)通过设计数据管理维护逻辑,实现了高速的向量数据准备,支持了互相关运算 模块的流水化计算要求,进一步提高了协处理器的运算效率和内部性能和内部性能。
【专利附图】
【附图说明】
[0023] 图1是传统的一维向量互相关电路设计算法工作流程图;
[0024] 图2是本发明提高协处理器运算效率的方法设计的存储块阵列及向量数据存储 方法示意图;
[0025] 图3是本发明提高协处理器运算效率的方法的方法流程图;
[0026] 图4是本发明提高协处理器运算效率的方法一种实施例设计的存储块阵列及向 量数据存储方法示意图;
[0027] 图5是本发明提高协处理器运算效率的方法一种实施例的方法流程图;
【具体实施方式】
[0028] 下面将对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施 例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技 术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范 围。
[0029] 本发明设计的一种提高协处理器运算效率的方法,该方法向协处理器中开辟的向 量数据存储空间不再是一整块内存,而是由η个N长度的存储块组成的存储块阵列(参见 图2)。这样的内存结构可在一个时钟内同时对η个存储块进行读操作,一次读出η个数据。 当数据进入协处理器时,协处理器根据存储块阵列的结构,将数据写入存储块阵列中,每当 完成一个完整向量数据的接收,则产生一次互相关使能信号,启动数据准备逻辑电路。在上 述高效内存结构下,数据准备逻辑电路可以实现一个时钟周期即准备好互相关向量,提供 给互相关运算电路,支持该运算电路的流水化计算。这样就可使得协处理器在接收数据、准 备数据的同时进行数据的互相关计算。
[0030] 本发明设计的一种提高协处理器运算效率的方法,所述协处理器包括数据准备逻 辑电路、存储块阵列、存储块阵列电路、运算缓存区A、运算缓存区B和互相关运算电路;所 述存储块阵列分别与存储块阵列电路和数据准备逻辑电路相连接,所述存储块阵列电路分 别与存储块阵列和数据准备逻辑电路相连接,所述数据准备逻辑电路相连接分别与存储块 阵列、存储块阵列电路、运算缓存区A、运算缓存区B和互相关运算电路相连接,所述运算缓 存区A分别与数据准备逻辑电路和互相关运算电路相连接,所述运算缓存B分别与数据准 备逻辑电路和互相关运算电路相连接,所述互相关运算电路分别与数据准备逻辑电路、运 算缓存区A和运算缓存区B相连接;具体步骤如下(参见图3):
[0031] (1)外部串行数据发送给协处理器,按照如下方式保存到协处理器存储块阵列中: 将N个向量存储到协处理器的η个存储块中,每个向量包含η个数据,第一向量中的η个数 据(D1、D2、……、Dn)进入后依次保存到第一存储块的第一地址处、第二存储块的第一地址 处、……、第η存储块的第一地址处;第二向量中的η个数据进入后依次保存到第一存储块 的第二地址处、第二存储块的第二地址处、……、第η存储块的第二地址处;以此类推完成 N个向量数据的存储;
[0032] (2)在进行步骤⑴的数据存储过程中,当完成第一向量的η个数据存储后没有特 殊操作,协处理器继续接收数据;但当第二向量的η个数据都进入协处理器并完成存储时, 协处理器存储块阵列电路会产生一个互相关使能信号;后续每当一个向量,即第二向量到 第N向量的η个数据都进入协处理器并完成存储时,存储块阵列电路都会产生一个互相关 使能信号;
[0033] (3)存储块阵列电路发送的互相关使能信号使数据准备逻辑电路启动;数据准备 逻辑电路首先从存储块阵列中读取最后进入协处理器并完成存储的第M向量,所述M的取 值范围是2 < M < Ν,放到运算缓存区A中,再读取第一向量到运算缓存区Β,同时向互相关 运算电路给出运算使能信号,启动互相关运算电路,计算运算缓存区A和运算缓存区B中两 个向量的互相关;
[0034] (4)在电路设计时序上紧随步骤(3),数据准备逻辑电路按时钟依次再读取第二 向量、第三向量、……、第M-I向量到运算缓存区Β,以连续的数据流支持互相关运算电路的 计算流水,流水化的计算第M向量与第一向量、第二向量、……、第M-I向量的互相关;
[0035] (5)完成步骤(4)中的工作后,数据准备逻辑电路判断是否有新的产生于步骤(2) 中的互相关使能信号,如果没有,则挂起数据准备逻辑电路和互相关运算电路,等待新的 互相关使能信号;一旦数据准备逻辑电路获取新的互相关使能信号,则按照步骤(3)、步骤 (4)完成新进入协处理器的第Μ+1向量与第一向量、第二向量、……、第M向量的互相关运 算;
[0036] (6)重复上述步骤直至完成所有N个向量的两两互相关运算,由互相关运算电路 将最终的计算结果输出,从而完成提高协处理器运算效率。
[0037] 实施例1
[0038] 本发明设计的一种提高协处理器运算效率的方法,以10个向量,每个向量包括6 个数据为例,【具体实施方式】包括以下步骤(参见图4、图5) :
[0039] (1)外部串行数据发送给协处理器,按照如下方式保存到协处理器存储块阵列中: 将10个向量存储到协处理器的6个存储块中,每个向量包含6个数据,第一向量中的6个 数据(D1、D2、D3、D4、D5、D6)进入后依次保存到第一存储块的第一地址处、第二存储块的第 一地址处、……、第六存储块的第一地址处;第二向量中的6个数据进入后依次保存到第一 存储块的第二地址处、第二存储块的第二地址处、……、第六存储块的第二地址处;以此类 推完成十个向量数据的存储;
[0040] (2)在进行步骤⑴的数据存储过程中,当完成第一向量的6个数据存储后没有特 殊操作,协处理器继续接收数据。但当第二向量的6个数据都进入协处理器并完成存储时, 协处理器存储块阵列电路会产生一个互相关使能信号;后续每当一个向量的6个数据都进 入协处理器并完成存储时,存储块阵列电路都会产生一个互相关使能信号;
[0041] (3)存储块阵列电路发送的互相关使能信号使数据准备逻辑电路启动。数据准备 逻辑电路首先从存储块阵列中读取最后进入协处理器并完成存储的第六向量(以第六向 量为例),放到运算缓存区A中,再读取第一向量到运算缓存区B,同时向互相关运算电路给 出运算使能信号,启动互相关运算电路,计算运算缓存区A和运算缓存区B中两个向量的互 相关;
[0042] (4)在电路设计时序上紧随步骤(3),数据准备逻辑电路按时钟依次再读取第二 向量、第三向量、……、第五向量到运算缓存区B,以连续的数据流支持互相关运算电路的计 算流水,流水化的计算第六向量与第一向量、第二向量、……、第五向量的互相关;
[0043] (5)完成步骤(4)中的工作后,第七向量按照此方法进入协处理器,产生新的互相 关使能信号,数据准备逻辑电路判断有新的产生于步骤(2)中的互相关使能信号,按照步 骤(3)、步骤(4)完成新进入协处理器的第七向量与第一向量、第二向量、……、第六向量的 互相关运算;
[0044] (6)重复上述步骤直至完成所有十个向量的两两互相关运算,由互相关运算电路 将最终的计算结果输出,从而完成提高协处理器运算效率。
【权利要求】
1. 一种提高协处理器运算效率的方法,所述协处理器包括存储块阵列、存储块阵列电 路、数据准备逻辑电路、运算缓存区A、运算缓存区B和互相关运算电路;所述存储块阵列分 别与存储块阵列电路和数据准备逻辑电路相连接,所述存储块阵列电路分别与存储块阵列 和数据准备逻辑电路相连接,所述数据准备逻辑电路相连接分别与存储块阵列、存储块阵 列电路、运算缓存区A、运算缓存区B和互相关运算电路相连接,所述运算缓存区A分别与数 据准备逻辑电路和互相关运算电路相连接,所述运算缓存B分别与数据准备逻辑电路和互 相关运算电路相连接,所述互相关运算电路分别与数据准备逻辑电路、运算缓存区A和运 算缓存区B相连接;其特征在于具体步骤如下: (1) 外部串行数据发送给协处理器,按照如下方式保存到协处理器存储块阵列中:将N 个向量存储到协处理器的η个存储块中,每个向量包含η个数据,第一向量中的η个数据 (Dl、D2、……、Dn)进入后依次保存到第一存储块的第一地址处、第二存储块的第一地址 处、……、第η存储块的第一地址处;第二向量中的η个数据进入后依次保存到第一存储块 的第二地址处、第二存储块的第二地址处、……、第η存储块的第二地址处;以此类推完成 Ν个向量数据的存储; (2) 在进行步骤(1)的数据存储过程中,当完成第一向量的η个数据存储后没有特殊操 作,协处理器继续接收数据;但当第二向量的η个数据都进入协处理器并完成存储时,协处 理器存储块阵列电路会产生一个互相关使能信号;后续每当一个向量,即第二向量到第Ν 向量的η个数据都进入协处理器并完成存储时,存储块阵列电路都会产生一个互相关使能 信号; (3) 存储块阵列电路发送的互相关使能信号使数据准备逻辑电路启动;数据准备逻辑 电路首先从存储块阵列中读取最后进入协处理器并完成存储的第Μ向量,所述Μ的取值范 围是2 < Μ < Ν,放到运算缓存区Α中,再读取第一向量到运算缓存区Β,同时向互相关运算 电路给出运算使能信号,启动互相关运算电路,计算运算缓存区A和运算缓存区B中两个向 量的互相关; (4) 在电路设计时序上紧随步骤(3),数据准备逻辑电路按时钟依次再读取第二向量、 第三向量、……、第M-1向量到运算缓存区B,以连续的数据流支持互相关运算电路的计算 流水,流水化的计算第Μ向量与第一向量、第二向量、……、第Μ-1向量的互相关; (5) 完成步骤(4)中的工作后,数据准备逻辑电路判断是否有新的产生于步骤(2)中的 互相关使能信号,如果没有,则挂起数据准备逻辑电路和互相关运算电路,等待新的互相关 使能信号;一旦数据准备逻辑电路获取新的互相关使能信号,则按照步骤(3)、步骤(4)完 成新进入协处理器的第Μ+1向量与第一向量、第二向量、……、第Μ向量的互相关运算; (6) 重复上述步骤直至完成所有Ν个向量的两两互相关运算,由互相关运算电路将最 终的计算结果输出,从而完成提高协处理器运算效率。
【文档编号】G06F7/57GK104238994SQ201410440429
【公开日】2014年12月24日 申请日期:2014年9月1日 优先权日:2014年9月1日
【发明者】王可, 曾永红, 朱天成, 周津, 鲁毅, 纪策 申请人:中国航天科工集团第三研究院第八三五七研究所