一种并发指令操作方法和装置的制作方法

文档序号:6462633阅读:155来源:国知局
专利名称:一种并发指令操作方法和装置的制作方法
技术领域
本发明涉及通信技术领域,尤其涉及一种并发指令操作方法和装置。

背景技术
目前多核处理器蓬勃发展,应用越来越广泛,但软件的并发设计相对落后硬件的发展,制约了多核处理器优势的发挥。其主要原因之一是多核处理器一直未能给软件提供一整套标准且有效的并发指令集,以支持软件并发处理和设计。
队列是软件中最基础也是最重要的数据结构之一,如果能有并发的队列指令实现并发且原子的入队出队操作,将极大地优化并发程序架构,提高并行度和可靠性。并且对于软件的并发设计,具有十分重要的意义。
当前可以并发的队列都是直接用硬件实现的。其实现方式具体为硬件队列提供配置寄存器,软件通过配置以及系统约定的方法,使用配置寄存器中的内容。这些队列实质是硬件设备,是全局的,不可被软件创建或删除,因此无论多少,都是有限的全局硬件资源。
发明人在实现本发明的过程中,发现现有技术至少存在以下缺点 硬件实现的队列资源非常有限,不能作为纯粹的软件资源;不同硬件在并发队列的实现方法上各不相同,无法作到通用性和扩展性。


发明内容
本发明的实施例提供了一种并发指令操作方法和装置,以实现基于非硬件的并发队列操作。
本发明的实施例提供一种并发指令操作方法,包括 创建并发队列,设置所述并发队列的队列基地址和队列最大长度; 根据需要写入或读取的数据的长度,以及所述并发队列的队列基地址和队列最大长度,生成并发操作指令; 在所述并发队列中执行所述并发操作指令,完成对所述并发队列的数据操作。
本发明的实施例还提供一种实现并发指令操作的装置,包括 并发队列创建单元,用于创建并发队列,设置所述并发队列的队列基地址和队列最大长度; 并发操作指令生成单元,用于根据需要写入或读取的数据的长度,以及所述并发队列的队列基地址和队列最大长度,生成并发操作指令; 并发操作指令执行单元,用于在所述并发队列中执行所述并发操作指令生成单元生成的并发操作指令,完成对所述并发队列的数据操作。
通过使用本发明的实施例,实现了以下有益效果 通过创建并发队列并根据所创建的并发队列的参数对并发队列进行相应的操作,实现了软件并发队列的操作,极大地提高了软件的并发能力。由于指令并不限定其硬件的具体实现,可无阻碍的提升并发队列的处理能力,并实现指令兼容。



图1是本发明的实施例中并发指令操作方法的流程图; 图2是本发明的实施例中的队列指令的原理示意图; 图3是本发明的实施例中实现并发指令操作的装置的结构示意图; 图4是本发明的另一实施例中实现并发指令操作的装置的结构示意图。

具体实施例方式 本发明的实施例中提供一种并发指令操作方法,如图1所示,包括 框图101、创建并发队列,设置所述并发队列的队列基地址和队列最大长度。
具体的,该并发队列由控制字和元素存储空间组成,设置并发队列的队列基地址和队列最大长度,根据队列最大长度确定并发队列的掩码以及元素存储空间。
框图102、根据需要写入或读取的数据的长度,以及并发队列的队列基地址和队列最大长度,生成并发操作指令。
具体的,根据需要写入或读取的数据的长度,以及队列的队列基地址和队列最大长度,生成并发操作指令。并发操作指令包括单字并发入队命令、单字并发出队命令、双字并发入队命令、双字并发出队命令。
框图103、在并发队列中执行并发操作指令,完成对并发队列的数据操作。
具体的,该执行并发操作指令,完成对并发队列的数据操作可以进一步包括 判断并发操作指令中的队列基地址对否正确,不正确则返回基地址错误并结束,否则判断为正确则继续; 判断队列最大长度是否在有效范围内,不是则返回基地址错误并结束,否则判断为正确则继续; 判断当前队列长度与队列最大长度的关系,当前队列长度大于队列最大长度时返回非法控制字;当前队列长度等于队列最大长度时返回队列满的指示;当前队列长度小于队列最大长度时进行入队列或出队列操作。该入队列或出队列操作操作具体为根据队列的控制字以及掩码获取队列的入队列位置或出队列位置;将需要写入的数据写入入队列位置,或从出队列位置读取数据。
以下以一个具体的DEMO演示队列为例,说明本发明实施例中并发队列指令操作的具体实现。如图2所示,Base表示队列基地址,队列的最大长度为5,对应的存储Mask(掩码)为7,即元素的存储空间为8;另外队列中还包括1个控制字。因此,该图1所示的队列总共占据9个存储空间。该队列中,设每个存储空间代表一个32Bit的字。
该队列的在接收到并发指令时的状态变化包括 队列初始状态,如图1中的(1A)所示,该状态下队列为空。
入队列10个元素、出队列7个元素后的状态如图1中的(1B)所示,该状态下的队列中,第0、1、7个存储空间中存在元素。
在上述(1B)的基础上继续入队列2个元素后,队列处于满状态,如(1C)所示,该状态下的队列中,第0、1、2、3、7个存储空间中存在元素。
在上述(1C)的基础上继续出队列5个元素后,队列处于空状态,如(1D)所示,该状态下队列处于空状态。
本发明的实施例中,提供了一系列的并发队列指令,该如表1所示。
表1.并发队列指令 以下分别对各并发队列指令进行说明。
1、MENQW-Muticore En-Queue in Word(单字并发入队指令)以下各实施例中,单字长度为32bit。
MENQW指令的格式定义为MENQW Ra,Rb,Rc 该格式中设置的参数解释如下 Ra、Rb、Rc为三个通用寄存器,这里以寄存器长度为32bit为例。
Ra=4字节对齐的队列基地址,即上述图1中的Base Rb=需要入队的32bit数据 Rc=队列的最大长度(有效值为1<=Rc<=0xffff) 该MENQW指令所对应的操作具体为 根据Ra,Rc所指定的队列及参数,将32Bit数据Rb入队,或者无操作。执行该MENQW指令后,接收的返回内容包括 Ra=入队列前的队列控制字(队列控制字即Base指向的第一个32bit字) Rb=不变化 Rc=入队状态位指示 具体的,根据Ra中返回的队列控制字以及Rc返回的状态,判断该MENQW指令是否操作成功。考虑到队列指令在执行中会访问存储器,因此有可能起通常的地址类访问异常。当指令运行中的参数不合法时不会引起异常,而只引起本指令执行失败,该成功或者失败的响应可以通过在Rc中设置标志位来进行表达。
本实施例中,对响应内容中的Rc作如下规定 Rc=0表示成功入队,否则Rc的错误Bit定义为 Rc
=1Ra地址没有对齐。
Rc[1]=1Rc参数错误。
Rc[2]=1表示空操作,队列满。
Rc[3]=1控制字错误。
队列控制字长度为32bit,存储在Ra指定的地址中。其中控制字的高16Bit是入队列的in序号,低16Bit是出队列的out序号。这两个序号都是16Bit的无符号数。通过16Bit的无符号减法可以计算出当前的队列长度(CurLen=in-out)。
通过序号(in序号或out序号)和队列Mask的与运算,还可以直接计算出当前入队和出队元素的具体存储位置。队列Mask实质上是由队列的最大长度Rc直接给出的。其数学关系为,将Rc转换为2进制,设其最高的不为0的位为n,则Mask的值具体为为2的n次幂减1。这样即满足了存储空间的唯一性,也满足了将in、out序号快速转换为存储地址的需要 上述指令执行的具体操作过程可以参考下面的功能伪代码描述。
功能伪码在下面的伪码中,正常字体表示指令内部的执行和判断,粗体字表示对寄存器的读写或者对外部存储器的访问。
MENQW(&Ra,&Rb,&Rc) {if(Ra表示的地址没有4字节对齐) { Rc=1<<0; Return; } if(Rc的有效值不在1到0xffff之间) { Rc=1<<l; Return; } 根据Rc计算出队列的Mask,计算方法见上述描述 根据Ra读取队列控制字,并保存副本/*读操作,可能引发读异常*/ CtrlWrodTemp=*(volatile unsigned int*)Ra;/*CtrlWrodTemp成为地址为Ra的unsigned int类型变量*/ CtrlWordBakTemp=CtrlWrodTemp;/*保存CtrlWrodTemp的副本*/ 根据CtrlWord计算出当前的队列长度CurLen,CurLen=on-out if(CurLen==Rc) { Ra=CtrlWordBakTemp;/*返回原来的状态控制字到Ra*/ Rc=1<<2;/*队列满,空操作*/ Return; } if(CurLen>Rc) { Ra=CtrlWordBakTemp;/*返回原来的状态控制字到Ra*/ Rc=1<<3;/*非法控制字*/ Return; } /*0<=CurLen<Rc,可以入队列*/ 将Rb的值入队列,队列是写操作,可能引发写异常 *(((volatile unsigned int*)Ra)+(CtrlWordTemp[31:16]& Mask)+1)=Rb; /*CtrlWordTemp[31:16]是16Bit的in序号,对于CtrlWordTemp[31:16]与Mask进行与运算后获得的地址,写入Rb*/ 更新控制字,in序号加1 CtrlWordTemp[31:16]=(CtrlWordTemp[31:16]+1)&0xffff; 回写控制字/*写操作,可能引发写异常*/ *((volatile unsigned int*)Ra)=CtrlWordTemp; Ra=CtrlWordBakTemp; Rc=0; Return; } 2、MDEQW-Muticore De-Queue in Word(单字并发出队指令) MDEQW指令的格式定义为MDEQW Ra,Rb,Rc 该格式中设置的参数解释如下 Ra,Rb,Rc是三个通用32bit寄存器 Ra=4字节对齐的队列基地址 Rb=用于存放返回的数据 Rc=队列的最大长度(有效值为1<=Rc<=0xffff) 该MEDQW指令所对应的操作具体为 根据Ra,Rc所指定的队列及参数,将出队列得到的32Bit数据存入Rb,或者无操作。
执行该MEDQW指令后,接收的返回内容包括 Ra=出队列前的队列控制字(队列控制字就是基地址指向的第一个32bit字) Rb=返回的出队列的32Bit数据。
Rc=出队状态位指示 用户根据Rc返回的状态以及Ra中返回的队列控制字,来判断此指令是否成功。
如果成功,则表示Rb数据有效。
Rc=0表示成功出队,否则Rc的错误Bit定义为 Rc
=1Ra地址没有对齐。
Rc[1]=1Rc参数错误。
Rc[2]=1表示空操作,队列空。
Rc[3]=1控制字错误。
功能伪码如下所示 MENQW(&Ra,&Rb,&Rc) {if(Ra表示的地址没有4字节对齐) { Rc=1<<0; Return; } if(Rc的有效值不在1到0xffff之间) { Rc=1<<1; Return; } 根据Rc计算出队列的Mask 根据Ra读取队列控制字,并保存副本/*读操作,可能引发读异常*/ CtrlWrodTemp=*(volatile unsigned int*)Ra; CtrlWordBakTemp=CtrlWrodTemp; 根据CtrlWord计算出当前的队列长度CurLen if(CurLen==0) { Ra=CtrlWordBakTemp;/*返回原来的状态控制字到Ra*/ Rc=1<<2;/*队列空,空操作*/ Return; } if(CurLen>Rc) { Ra=CtrlWordBakTemp;/*返回原来的状态控制字到Ra*/ Rc=1<<3;/*非法控制字*/ Return; } /*0<CurLen<=Rc,可以出队列*/ 出队列到Rb,出队列是写操作,可能引发读异常 Rb=*(((volatile unsigned int*)Ra)+(CtrlWordTemp[15:0]&Mask)+1); /*CtrlWordTemp[15:0]是16Bit的out序号,将Rb写入到CtrlWordTemp[15:0] 与Mask与运算后获得的地址*/ 更新控制字 CtrlWordTemp[15:0]=(CtrlWordTemp[15:0]+1)&0xffff; 回写控制字/*写操作,可能引发写异常*/ *((volatile unsigned int*)Ra)=CtrlWordTemp; Ra=CtrlWordBakTemp; Rc=0; Return; } 3、MENQD-Muticore En-Queue in Double Word(双字并发入队指令) MENQD指令的格式定义为MENQD Ra,Rb,Rc 以下各实施例中,双字长度为64bit。
该格式中设置的参数解释如下 Ra,Rb,Rc是三个通用64bit寄存器 Ra=8字节对齐的队列基地址 Rb=需要入队的64bit数据 Rc=队列的最大长度(有效值为1<=Rc<=0xffffffff) 该MENQD指令所对应的操作具体为 根据Ra,Rc所指定的队列及参数,将数据64Bit数据Rb入队,或者无操作。
执行该MENQD指令后,接收的返回内容包括 Ra=入队列前的队列控制字(队列控制字就是基地址指向的第一个64bit字) Rb=不变化 Rc=入队状态位指示 用户根据Rc返回的状态以及Ra中返回的队列控制字,来判断此指令是否成功。
Rc=0表示成功入队,否则Rc的错误Bit定义为 Rc
=1Ra地址没有对齐。
Rc[1]=1Rc参数错误。
Rc[2]=1表示空操作,队列满。
Rc[3]=1控制字错误。
与上述MENQW指令相比,MENQD指令实现的64Bit的入队列过程和MENQW指令实现的32Bit入队列过程并无本质不同,只是数据元素的长度变为64Bit,同时队列的最大长度变大。MENQD指令执行的具体操作过程可以参考上述MENQW的功能伪代码描述,在此不进行重复描述。
4、MDEQD-Muticore De-Queue in Double Word (双字并发出队指令) MDEQD指令的格式定义为MDEQD Ra,Rb,Rc 以下各实施例中,双字长度为64bit。
该格式中设置的参数解释如下 Ra,Rb,Rc是三个通用64bit寄存器 Ra=8字节对齐的队列基地址 Rb=用于存放返回的数据 Rc=队列的最大长度(有效值为1<=Rc<=0xffffffff) 该MDEQD指令所对应的操作具体为 根据Ra,Rc所指定的队列及参数,将出队列得到的64Bit数据存入Rb,或者无操作。
返回 Ra=出队列前的队列控制字(队列控制字就是基地址指向的第一个64bit字) Rb=返回的出队列的64Bit数据。
Rc=出队状态位指示 用户根据Rc返回的状态以及Ra中返回的队列控制字,来判断此指令是否成功。
如果成功,则表示Rb数据有效。
Rc=0表示成功出队,否则Rc的错误Bit定义为 Rc
=1Ra地址没有对齐。
Rc[1]=1Rc参数错误。
Rc[2]=1表示空操作,队列空。
Rc[3]=1控制字错误。
与上述MDEQW指令相比,MDEQD指令实现的64Bit的入队列过程和MDEQW指令实现的32Bit入队列过程并无本质不同,只是数据元素的长度变为64Bit,同时队列的最大长度变大。MDEQD指令执行的具体操作过程可以参考上述MDEQW的功能伪代码描述,在此不进行重复描述。
需要说明的是,上述各实施例中,仅以单字并发入队命令、单字并发出队命令、双字并发入队命令、双字并发出队命令为例对本发明中并发指令的操作方法进行了说明。在具体实现时,并不限于上述相关命令以及命令的具体格式。能够以相同原理完成上述功能的其他指令也在本发明实施例的保护范围之内。
通过使用本发明实施例提供的上述方法,通过创建并发队列并根据所创建的并发队列的参数对并发队列进行相应的操作,实现了软件并发队列的操作,极大地提高了软件的并发能力。由于指令并不限定其硬件的具体实现,可无阻碍的提升并发队列的处理能力,并实现指令兼容。
本发明的实施例还提供一种实现并发指令操作的装置,其结构如图3所示,包括 并发队列创建单元10,用于创建并发队列,设置并发队列的队列基地址和队列最大长度. 并发操作指令生成单元20,用于根据需要写入或读取的数据的长度,以及并发队列创建单元10创建的并发队列的队列基地址和队列最大长度,生成并发操作指令。
并发操作指令执行单元30,用于在并发队列创建单元10创建的并发队列中执行并发操作指令生成单元20生成的并发操作指令,完成对并发队列的数据操作。
具体的,如图4所示,该实现并发指令操作的装置中 并发队列创建单元10可以包括第一并发队列创建子单元11,用于创建并发队列,该并发队列由控制字和元素存储空间组成,设置该并发队列的队列基地址和队列最大长度,根据队列最大长度确定并发队列的掩码以及元素存储空间。
并发操作指令执行单元30进一步包括 第一判断子单元31,用于判断并发操作指令中的队列基地址对否正确,不正确则返回基地址错误并结束,否则通知第二判断子单元; 第二判断子单元32,用于当第一判断子单元31判断队列基地址正确时,判断队列最大长度是否在有效范围内,不是则返回基地址错误并结束,否则通知第三判断子单元; 第三判断子单元33,用于当第二判断子单元32判断队列最大长度在有效范围内时,判断当前队列长度与队列最大长度的关系; 处理子单元34,用于当第三判断子单元33判断当前队列长度大于队列最大长度时返回非法控制字;当第三判断子单元33判断当前队列长度等于队列最大长度时返回队列满的指示;当第三判断子单元33判断当前队列长度小于队列最大长度时进行入队列或出队列操作。该入队列或出队列操作操作具体为根据队列的控制字以及掩码获取队列的入队列位置或出队列位置;将需要写入的数据写入入队列位置,或从出队列位置读取数据。
通过使用本发明实施例提供的上述装置,通过创建并发队列并根据所创建的并发队列的参数对并发队列进行相应的操作,实现了软件并发队列的操作,极大地提高了软件的并发能力。由于指令并不限定其硬件的具体实现,可无阻碍的提升并发队列的处理能力,并实现指令兼容。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可以通过硬件实现,也可以可借助软件加必要的通用硬件平台的方式来实现基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。
权利要求
1、一种并发指令操作方法,其特征在于,包括
创建并发队列,设置所述并发队列的队列基地址和队列最大长度;
根据需要写入或读取的数据的长度,以及所述并发队列的队列基地址和队列最大长度,生成并发操作指令;
在所述并发队列中执行所述并发操作指令,完成对所述并发队列的数据操作。
2、如权利要求1所述并发指令操作方法,其特征在于,所述创建并发队列,设置所述并发队列的队列基地址和队列最大长度包括
创建并发队列,所述并发队列由控制字和元素存储空间组成,设置所述并发队列的队列基地址和队列最大长度,根据所述队列最大长度确定所述并发队列的掩码以及元素存储空间。
3、如权利要求2所述并发指令操作方法,其特征在于,所述在所述并发队列中执行并发操作指令,完成对所述并发队列的数据操作包括
判断所述并发操作指令中的队列基地址对否正确,不正确则返回基地址错误并结束,否则判断为正确则继续;
判断所述队列最大长度是否在有效范围内,不是则返回基地址错误并结束,否则判断为正确则继续;
判断当前队列长度与队列最大长度的关系,当前队列长度大于队列最大长度时返回非法控制字;当前队列长度等于队列最大长度时返回队列满的指示;当前队列长度小于队列最大长度时进行入队列或出队列操作。
4、如权利要求3所述并发指令操作方法,其特征在于,所述当前队列长度小于队列最大长度时进行入队列或出队列操作包括
根据所述并发队列的控制字以及掩码获取队列的入队列位置或出队列位置;
将所述需要写入的数据写入所述入队列位置,或从所述出队列位置读取数据。
5、如权利要求1至4中任一项所述并发指令操作方法,其特征在于,所述并发操作指令包括
单字并发入队命令、单字并发出队命令、双字并发入队命令、双字并发出队命令中的一种或多种。
6、一种实现并发指令操作的装置,其特征在于,包括
并发队列创建单元,用于创建并发队列,设置所述并发队列的队列基地址和队列最大长度;
并发操作指令生成单元,用于根据需要写入或读取的数据的长度,以及所述并发队列的队列基地址和队列最大长度,生成并发操作指令;
并发操作指令执行单元,用于在所述并发队列中执行所述并发操作指令生成单元生成的并发操作指令,完成对所述并发队列的数据操作。
7、如权利要求6所述实现并发指令操作的装置,其特征在于,所述并发队列创建单元包括第一并发队列创建子单元,用于创建并发队列,所述并发队列由控制字和元素存储空间组成,设置所述并发队列的队列基地址和队列最大长度,根据所述队列最大长度确定所述并发队列的掩码以及元素存储空间。
8、如权利要求6所述实现并发指令操作的装置,其特征在于,所述并发操作指令执行单元进一步包括
第一判断子单元,用于判断所述并发操作指令中的队列基地址对否正确,不正确则返回基地址错误并结束,否则通知第二判断子单元;
第二判断子单元,用于当所述第一判断子单元判断队列基地址正确时,判断所述队列最大长度是否在有效范围内,不是则返回基地址错误并结束,否则通知第三判断子单元;
第三判断子单元,用于当所述第二判断子单元判断所述队列最大长度在有效范围内时,判断当前队列长度与队列最大长度的关系;
处理子单元,用于当所述第三判断子单元判断当前队列长度大于队列最大长度时返回非法控制字;当所述第三判断子单元判断当前队列长度等于队列最大长度时返回队列满的指示;当所述第三判断子单元判断当前队列长度小于队列最大长度时进行入队列或出队列操作。
9、如权利要求8所述实现并发指令操作的装置,其特征在于,所述处理子单元进一步为第一处理子单元,用于根据所述并发队列的控制字以及掩码获取队列的入队列位置或出队列位置;将所述需要写入的数据写入所述入队列位置,或从所述出队列位置读取数据。
10、如权利要求6至9中任一项所述实现并发指令操作的装置,其特征在于,所述并发操作指令包括
单字并发入队命令、单字并发出队命令、双字并发入队命令、双字并发出队命令中的一种或多种。
全文摘要
本发明的实施例公开了一种并发指令操作方法,包括创建并发队列,设置所述并发队列的队列基地址和队列最大长度;根据需要写入或读取的数据的长度,以及所述并发队列的队列基地址和队列最大长度,生成并发操作指令;在所述并发队列中执行所述并发操作指令,完成对所述并发队列的数据操作。本发明的实施例还公开了一种实现并发指令操作的装置。通过使用本发明的实施例,创建并发队列并根据所创建的并发队列的参数对并发队列进行相应的操作,实现了软件并发队列的操作,极大地提高了软件的并发能力。由于指令并不限定其硬件的具体实现,可无阻碍的提升并发队列的处理能力,并实现指令兼容。
文档编号G06F9/48GK101290589SQ20081009748
公开日2008年10月22日 申请日期2008年5月30日 优先权日2007年12月27日
发明者高秋明 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1