一种处理器及其处理任务的方法_3

文档序号:9579032阅读:来源:国知局
器尤指DSP,采用哈弗结构,标量核和矢量核共享数据存储器DM。DMA54负责程序和数据搬运,可以将程序通过AXI总线从外部存储空间搬运到DSP内部的SPM51和VPM52,也可以在外部存储空间和DM之间进行双向数据搬运。两个核通过参数缓冲器PBUF57进行核间通信。标量核负责标量处理部分,矢量核负责矢量处理部分(兼具标量运算功能)。标量核计算矢量处理所必需的参数,存于参数寄存器,并将参数写入PBUF57。标量核每完成一个任务的参数计算还会执行fork或sync指令(fork带矢量核子程序地址,sync不带),并将该指令信息写入PBUF57,目的是将不同任务的参数隔离区分开来以及双核同步。从PBUF57读出的参数依次写入矢量核的相应shadow寄存器,当读到fork或sync信息时,并且矢量核处于空闲状态或者已完成上个任务处理(以矢量核执行到sync指令为标志),则所有shadow寄存器值在一个周期内被一次性拷贝到对应的work寄存器,然后矢量核根据work寄存器携带的参数开始矢量计算。在矢量核进行某个任务矢量计算的同时,标量核可以继续后面任务的参数计算并将其写入PBUF57。通过对每个任务进行标量处理和矢量处理切割,分别由标量核和矢量核处理,并利用PBUF57传递参数和同步信息,可以实现双核并行运算,以及连续任务的流水操作和快速切换。
[0085]图6为本发明实施例的双核核间通信示意图。PBUF是一个FIFO结构的缓冲器,里面存储的是标量核发送的参数值以及同步指令信息。在标量核内部,有一些参数寄存器,如aa、qq、11、pq等,这些参数会被写到PBUF。从PBUF可以看到,各组参数p1、p2、p3等被fork或sync标志隔离开来。PBUF里面的参数首先被写到矢量核的shadow寄存器,如aa.s、qq.s、ll.s等。之所以叫做shadow寄存器,是因为这些寄存器的更新是在后台进行的。当矢量核执行sync指令时,如果下一任务所需参数对应的shadow寄存器都已更新完毕(即读到相应任务的fork或sync标志),则一次性将shadow寄存器值拷贝到对应的work寄存器。由此可见,矢量核任务的切换只消耗了一个周期,即执行sync指令的周期。所以当任务所用周期数较大时,任务切换所带来的时间开销是可以忽略不计的。
[0086]图7为本发明实施例的PBUF数据格式示意图。PBUF里面的数据包括参数(aa、qq、
ll、pq等)和同步指令(fork、sync)。实际上,对PBUF数据进行了编码处理。当从PBUF读取数据时,需要对数据进行解析以做相应的处理。
[0087]图8为本发明实施例二的处理器处理任务的方法的流程示意图。如图8所示,所述处理器处理任务的方法包括以下步骤:
[0088]步骤801:标量核执行参数计算,并将计算结果写入参数寄存器和PBUF。一个任务所用的一组参数计算完成后,标量核执行用于核间同步的fork或sync指令,并将该指令信息写入PBUF。
[0089]步骤802:从PBUF读取参数,并将参数值拷贝到shadow寄存器。当从PBUF读到fork或sync指令信息时,并且矢量核处于空闲状态或执行sync指令时,在一个周期内将所有被修改的shadow寄存器值一次性拷贝到work寄存器。
[0090]步骤803:矢量核根据work寄存器携带的参数进行矢量计算。计算完成后执行sync指令,用于更新下一任务所需的参数。在矢量核进行计算的同时,标量核也在对下一任务的参数进行计算,实现任务流水线并行。
[0091]图9是为本发明实施例的标量核处理任务的流程示意图。该图体现了标量核的任务控制和调度作用,如图9所示,所述流程包括以下步骤:
[0092]步骤901:执行参数计算:对于参数计算结果,既需要写入参数寄存器,又需要写人PBUF。
[0093]步骤902:执行fork或sync指令:fork指令将指定所调用VC0RE子程序地址,sync指令默认VC0RE顺序执行。fork或sync指令信息被写入PBUF。
[0094]步骤903:判断是否有新的一组参数需要计算。如果有,则重新执行步骤901 ;否贝1J,标量核结束工作。
[0095]图10为本发明实施例的矢量核处理任务的流程示意图。因为矢量核是被调用核,所以一开始是处于空闲状态的。如图10所示,所述流程包括以下步骤:
[0096]步骤1001:在空闲状态下,看从PBUF读到的是否是fork或sync指令信息。如果是,则执行下一步操作;如果不是,则继续维持在空闲状态。
[0097]步骤1002:将所有被修改的shadow寄存器值一次性拷贝到对应的work寄存器。该操作在一个周期内快速完成。
[0098]步骤1003:VC0RE从fork指定的地址开始运行子程序或顺序执行。
[0099]步骤1004:VC0RE执行sync指令,看是否从PBUF读出fork或sync指令信息。如果是,则执行shadow寄存器值拷贝到work寄存器的操作;如果不是,则进入空闲状态。进入空闲状态后,继续等待fork或sync指令信息。
[0100]图11为本发明实施例的写PBUF操作的流程示意图。如图11所示,所述流程包括以下步骤:
[0101]步骤1101:—开始,PBUF是空的,可以接受标量核的参数和同步指令信息写入。
[0102]步骤1102:判断PBUF是否非满,是时执行步骤1103,否时,执行步骤1104。
[0103]但如果由于特殊原因导致PBUF读出阻塞,有可能PBUF被标量核填满。为了防止PBUF上溢,这时需要将标量核的时钟关闭,从而使标量核停止运行,进而无法继续写PBUF。
[0104]步骤1103:可以接受标量核的参数和fork、sync信息写入。
[0105]步骤1104:标量核关钟,使其无法写入PBUF。
[0106]此外,对于读PBUF操作,在PBUF为空时,将不进行读操作。当PBUF为非空时,如果读到的是参数,则将其写入对应的shadow寄存器。当从PBUF读到的是fork或sync指令信息时,需要看矢量核是否处于空闲状态或者已经执行到sync指令,如果是则执行被修改的shadow寄存器到work寄存器的拷贝,如果不是则继续等待矢量核sync指令的到来。
[0107]图12是双核DSP简单的微码示例示意图。标量核首先为矢量核提供Id (load)指令地址a2的计算。代码中“a2.s”中的s”表示参数寄存器a2的结果将会通过PBUF传递到shadow寄存器a2.s,进而传递到矢量核的work寄存器a2。a2计算完成后,使用fork指令调用矢量核VC_SUBR0UTINE1子程序。在矢量核VC_SUBR0UTINE1子程序中,Id指令使用标量核计算得到的a2进行矢量load操作,然后使用sync指令结束此操作。下一个任务,标量核为矢量核提供ld(load)指令地址a4的计算。计算完成后,标量核使用sync指令。这一次,标量核的sync指令令矢量核顺序执行,可以看到矢量核继续执行的是Id指令使用标量核计算得到的a4进行矢量load操作,然后使用sync指令结束此操作。
[0108]图12也示出了单核执行相同任务对应的程序代码,可见代码是串行执行。由于标量核是矢量核的功能子集,且指令集兼容,该任务可以由矢量核单核完成,换句话说,标量处理部分可以灵活切割成两部分,分别分配给标量核和矢量核。典型应用是标量处理部分全部分配给标量核。但针对某一具体应用,可以做到为了达到双核效率最大化,灵活切割标量处理部分以及标量核和矢量核的处理界限。
[0109]图13为本发明另一实施例的处理器的结构框图,如图13所示。与前述实施例相比,该实施例取消了 PBUF57,但需要标量核55输出fork或sync指令信息到矢量核56,也需要矢量核56输出sync指令信息到标量核55。标量核55写到参数寄存器的值被同时写到矢量核56的shadow寄存器。该实施例相比前述实施例减小了资源开销,但会对处理器性能造成影响,这一点将会结合图14进行阐述。
[0110]如图14所示,因为没有了 PBUF缓存参数,标量核在执行到fork或sync指令且将要执行下一任务参数计算时,必须等到矢量核处于空闲状态或者矢量核执行到sync指令时才能执行下一任务参数计算。标量核等待是为了防止shadow寄存器值在还没有被拷贝到work寄存器时就被标量核写覆盖。矢量核在执行到sync指令且将要执行下一任务矢量计算时,如果标量核处于等待状态或者标量核执行到fork或sync指令则进行下一任务矢量计算,否则矢量核进入空闲状态。矢量核进入空闲状态是为了等待标量核将相应的参数计算完成。在标量核执行fork或sync指令且矢量核处于空闲状态时,或者矢量核执行sync指令且标量核处于等待状态时,或者标量核执行fork或sync指令且矢量核执行sync指令时,将shadow寄存器值一次性拷贝到work寄存器。
[0111]由图14可知,另一实施例相比前述实施例,由于没有了 PBUF缓存参数,造成矢量核有空闲状态,所以处理器性能会有损失。如果想要达到或接近前述实施例的性能,则需要在软件编程时进行更为精确的标量和矢量划分以及任务划分,尽量使得标量和矢量部分均衡
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1