CN100461094C - 一种针对流处理器的指令控制方法 - Google Patents
一种针对流处理器的指令控制方法 Download PDFInfo
- Publication number
- CN100461094C CN100461094C CNB2007100345685A CN200710034568A CN100461094C CN 100461094 C CN100461094 C CN 100461094C CN B2007100345685 A CNB2007100345685 A CN B2007100345685A CN 200710034568 A CN200710034568 A CN 200710034568A CN 100461094 C CN100461094 C CN 100461094C
- Authority
- CN
- China
- Prior art keywords
- instruction
- stream
- level
- level program
- program
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Advance Control (AREA)
Abstract
本发明公开了一种针对流处理器的指令控制方法,将指令控制分成流级程序和核级程序,流级程序负责数据在计算核心和片外存储器之间的调度,核级程序完成对数据的运算,其步骤为:(1)初始化核级程序的标量数据;(2)为核级程序准备向量数据;(3)启动核级程序的执行;(4)核级程序的执行;(5)将核级程序生成的向量数据存储到片外存储器中;(6)读取核级程序的标量结果。本发明是一种采用两级指令控制的方法,将数据的运算和访存分离,从而获得较高计算性能、较高存储器访问带宽,有效减小对片外存储器的带宽需求的针对流处理器的指令控制方法。
Description
技术领域
本发明主要涉及微处理器设计领域中的指令控制方法,特指一种面向具有计算密集型和数据并行性的针对流处理器的指令控制方法。
背景技术
随着计算机领域的不断拓展,一类典型的应用——流应用正成为微处理器的主要负载。所谓流,就是不间断的、连续的、移动的数据队列。这种流应用具有以下特征:计算密集性,对每次取出的流元素都要进行大量的算术运算;并行性,以数据级并行为主。数据流中流元素的相关性较弱,对不同流元素的操作是相对独立,这样就存在大量的数据并行和很好的延迟隐藏;局域性,包括数据重用局域性与生产者-消费者的局域性。通用微处理器器的指令控制一般采用基本的五段流水线即指令取指、指令译码/读寄存器、执行/有效地址计算、访问存储器和写回。同时为了开发指令级性可以采用记分牌技术、动态分支预测、寄存器重命名和Tomasulo算法等动态调度技术来减小数据相关和控制相关引起的停顿,采用三级存储层次LRF-CACHE-片外DRAM来减小平均存储器的访问时间,从而减小CPI。提高指令集并行性还可以采用VLIW(超长指令字)的静态调度的方法,VLIW的执行控制相对简单,不需要硬件进行动态调度,可以降低硬件的复杂度,但是这种方法对于编译器的性能要求非常高,编译器的性能决定了指令集并行性的开发。这些指令的控制方法将存储器的访问与对数据进行的计算操作紧密地耦合在一起。在通用微处理器中的计算单元所占的比重并不是很大,例如在Iantium-2处理器中,12个整数部件和2个浮点部件和相关的寄存器文件仅仅占到整个芯片面积的6%,这种结构对于计算密集性的流应用程序具有一定的局限性。对于具有很高的数据并行性和计算密集型的流应用而言,流应用程序中的数据相关性较弱,容易将计算与存储器访问分离,因此采用通用的指令控制的方法并不能够获得很高的性能。
发明内容
本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种采用两级指令控制的方法,将数据的运算和访存分离,从而获得较高计算性能、较高存储器访问带宽,有效减小对片外存储器的带宽需求的针对流处理器的指令控制方法。
为解决上述技术问题,本发明提出的解决方案为:一种针对流处理器的指令控制方法,将指令控制分成流级程序和核级程序,流级程序负责数据在计算核心和片外存储器之间的调度,核级程序完成对数据的运算,其具体步骤为:
(1)、初始化核级程序的标量数据:流级程序通过控制字传输指令将核级程序执行过程中所需要的标量数据初始化到微控制器寄存器中,在核级程序执行时候,通过通讯类指令,从微控制器寄存器中广播到计算群单元中,如果核级程序不需要初始化标量数据,那么该步骤可以省略;
(2)、为核级程序准备向量数据:通过流传输类指令,将计算核心所需要处理的向量数据或者在双缓冲技术中的向量数据的一部分从片外存储器中加载到片内存储器,步骤(1)和步骤(2)可以并行进行;
(3)、启动核级程序的执行:等待前两个步骤完成之后,启动核级程序执行;
(4)、核级程序的执行:如果核级程序不需要和流级程序进行同步通讯并且核级程序所需要处理的数据已经完全放置在片内存储器中,那么在核级程序执行的过程中,流级程序不停的检测核级程序是否执行完成;如果核级程序需要和流级程序进行同步通讯,流级程序和流级程序达到同步点的时候,核级程序和流级程序才能够继续执行;如果流级采用双缓冲技术为核级程序提供数据,那么在核级程序对一部分数据处理的时候,流级程序将另一部分数据从片外存储器中加载到片内存储器中;
(5)、将核级程序生成的向量数据存储到片外存储器中:流级程序等待核级程序执行完成之后,将其生成的向量数据存储到片外存储器中;如果对核级程序生成的向量数据采用了双缓冲技术,那么在步骤(4)中,流级程序会将生成的向量数据的一部分存储到片外存储器中,在本步骤中,将最后一部分数据存储到片外存储器中;如果上一个核级程序生成的向量数据是一个中间结果,即将被下面的核级程序使用,并且能够完全保存在片内存储器中,那么本步骤可以省略;
(6)、读取核级程序的标量结果:等待核级程序执行完毕之后,流级程序通过控制字传输指令将标量结果从微控制器寄存器中读出来;如果核级程序没有生成标量结果,那么该步骤可以省略;本步骤与步骤(5)可以并行进行。
所述流级指令的控制过程分成三步:
(1)、逻辑槽号的分配和相关性的生成:流级编译器将流函数调用替换为流操作,一个流函数可以转换为一个或者多个流操作,每个流操作最终都会转化为一条流指,并且进行流操作之间的相关性分析,包括两个步骤:给流操作分配逻辑槽号和生成相关性掩码;
(2)、流级指令的动态生成与发送:流级指令只能依据程序的执行情况动态产生,运行于主处理器上的软件模块负责流级指令的动态生成和发送,流操作可以被该软件模块发送到流控制器必须满足以下两个条件:第一,当前待发送的流操作的逻辑槽号是可用的,软件模块不停的查询流控制器中逻辑槽号的使用情况,只有当为该指令分配的逻辑槽号不在流控制器中指令队列中的时候,才能够将该流操作发送到流控制器中;第二,如果有流操作A依赖于流操作B,而B又作为某一双缓冲的一部分被反复的发送,那么B必须完成最后一次发送后,A才能被发送;
(3)、流级指令的发射与执行:流控制器中有一个M项的指令队列,可以同时容纳M条流级指令,其中M一般大于N,流级指令的发射和执行分为三个步骤:一是流级指令进入指令队列;流指令进入指令队列的时候,需要根据存在于指令队列中的流级指令来更新该流级指令的完成相关性和发射相关性;二是流级指令从指令队列中发射到功能单元中执行,当流级指令的发射相关性和完成相关性得到满足并且该流级指令所需要的资源空闲的时候,流控制器会动态选择最早进入指令队列的流级指令i将其发射到相关的功能单元中去执行,并且更新位于指令队列中并且于流级指令i存在发射相关性的指令的相关性掩码;三是流级指令执行完成,离开指令队列,如果一条流级指令所需要的资源再一次空闲下来的时候,那么该流级指令执行完毕,可以从指令队列中离队。但是由于同一个时钟周期可能有多个流级指令执行完毕,因此流控制器选择最早进入指令队列的流级指令k离队,并且更新位于指令队列中与流级指令k存在完成相关性的流级指令的相关性掩码。
所述流级程序与核级程序的通讯可以通过控制字传输类指令完成标量数据的传输,核级程序在执行过程中所需要的标量数据需要通过控制字传输类指令将标量数据写入到微控制器寄存器文件中,并且通过该类流级指令将核级程序的标量运算结果读到流控制器寄存器文件中,通过控制字传输类指令不能够读写计算群内部的局部寄存器。
所述流级程序与核级程序的通讯可以通过流级指令clustop启动核级程序的执行,当流级指令为核级程序准备好输入流和初始化标量数据之后,通过clustop指令来启动核级程序的执行,当流控制器检测到核级程序执行完毕的时候,即clustop指令完成的时候,通过数据传输类流级指令将核级程序的输出到流寄存器文件的向量结果写入到片外存储器中,并通过控制字传输类指令将核级程序的标量结果从微控制器寄存器中读到流控制器寄存器中。
所述流级程序与核级程序的通讯可以采用同步通讯,实现流级程序和核级程序的同步,在流级程序中位于同步指令之后的流级指令不能够先于该同步指令发射,当同步指令达到指令队列的首位并且核级程序也达到同步点的时候才能够发射;在核级程序中遇到同步指令,将导致整个流水线停顿;当流级程序先达到同步点的时候,等待核级程序也达到同步点的时候,同步指令释放核级流水线,使核级程序继续执行,流级程序也同时执行,核级程序先达到同步点处理过程类似。
与现有技术相比,本发明的优点就在于:
1、隐藏访问延迟。程序的执行采用了流级和核级两级控制的方法,流级程序负责为核级程序准备需要处理的批量数据,并且将核级程序的执行结果存储到片外存储器中。因此为下一个核级程序准备数据可以和当前核级程序的执行并行,将当前核级程序的执行的结果存储到片外存储器中可以和下一个核级程序的执行并行,隐藏了存储器访问延迟。
2、可以获得高的计算性能。采用VLIW的核级指令,可以管理较多的功能单元。同时由于流应用程序具有计算密集型和数据并行型,因此这种结构结合了流应用程序的特点,可以获得很高的计算性能。
3、可以获得较高的存储器访问带宽。采用两级指令控制的方法,可以将对数据的存储访问和对数据的运算分开处理。显示的对批量数据的存储访问可以有效地利用片外存储器的带宽。
4、能够有效地减小对片外存储器的带宽需求。通过流级指令来管理数据在片内存储器与片外存储器之间的传输,能够充分的开发片内存储器的局部性,从而减小对片外存储器的存储访问。
5、硬件设计简单。流级程序和核级程序均采用了软硬件结合的方法,降低了硬件设计实现的复杂性。在流级,流级编译器负责指令相关性的检测和逻辑槽号的分配,硬件不需要动态的分析指令之间的相关性,仅仅需要检测指令的相关性是否达到满足。在核级,采用VLIW的指令格式,计算指令之间的相关性通过核级编译器静态分析,因此硬件不需要动态分析指令的相关性。
附图说明
图1是流级指令的格式;
图2是核级指令的格式;
图3是流级指令的控制方法;
图4是两级程序的执行流程。
具体实施方式
以下将结合附图和具体实施例对本发明做进一步详细说明。
参见图4所示,本发明一种针对流处理器的指令控制方法,将指令控制分成流级程序和核级程序,流级程序负责数据在计算核心和片外存储器之间的调度,核级程序完成对数据的运算,其具体步骤为:
1、初始化核级程序的标量数据。流级程序通过控制字传输指令将核级程序执行过程中所需要的标量数据初始化到微控制器寄存器中,在核级程序执行时候,通过通讯类指令,从微控制器寄存器中广播到计算群单元中。如果核级程序不需要初始化标量数据,那么该步骤可以省略。
2、为核级程序准备向量数据。通过流传输类指令,将计算核心所需要处理的向量数据或者向量数据的一部分(在双缓冲技术中)从片外存储器中加载到片内存储器。第1个步骤和该步骤可以并行进行。
3、启动核级程序的执行。等待前两个步骤完成之后,启动核级程序执行。
4、核级程序的执行。如果核级程序不需要和流级程序进行同步通讯并且核级程序所需要处理的数据已经完全放置在片内存储器中,那么在核级程序执行的过程中,流级程序不停的检测核级程序是否执行完成。如果核级程序需要和流级程序进行同步通讯,流级程序和流级程序达到同步点的时候,核级程序和流级程序才能够继续执行。如果流级采用双缓冲技术为核级程序提供数据,那么在核级程序对一部分数据处理的时候,流级程序将另一部分数据从片外存储器中加载到片内存储器中。
5、将核级程序生成的向量数据存储到片外存储器中。流级程序等待核级程序执行完成之后,将其生成的向量数据存储到片外存储器中。如果对核级程序生成的向量数据采用了双缓冲技术,那么在第4个步骤中,流级程序会将生成的向量数据的一部分存储到片外存储器中,在该步骤中,将最后一部分数据存储到片外存储器中。如果上一个核级程序生成的向量数据是一个中间结果,即将被下面的核级程序使用,并且能够完全保存在片内存储器中,那么该步骤可以省略。
6、读取核级程序的标量结果。等待核级程序执行完毕之后,流级程序通过控制字传输指令将标量结果从微控制器寄存器中读出来。如果核级程序没有生成标量结果,那么该步骤可以省略。该步骤与第5个步骤可以并行进行。
其中,图3是流级指令的控制方法。流级指令的控制分为三个过程:
1、逻辑槽号的分配和相关性的生成:流级编译器将流函数调用替换为流操作,一个流函数可以转换为一个或者多个流操作,每个流操作最终都会转化为一条流指令。并且进行流操作之间的相关性分析,包括两个步骤:给流操作分配逻辑槽号(Logic IssueSlot)和生成相关性掩码(RAWMask和WARMask)。逻辑槽号完全是一个编译概念,流级编译器设定只有N个逻辑槽,编号从0到N-1。流级编译器将从0号开始依次为每个流操作分配一个逻辑槽,通过循环使用这N个逻辑槽。流级编译器总是尝试给相邻的流操作分配相邻的逻辑槽号。流级编译器按照流操作在流程序中出现的顺序来分配逻辑槽号,采用修正的循环分配策略。在给流操作分配好逻辑槽号之后,编译器分析每个流操作与在其发送后可能同时存在于流控制器中的指令队列的其他在其之前发送的流操作之间相关性。当前流操作与其之前流操作存在以下情况之一它们之间是存在相关性的:访问相同的SRF空间、片外存储器、微码存储器空间,使用了相同的控制寄存器,两个操作修改或者使用了相同的内容。这些相关性可以被分为三类:一,RAW,写后读相关,即前一个操作修改了流的内容,当前操作要使用这一部分被修改的内容;二,WAR,读后写相关,即前一个操作需要读的内容,将会被当前的操作修改;三,WAW,写后写相关,前一个操作和当前操作都要对相同的部分进行修改。流级编译器用三种相关性掩码来表示流操作之间的相关性信息。并且把RAW和WAW合并,用RAWMask来表示,这是一种完成相关,所谓完成相关,准确的意思应为与某指令相关的所有指令必须执行完毕该指令才能发射;用WARMask来表示发射相关,所谓发射相关,准确的意思应为与某指令相关的所有指令必须发射后该指令才能发射。
2、流级指令的动态生成与发送:动态产生流级指令,是基于以下原因,流级程序存在循环、分支等基本块之间的跳转,编译器无法预先确定程序的执行轨迹,因此流级指令只能依据程序的执行情况动态产生。Run-time Dispatcher负责流级指令的动态生成和发送,它是运行于主处理器上的一个软件模块。流操作可以被Run-time Dispatcher发送到流控制器必须满足以下两个条件:第一,当前待发送的流操作的逻辑槽号是可用的。Run-time Dispatcher不停的查询流控制器中逻辑槽号的使用情况,只有当为该指令分配的逻辑槽号不在流控制器中指令队列中的时候,才能够将该流操作发送到流控制器中。第二,如果有流操作A依赖于流操作B,而B又作为某一双缓冲的一部分被反复的发送(A不在该双缓冲内),那么B必须完成最后一次发送后,A才能被发送。
3、流级指令的发射与执行,流控制器中有一个M项的指令队列,可以同时容纳M条流级指令(M一般大于N)。流级指令的发射和执行分为三个步骤:一是流级指令进入指令队列。流指令进入指令队列的时候,需要根据存在于指令队列中的流级指令来更新该流级指令的完成相关性和发射相关性。例如当前进入指令队列的流级指令与逻辑槽号为j的流级指令存在完成相关性,但是逻辑槽号为j的流级指令已经执行完毕已经离开指令队列,那么需要更新该流级指令的完成相关性信息。二是流级指令从指令队列中发射到功能单元中执行。当流级指令的发射相关性和完成相关性得到满足并且该流级指令所需要的资源空闲的时候,流控制器会动态选择最早进入指令队列的流级指令i将其发射到相关的功能单元中去执行,并且更新位于指令队列中并且于流级指令i存在发射相关性的指令的相关性掩码。三是流级指令执行完成,离开指令队列。如果一条流级指令所需要的资源再一次空闲下来的时候,那么该流级指令执行完毕,可以从指令队列中离队。但是由于同一个时钟周期可能有多个流级指令执行完毕,因此流控制器选择最早进入指令队列的流级指令k离队,并且更新位于指令队列中与流级指令k存在完成相关性的流级指令的相关性掩码。流级指令的发射采用多周期非流水的设计,并且每条流级指令发射的时钟周期数不是固定的,最小一个时钟周期,例如写寄存器指令,最大为8个时钟周期,例如启动核级程序执行的CLustop指令。流级指令的执行时钟周期数也是不固定的,对于流数据传输的流级指令的执行的时钟周期数是传输流数据所需要的时钟周期数。
在本发明中,指令分为流级指令和核级指令。流级指令主要为核级程序提供需要处理的流数据,即将流数据从片外存储器(DRAM)中通过load指令加载到片内流寄存器文件中,并将核级程序产生的流数据通过store指令从片内的流寄存器文件中存储到片外的DRAM存储器中。核级指令采用通用的VLIW格式,并且控制多个计算群以SIMD(单指令流多数据流)的方式执行。VLIW的每个域与计算群的每个功能单元相对应。
流级指令的控制方法采用基于逻辑槽号软硬件合作的控制方法。总体来说编译器生成流级指令之间的发射相关性和完成相关性,而由流控制器完成流级指令之间的相关性的动态检测,在相关性达到满足的时候,将该流级指令发射到相关的功能单元中去执行。
核级指令的执行由微控制器和计算群共同来完成。核级指令采用了通用的VLIW的控制方法,因此核级指令的执行不要采用动态调度的方法来检测数据相关性,指令之间的数据相关性由编译器静态调度。从逻辑上讲核级指令分为三条流水线:一是微控指令执行流水线,该流水线负责执行VLIW中的微控制器域的指令;二是数据输入输出执行流水线,该流水线负责执行VLIW中的输入输出单元域的指令;三是计算群所能够执行的指令的执行流水线,该流水线负责完成对输入数据的计算操作。这三条流水线共用流水线的两站即取指令第一站(Fetch1)和取指令第二站(Fetch2)。核级指令是存放在微控制器中指令存储器中的,因此受到片内存储器容量的限制导致核级程序的大小也受到限制。当核级程序比较大的时候需要程序员显示的将其切分为多个小程序。流水线停顿的控制:由于编译器在进行指令调度的时候已经考虑计算类指令的执行的时钟周期,因此第三条流水线不会引起流水线的停顿。但是由于第二条流水线需要从流寄存器文件的数据缓冲器中读出数据或者向流寄存器文件的数据缓冲器中写入数据,当数据缓冲器为空的时候会引起读操作停顿或者当数据缓冲器为满的时候会引起写操作停顿从而引起第二条流水线的停顿。由于核级流水线的锁步执行从而导致整个流水线的停顿。
流级程序与核级程序的通讯可以采用三种通讯方法:一是通过控制字传输类指令完成标量数据的传输。核级程序在执行过程中所需要的标量数据需要通过控制字传输类指令将标量数据写入到微控制器寄存器文件中,并且通过该类流级指令将核级程序的标量运算结果读到流控制器寄存器文件中。通过控制字传输类指令不能够读写计算群内部的局部寄存器。二是通过流级指令clustop启动核级程序的执行。当流级指令为核级程序准备好输入流和初始化标量数据之后,通过clustop指令来启动核级程序的执行,当流控制器检测到核级程序执行完毕的时候,即clustop指令完成的时候,通过数据传输类流级指令将核级程序的输出到流寄存器文件的向量结果写入到片外存储器中,并通过控制字传输类指令将核级程序的标量结果从微控制器寄存器中读到流控制器寄存器中。三是同步通讯。可以实现流级程序和核级程序的同步。在流级程序中位于同步指令之后的流级指令不能够先于该同步指令发射,当同步指令达到指令队列的首位并且核级程序也达到同步点的时候才能够发射。在核级程序中遇到同步指令,将导致整个流水线停顿。当流级程序先达到同步点的时候,等待核级程序也达到同步点的时候,同步指令释放核级流水线,使核级程序继续执行,流级程序也同时执行。核级程序先达到同步点处理过程类似。
其中,参见图1所示流级指令的格式,发射槽号占5位,表示0到31个逻辑槽号。WAR Mask发射相关性掩码,占32位。表示该条流级指令与其前面32条流级指令的发射相关性,第i位表示与处于该指令最近的逻辑槽号为i的流级指令的发射相关性。“1”表示与该条指令存在发射相关性,“0”表示与该条指令不存在发射相关性。RAW Mask完成相关性掩码,占32位。表示该条流级指令与其前面32条流级指令的完成相关性,第i位表示与处于该指令最近的逻辑槽号为i的流级指令的完成相关性。“1”表示与该条指令存在完成相关性,“0”表示与该条指令不存在完成相关性。Stream Op则包含了具体的流操作信息,其占5位至80位不等,也就是说流指令是变长的。流级指令不包含运算类指令,主要包括以下四类指令:控制字传输类指令,这类指令用来在寄存器之间或主处理器与控制寄存器之间传输数据。流传输类指令,这类指令实现流寄存器文件与片外DRAM之间的流数据的传输,多个处理器之间的流数据传输以及将核级程序从流寄存器文件中传送到微控制器的核级指令存储器中。同步类指令,主要目的是使流级程序和核级程序的执行同时达到一个同步点。启动核级程序执行的指令,启动核级程序对输入流进行运算操作。
参见图2所示核级指令的格式,VLIW指令字被划分成11个域,前8个域分别对应运算簇中的8个主要功能部件:便笺寄存器(Scratchpad)、4个乘加单元(MULADD)、通信单元(COMM)、条件生成控制单元(JB/VAL)以及本地条件寄存器文件(CC)。后3个域包括微控制器域(Microcontroller)、8个流输入输出单元域(DB0:DB7)和1个保留域(Res)。其中每个部件对应的域又进一步被划分成多个子域,除微控制器域和流输入输出域比较特殊以外,其它域基本包含如下子域:部件的操作码,条件码寄存器文件的读地址,本地寄存器文件读地址(LRFx Rd),本地寄存器文件写地址(LRFx Wr),除此之外每个本地寄存器写端口还分别对应一个软件流水段编号(LRFx Stg)和一个交叉开关地址编号(LRFx Bus)。
Claims (5)
1.一种针对流处理器的指令控制方法,其特征在于将指令控制分成流级程序和核级程序两个控制过程,流级程序负责数据在计算核心和片外存储器之间的调度,核级程序完成对数据的运算,其具体步骤为:
(1)、初始化核级程序的标量数据:流级程序通过控制字传输指令将核级程序执行过程中所需要的标量数据初始化到微控制器寄存器中,在核级程序执行时候,通过通讯类指令,标量数据从微控制器寄存器中广播到计算群单元中,如果核级程序不需要初始化标量数据,那么该步骤省略;
(2)、为核级程序准备向量数据:通过流传输类指令,将计算核心所需要处理的向量数据或者在双缓冲技术中的向量数据的一部分从片外存储器中加载到片内存储器,步骤(1)和步骤(2)并行进行;
(3)、启动核级程序的执行:等待前两个步骤完成之后,启动核级程序执行;
(4)、核级程序的执行:如果核级程序不需要和流级程序进行同步通讯并且核级程序所需要处理的数据已经完全放置在片内存储器中,那么在核级程序执行的过程中,流级程序不停的检测核级程序是否执行完成;如果核级程序需要和流级程序进行同步通讯,流级程序和流级程序达到同步点的时候,核级程序和流级程序才能够继续执行;如果流级程序采用双缓冲技术为核级程序提供数据,那么在核级程序对一部分数据处理的时候,流级程序将另一部分数据从片外存储器中加载到片内存储器中;
(5)、将核级程序生成的向量数据存储到片外存储器中:流级程序等待核级程序执行完成之后,将其生成的向量数据存储到片外存储器中;如果对核级程序生成的向量数据采用了双缓冲技术,那么在步骤(4)中,流级程序会将生成的向量数据的一部分存储到片外存储器中,在本步骤中,将最后一部分数据存储到片外存储器中;如果上一个核级程序生成的向量数据是一个中间结果,即将被下面的核级程序使用,并且能够完全保存在片内存储器中,那么本步骤省略;
(6)、读取核级程序的标量结果:等待核级程序执行完毕之后,流级程序通过控制字传输指令将标量结果从微控制器寄存器中读出来;如果核级程序没有生成标量结果,那么该步骤省略;本步骤与步骤(5)并行进行。
2.根据权利要求1所述的一种针对流处理器的指令控制方法,其特征在于所述流级程序的控制过程分成三步:
(1)、逻辑槽号的分配和相关性的生成:流级编译器将流函数调用替换为流操作,一个流函数转换为一个或者多个流操作,每个流操作最终都会转化为一条流级指令,并且进行流操作之间的相关性分析,该相关性分析包括两个步骤:给流操作分配逻辑槽号和生成相关性掩码;
(2)、流级指令的动态生成与发送:流级指令只能依据程序的执行情况动态产生,运行于主处理器上的软件模块负责流级指令的动态生成和发送,流操作被该软件模块发送到流控制器必须满足以下两个条件:第一,当前待发送的流操作的逻辑槽号是可用的,软件模块不停的查询流控制器中逻辑槽号的使用情况,只有当为该指令分配的逻辑槽号不在流控制器中指令队列中的时候,才能够将该流操作发送到流控制器中;第二,如果有流操作A依赖于流操作B,而B又作为某一双缓冲的一部分被反复的发送,那么B必须完成最后一次发送后,A才能被发送;
(3)、流级指令的发射与执行:流控制器中有一个M项的指令队列,同时容纳N条流级指令,其中M大于N,流级指令的发射和执行分为三个步骤:一是流级指令进入指令队列;流级指令进入指令队列的时候,需要根据存在于指令队列中的流级指令来更新该流级指令的完成相关性和发射相关性;二是流级指令从指令队列中发射到功能单元中执行,当流级指令的发射相关性和完成相关性得到满足并且该流级指令所需要的资源空闲的时候,流控制器会动态选择最早进入指令队列的流级指令i将其发射到相关的功能单元中去执行,并且更新位于指令队列中并且于流级指令i存在发射相关性的指令的相关性掩码;三是流级指令执行完成,离开指令队列,如果一条流级指令所需要的资源再一次空闲下来的时候,那么该流级指令执行完毕,从指令队列中离队;但是由于同一个时钟周期可能有多个流级指令执行完毕,因此流控制器选择最早进入指令队列的流级指令k离队,并且更新位于指令队列中与流级指令k存在完成相关性的流级指令的相关性掩码。
3.根据权利要求1或2所述的一种针对流处理器的指令控制方法,其特征在于所述流级程序与核级程序的通讯通过控制字传输类指令完成标量数据的传输,核级程序在执行过程中所需要的标量数据需要通过控制字传输类指令将标量数据写入到微控制器寄存器文件中,并且通过控制字传输类指令将核级程序的标量运算结果读到流控制器寄存器文件中,通过控制字传输类指令不能够读写计算群内部的局部寄存器。
4.根据权利要求1或2所述的一种针对流处理器的指令控制方法,其特征在于所述步骤(4)中流级程序与核级程序的通讯通过流级指令clustop启动核级程序的执行,当流级指令为核级程序准备好输入流和初始化标量数据之后,通过clustop指令来启动核级程序的执行,当流控制器检测到核级程序执行完毕的时候,即clustop指令完成的时候,通过数据传输类流级指令将核级程序的输出到流寄存器文件的向量结果写入到片外存储器中,并通过控制字传输类指令将核级程序的标量结果从微控制器寄存器中读到流控制器寄存器中。
5.根据权利要求1或2所述的一种针对流处理器的指令控制方法,其特征在于所述步骤(4)中流级程序与核级程序的通讯采用同步通讯,实现流级程序和核级程序的同步,在流级程序中位于同步指令之后的流级指令不能够先于该同步指令发射,当同步指令达到指令队列的首位并且核级程序也达到同步点的时候才能够发射;在核级程序中遇到同步指令,将导致整个流水线停顿;当流级程序先达到同步点的时候,等待核级程序也达到同步点的时候,同步指令释放核级流水线,使核级程序继续执行,流级程序也同时执行,核级程序先达到同步点处理过程相同。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007100345685A CN100461094C (zh) | 2007-03-19 | 2007-03-19 | 一种针对流处理器的指令控制方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007100345685A CN100461094C (zh) | 2007-03-19 | 2007-03-19 | 一种针对流处理器的指令控制方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101021779A CN101021779A (zh) | 2007-08-22 |
CN100461094C true CN100461094C (zh) | 2009-02-11 |
Family
ID=38709554
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2007100345685A Expired - Fee Related CN100461094C (zh) | 2007-03-19 | 2007-03-19 | 一种针对流处理器的指令控制方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100461094C (zh) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101217564B (zh) * | 2008-01-16 | 2012-08-22 | 上海理工大学 | 简单对象存取协议的并行通信系统及其实现方法 |
CN101620526B (zh) * | 2009-07-03 | 2011-06-15 | 中国人民解放军国防科学技术大学 | 一种减少流处理器片上指令存储器资源消耗的方法 |
CN101907984B (zh) * | 2009-08-07 | 2014-10-29 | 威盛电子股份有限公司 | 指令处理方法以及其所适用的超纯量管线微处理器 |
CN102053821B (zh) * | 2011-01-06 | 2014-03-19 | 中国人民解放军国防科学技术大学 | 一种多线程流分支控制方法及其控制装置 |
CN104025025B (zh) * | 2011-12-28 | 2018-08-28 | 英特尔公司 | 用于对打包数据元素执行增量编码的系统、装置和方法 |
WO2013100989A1 (en) | 2011-12-28 | 2013-07-04 | Intel Corporation | Systems, apparatuses, and methods for performing delta decoding on packed data elements |
CN102722446B (zh) * | 2012-06-06 | 2015-03-25 | 北京航空航天大学 | 一种面向流处理器的局部内存访问模式动态记录器 |
US9396113B2 (en) * | 2013-08-06 | 2016-07-19 | Oracle International Corporation | Flexible configuration hardware streaming unit |
CN105512024B (zh) * | 2014-09-30 | 2018-03-23 | 龙芯中科技术有限公司 | 生成检测指令序列的方法和装置 |
WO2016067068A1 (fr) * | 2014-10-30 | 2016-05-06 | Gebo Cermex Canada Inc. | Méthode et dispositif de suivi de ligne de traitement de produits |
CN107179895B (zh) * | 2017-05-17 | 2020-08-28 | 北京中科睿芯科技有限公司 | 一种应用复合指令加快数据流结构中指令执行速度的方法 |
CN110825437B (zh) * | 2018-08-10 | 2022-04-29 | 昆仑芯(北京)科技有限公司 | 用于处理数据的方法和装置 |
CN109597654B (zh) * | 2018-12-07 | 2022-01-11 | 湖南国科微电子股份有限公司 | 寄存器初始化方法、基础配置表的生成方法及嵌入式系统 |
US11841822B2 (en) | 2019-04-27 | 2023-12-12 | Cambricon Technologies Corporation Limited | Fractal calculating device and method, integrated circuit and board card |
WO2020220935A1 (zh) | 2019-04-27 | 2020-11-05 | 中科寒武纪科技股份有限公司 | 运算装置 |
CN111459549B (zh) * | 2020-04-07 | 2022-11-01 | 上海兆芯集成电路有限公司 | 具有高度领先分支预测器的微处理器 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003008526A (ja) * | 2001-06-21 | 2003-01-10 | Sony Corp | データ処理装置 |
KR20040079097A (ko) * | 2003-03-06 | 2004-09-14 | 한국과학기술원 | 보조프로세서를 이용한 멀티미디어 처리를 위한 가속장치 |
US20060167936A1 (en) * | 2003-03-27 | 2006-07-27 | Osamu Okauchi | Data processing device |
JP2006313546A (ja) * | 2005-05-04 | 2006-11-16 | Arm Ltd | データ処理システム |
CN1885283A (zh) * | 2006-06-05 | 2006-12-27 | 中国人民解放军国防科学技术大学 | 流处理器中降低数据访问延迟的方法 |
-
2007
- 2007-03-19 CN CNB2007100345685A patent/CN100461094C/zh not_active Expired - Fee Related
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003008526A (ja) * | 2001-06-21 | 2003-01-10 | Sony Corp | データ処理装置 |
KR20040079097A (ko) * | 2003-03-06 | 2004-09-14 | 한국과학기술원 | 보조프로세서를 이용한 멀티미디어 처리를 위한 가속장치 |
US20060167936A1 (en) * | 2003-03-27 | 2006-07-27 | Osamu Okauchi | Data processing device |
JP2006313546A (ja) * | 2005-05-04 | 2006-11-16 | Arm Ltd | データ処理システム |
CN1885283A (zh) * | 2006-06-05 | 2006-12-27 | 中国人民解放军国防科学技术大学 | 流处理器中降低数据访问延迟的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101021779A (zh) | 2007-08-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100461094C (zh) | 一种针对流处理器的指令控制方法 | |
EP3314401B1 (en) | Block-based architecture with parallel execution of successive blocks | |
JP2928695B2 (ja) | 静的インタリーブを用いたマルチスレッドマイクロプロセッサおよびそれを備えたシステムでの命令スレッド実行方法 | |
CN107810480B (zh) | 根据性能度量的指令块分配 | |
CN100357884C (zh) | 用于处理指令的方法、处理器以及系统 | |
US9811340B2 (en) | Method and apparatus for reconstructing real program order of instructions in multi-strand out-of-order processor | |
EP3314398B1 (en) | Reuse of decoded instruction blocks in a block based architecture | |
US20230106990A1 (en) | Executing multiple programs simultaneously on a processor core | |
US7836276B2 (en) | System and method for processing thread groups in a SIMD architecture | |
US20170083320A1 (en) | Predicated read instructions | |
US5854934A (en) | Optimizing compiler having data cache prefetch spreading | |
US10452399B2 (en) | Broadcast channel architectures for block-based processors | |
US8935515B2 (en) | Method and apparatus for vector execution on a scalar machine | |
US20170083319A1 (en) | Generation and use of block branch metadata | |
US20160378491A1 (en) | Determination of target location for transfer of processor control | |
EP3350712A1 (en) | Register read/write ordering | |
CN105426160A (zh) | 基于sprac v8指令集的指令分类多发射方法 | |
US6061367A (en) | Processor with pipelining structure and method for high-speed calculation with pipelining processors | |
CN111656337A (zh) | 用于执行指令的系统和方法 | |
EP0496407A2 (en) | Parallel pipelined instruction processing system for very long instruction word | |
Singhvi et al. | Pipeline Hazards and its Resolutions | |
JP2861234B2 (ja) | 命令処理装置 | |
CN118796277A (zh) | 基于gpgpu的指令流水线优化及动态规划方法及系统 | |
Tziouvaras et al. | Rapid, low-power loop execution in a network of functional units | |
Karplus et al. | A compiler-driven supercomputer |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090211 Termination date: 20110319 |