专利名称:核间通信的方法及核处理器的制作方法
技术领域:
本发明涉及通信技术领域,尤其涉及一种核间通信的方法及核处理器。
背景技术:
随着无线通信技术的发展,无线通信系统中有些设备,尤其是一些实时进行无线信道仿真的设备,经常要求进行大数据量的计算,这些设备通常采用多个核处理器,多个核进行信道仿真计算。现有的核间通信方法是将数据包发送到共享队列后,对该数据包进行解包后将数据拷入共享队列中,该种核间通信方法通信效率较低,因此,如何提高核间通信效率是一个急需解决的问题。
发明内容
本发明实施例提供了一种核间通信的方法及核处理器,以解决现有的核间通信效率低的问题。本发明实施例提供了一种核间通信的方法,该方法包括:数据发送核以字节为单位向所述数据发送核和数据接收核之间的共享队列写入数据;所述数据接收核以数据包的字节数为单位从所述共享队列读出数据。优选地,所述共享队列为环形队列,所述环形队列包含表示写入所述环形队列的总字节数的写入标识和表示从所述环形队列读出的总字节数的读出标识。优选地,所述数据发送核以字节为单位向所述共享队列写入数据之前,所述方法还包括:所述数据发送核判断所述共享队列是否为满队列。优选地,所述数据发送核判断所述共享队列是否为满队列包括:所述数据发送核获得所述环形队列的写指针、写入标识、读指针和读出标识;所述数据发送核判断所述读指针是否等于所述写指针,所述写入标识表示的写入所述环形队列的总字节数是否等于所述读出标识表示的从所述环形队列读出的总字节数,若所述读指针等于所述写指针,且写入所述环形队列的总字节数不等于从所述环形队列读出的总字节数,则所述环形队列是满队列,否则,所述环形队列不是满队列;或者,所述数据发送核判断所述环形队列供写入字节的长度是否小于当前写入操作欲写入的字节数,所述读出标识表示的从所述环形队列读出的总字节数是否等于所述写入标识表示的写入所述环形队列的总字节数,若所述环形队列供写入字节的长度小于当前写入操作欲写入的字节数,且所述读出标识表示的总字节数不等于所述写入标识表示的总字节数,则所述环形队列是满队列,否则,所述环形队列不是满队列;所述数据发送核以字节为单位向所述共享队列写入数据包括:所述数据发送核确定所述环形队列不是满队列后,以字节为单位向所述共享队列写入数据。优选地,所述数据接收核从所述共享队列读出数据之前,所述方法还包括:所述数据接收核判断所述共享队列是否为空队列。优选地,所述数据接收核判断所述共享队列是否为空队列包括:所述数据接收核获得所述环形队列的写指针、写入标识、读指针和读出标识;所述数据接收核判断所述读指针是否等于所述写指针,所述写入标识表示的写入所述环形队列的总字节数是否等于所述读出标识表示的从所述环形队列读出的总字节数,若所述读指针等于所述写指针,且所述写入标识表示的总字节数等于所述读出标识表示的总字节数,则所述环形队列是空队列,否则,所述环形队列不是空队列;或者,所述数据接收核判断已写入所述环形队列的字节的长度是否小于当前数据包的字节数,所述读出标识表示的从所述环形队列读出的总字节数是否等于所述写入标识表示的写入所述环形队列的总字节数,若已写入所述环形队列的字节的长度小于当前数据包的字节数,且所述读出标识表示的总字节数不等于所述写入标识表示的总字节数,则所述环形队列是空队列,否则,所述环形队列不是空队列。本发明实施例还提供了一种核处理器,该核处理器包括:写入模块,用于以字节为单位向核处理器之间的共享队列写入数据;读出模块,用于以数据包的字节数为单位从所述共享队列读出数据。优选地,所述共享队列为环形队列,所述环形队列包含表示写入所述环形队列的总字节数的写入标识和表示从所述环形队列读出的总字节数的读出标识。优选地,该核处理器还包括判断模块;所述判断模块,用于判断所述环形队列是否为满队列或是否为空队列;所述写入模块,具体用于在所述判断模块确定所述环形队列不是满队列后,以字节为单位向核处理器之间的共享队列写入数据;所述读出模块,具体用于在所述判断模块确定所述环形队列不是空队列后,以数据包的字节数为单位从所述共享队列读出数据。优选地,所述判断模块判断所述环形队列是否为满队列,具体用于:获得所述环形队列的写指针、写入标识、读指针和读出标识;判断所述读指针是否等于所述写指针,所述写入标识表示的写入所述环形队列的总字节数是否等于所述读出标识表示的从所述环形队列读出的总字节数,若所述读指针等于所述写指针,且写入所述环形队列的总字节数不等于从所述环形队列读出的总字节数,则所述环形队列是满队列,否则,所述环形队列不是满队列;或者,判断所述环形队列供写入字节的长度是否小于当前写入操作欲写入的字节数,所述读出标识表示的从所述环形队列读出的总字节数是否等于所述写入标识表示的写入所述环形队列的总字节数,若所述环形队列供写入字节的长度小于当前写入操作欲写入的字节数,且所述读出标识表示的总字节数不等于所述写入标识表示的总字节数,则所述环形队列是满队列,否则,所述环形队列不是满队列;或者所述判断模块判断所述环形队列是否为空队列,具体用于:获得所述环形队列的写指针、写入标识、读指针和读出标识;判断所述读指针是否等于所述写指针,所述写入标识表示的写入所述环形队列的总字节数是否等于所述读出标识表示的从所述环形队列读出的总字节数,若所述读指针等于所述写指针,且所述写入标识表示的总字节数等于所述读出标识表示的总字节数,则所述环形队列是空队列,否则,所述环形队列不是空队列;或者,判断已写入所述环形队列的字节的长度是否小于当前数据包的字节数,所述读出标识表示的从所述环形队列读出的总字节数是否等于所述写入标识表示的写入所述环形队列的总字节数,若已写入所述环形队列的字节的长度小于当前数据包的字节数,且所述读出标识表示的总字节数不等于所述写入标识表示的总字节数,则所述环形队列是空队列,否则,所述环形队列不是空队列。上述核间通信的方法及核处理器,在发送数据时不需要进行数据包的打包操作,实现了零拷贝;在接收数据时把队列单元设置为相应的数据包,便于实现核间通信的模块化操作;从而提高了通信的效率。
图1是本发明核间通信示意图;图2是本发明核间通信方法实施例的流程图;图3是本发明核间共享队列为满的状态示意图;图4a是本发明核间共享队列为空的状态示意图一;图4b是本发明核间共享队列为空的状态示意图二 ;图5是本发明读写核间共享队列操作流程图;图6是本发明核处理器实施例的结构示意图。
具体实施例方式为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。如图1所示,是本发明核间通信示意图,根据核间通信时数据的流向,将数据核分成两种,一种是数据发送核,一种是数据接收核。两个核通过核间的共享队列,进行数据交互。数据发送核将数据写入共享队列,数据接收核从共享队列读出数据。核间共享队列使用环形队列,环形队列的好处是可以不停地读写,因为是一个环,可以一直写下去,只要保证数据能及时读出,数据不会被覆盖即可。由于本发明实施例采用的环形队列不是标准的环形队列,所以需要增加表示写入所述环形队列的总字节数的写入标识和表示从所述环形队列读出的总字节数的读出标识,以通过队列空满的判断,确保队列读写的正确性,从而确保发送核和接收核之间的正确通信。如图2所示,是本发明核间通信方法实施例的流程图,该方法包括:步骤201、数据发送核以字节为单位向所述数据发送核和数据接收核之间的共享队列写入数据;其中,所述共享队列为环形队列,所述环形队列包含表示写入所述环形队列的总字节数的写入标识和表示从所述环形队列读出的总字节数的读出标识。在该步骤之前,还可以包括:数据发送核判断所述共享队列是否为满队列,只有在确定该共享队列不是满队列后,才可以向共享队列中写入数据。
上述数据发送核判断所述共享队列是否为满队列包括:所述数据发送核获得所述环形队列的写指针、写入标识、读指针和读出标识;所述数据发送核判断所述读指针是否等于所述写指针,所述写入标识表示的写入所述环形队列的总字节数是否等于所述读出标识表示的从所述环形队列读出的总字节数,若所述读指针等于所述写指针,且写入所述环形队列的总字节数不等于从所述环形队列读出的总字节数,则所述环形队列是满队列,否则,所述环形队列不是满队列;或者,所述数据发送核判断所述环形队列供写入字节的长度是否小于当前写入操作欲写入的字节数,所述读出标识表示的从所述环形队列读出的总字节数是否等于所述写入标识表示的写入所述环形队列的总字节数,若所述环形队列供写入字节的长度小于当前写入操作欲写入的字节数,且所述读出标识表示的总字节数不等于所述写入标识表示的总字节数,则所述环形队列是满队列,如图3所示,否则,所述环形队列不是满队列。步骤202、所述数据接收核以数据包的字节数为单位从所述共享队列读出数据。在该步骤之前,还可以包括:判断所述共享队列是否为空队列,只有在确认该共享队列不是空队列之后,才可以从该共享队列中读数据。所述数据接收核判断所述共享队列是否为空队列包括:所述数据接收核获得所述环形队列的写指针、写入标识、读指针和读出标识;所述数据接收核判断所述读指针是否等于所述写指针,所述写入标识表示的写入所述环形队列的总字节数是否等于所述读出标识表示的从所述环形队列读出的总字节数,若所述读指针等于所述写指针,且所述写入标识表示的总字节数等于所述读出标识表示的总字节数,则所述环形队列是空队列,如图4a所示,否则,所述环形队列不是空队列;或者,所述数据接收核判断已写入所述环形队列的字节的长度是否小于当前数据包的字节数,所述读出标识表示的从所述环形队列读出的总字节数是否等于所述写入标识表示的写入所述环形队列的总字节数,若已写入所述环形队列的字节的长度小于当前数据包的字节数,且所述读出标识表示的总字节数不等于所述写入标识表示的总字节数,则所述环形队列是空队列,如图4b所示,否则,所述环形队列不是空队列。上述数据发送核以字节为单位写入数据,省去了对数据包的组包过程,即实现了零拷贝的核间通信;上述数据接收核对于不同格式和大小的数据包只需要在读队列时按不同的基本队列单元读取即可,便于实现核间通信的模块化操作;从而提高了通信效率。上述共享队列是一个队列,但从发送核看和从接收核看,其队列结构是不同的,如图5所示,发送核在向共享队列写入数据时,是以字节为单位进行写入的,每次写入的字节数不固定,从队列单元的角度看,其基本的队列单元即为字节。每次写队列,即往队列中拷入多少字节;接收核在读队列时,其基本的队列单元是数据包,即每次读取一个数据包的数据。为了保持和写指针操作的一致性,其单位也是字节。每读取一个数据包,读指针就偏移一个数据包的字节数。这样针对不同的数据包操作,不需要在发送侧进行数据包的打包操作,可以实现零拷贝,只需在接收核侧,把队列单元设置为相应的数据包即可,这样便于实现核间通信的模块化操作。如图6所示,是本发明核处理器实施例的结构示意图,该核处理器包括写入模块61和读出模块62,其中:写入模块,用于以字节为单位向核处理器之间的共享队列写入数据;
读出模块,用于以数据包的字节数为单位从所述共享队列读出数据。上述共享队列优选为环形队列,所述环形队列包含表示写入所述环形队列的总字节数的写入标识和表示从所述环形队列读出的总字节数的读出标识。另外,该核处理器还包括判断模块;所述判断模块,用于判断所述环形队列是否为满队列或是否为空队列;所述写入模块,具体用于在所述判断模块确定所述环形队列不是满队列后,以字节为单位向核处理器之间的共享队列写入数据;所述读出模块,具体用于在所述判断模块确定所述环形队列不是空队列后,以数据包的字节数为单位从所述共享队列读出数据。其中,所述判断模块判断所述环形队列是否为满队列,具体用于:获得所述环形队列的写指针、写入标识、读指针和读出标识;判断所述读指针是否等于所述写指针,所述写入标识表示的写入所述环形队列的总字节数是否等于所述读出标识表示的从所述环形队列读出的总字节数,若所述读指针等于所述写指针,且写入所述环形队列的总字节数不等于从所述环形队列读出的总字节数,则所述环形队列是满队列,否则,所述环形队列不是满队列;或者,判断所述环形队列供写入字节的长度是否小于当前写入操作欲写入的字节数,所述读出标识表示的从所述环形队列读出的总字节数是否等于所述写入标识表示的写入所述环形队列的总字节数,若所述环形队列供写入字节的长度小于当前写入操作欲写入的字节数,且所述读出标识表示的总字节数不等于所述写入标识表示的总字节数,则所述环形队列为满队列,否则,所述环形队列为非满队列。所述判断模块判断所述环形队列是否为空队列,具体用于:获得所述环形队列的写指针、写入标识、读指针和读出标识;判断所述读指针是否等于所述写指针,所述写入标识表示的写入所述环形队列的总字节数是否等于所述读出标识表示的从所述环形队列读出的总字节数,若所述读指针等于所述写指针,且所述写入标识表示的总字节数等于所述读出标识表示的总字节数,则所述环形队列是空队列,否则,所述环形队列不是空队列;或者,判断已写入所述环形队列的字节的长度是否小于当前数据包的字节数,所述读出标识表示的从所述环形队列读出的总字节数是否等于所述写入标识表示的写入所述环形队列的总字节数,若已写入所述环形队列的字节的长度小于当前数据包的字节数,且所述读出标识表示的总字节数不等于所述写入标识表示的总字节数,则所述环形队列是空队列,否则,所述环形队列不是空队列。上述核处理器作为数据发送核发送数据时,不需要在发送侧进行数据包的打包操作,可以实现零拷贝;作为数据接收核接收数据时,把队列单元设置为相应的数据包,便于实现核间通信的模块化操作;从而提高通信的效率。本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,上述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本发明不限制于任何特定形式的硬件和软件的结合。以上实施例仅用以说明本发明的技术方案而非限制,仅仅参照较佳实施例对本发明进行了详细说明。本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,均应涵盖在本发明的权利要求范围当中。
权利要求
1.一种核间通信的方法,其特征在于,该方法包括: 数据发送核以字节为单位向所述数据发送核和数据接收核之间的共享队列写入数据; 所述数据接收核以数据包的字节数为单位从所述共享队列读出数据。
2.根据权利要求1所述的方法,其特征在于: 所述共享队列为环形队列,所述环形队列包含表示写入所述环形队列的总字节数的写入标识和表示从所述环形队列读出的总字节数的读出标识。
3.根据权利要求2所述的方法,其特征在于: 所述数据发送核以字节为单位向所述共享队列写入数据之前,所述方法还包括: 所述数据发送核判断所述共享队列是否为满队列。
4.根据权利要求3所述的方法,其特征在于: 所述数据发送核判断所述共享队列是否为满队列包括: 所述数据发送核获得所述环形队列的写指针、写入标识、读指针和读出标识; 所述数据发送核判断所述读指针是否等于所述写指针,所述写入标识表示的写入所述环形队列的总字节数是否等于所述读出标识表示的从所述环形队列读出的总字节数,若所述读指针等于所述写指针,且写入所述环形队列的总字节数不等于从所述环形队列读出的总字节数,则所述环形队列是满 队列,否则,所述环形队列不是满队列;或者,所述数据发送核判断所述环形队列供写入字节的长度是否小于当前写入操作欲写入的字节数,所述读出标识表示的从所述环形队列读出的总字节数是否等于所述写入标识表示的写入所述环形队列的总字节数,若所述环形队列供写入字节的长度小于当前写入操作欲写入的字节数,且所述读出标识表示的总字节数不等于所述写入标识表示的总字节数,则所述环形队列是满队列,否则,所述环形队列不是满队列; 所述数据发送核以字节为单位向所述共享队列写入数据包括: 所述数据发送核确定所述环形队列不是满队列后,以字节为单位向所述共享队列写入数据。
5.根据权利要求2所述的方法,其特征在于: 所述数据接收核从所述共享队列读出数据之前,所述方法还包括: 所述数据接收核判断所述共享队列是否为空队列。
6.根据权利要求5所述的方法,其特征在于: 所述数据接收核判断所述共享队列是否为空队列包括: 所述数据接收核获得所述环形队列的写指针、写入标识、读指针和读出标识; 所述数据接收核判断所述读指针是否等于所述写指针,所述写入标识表示的写入所述环形队列的总字节数是否等于所述读出标识表示的从所述环形队列读出的总字节数,若所述读指针等于所述写指针,且所述写入标识表示的总字节数等于所述读出标识表示的总字节数,则所述环形队列是空队列,否则,所述环形队列不是空队列;或者,所述数据接收核判断已写入所述环形队列的字节的长度是否小于当前数据包的字节数,所述读出标识表示的从所述环形队列读出的总字节数是否等于所述写入标识表示的写入所述环形队列的总字节数,若已写入所述环形队列的字节的长度小于当前数据包的字节数,且所述读出标识表示的总字节数不等于所述写入标识表示的总字节数,则所述环形队列是空队列,否则,所述环形队列不是空队列。
7.—种核处理器,其特征在于,该核处理器包括: 写入模块,用于以字节为单位向核处理器之间的共享队列写入数据; 读出模块,用于以数据包的字节数为单位从所述共享队列读出数据。
8.根据权利要求7所述的核处理器,其特征在于: 所述共享队列为环形队列,所述环形队列包含表示写入所述环形队列的总字节数的写入标识和表示从所述环形队列读出的总字节数的读出标识。
9.根据权利要求8所述的核处理器,其特征在于,该核处理器还包括判断模块; 所述判断模块,用于判断所述环形队列是否为满队列或是否为空队列; 所述写入模块,具体用于在所述判断模块确定所述环形队列不是满队列后,以字节为单位向核处理器之间的共享队列写入数据; 所述读出模块,具体用于在所述判断模块确定所述环形队列不是空队列后,以数据包的字节数为单位从所述共享队列读出数据。
10.根据权利要求9所述的核处理器,其特征在于 所述判断模块判断所述环形队列是否为满队列,具体用于: 获得所述环形队列的写指针、写入标识、读指针和读出标识; 判断所述读指针是否等于所述写指针,所述写入标识表示的写入所述环形队列的总字节数是否等于所述读出标识表示的从所述环形队列读出的总字节数,若所述读指针等于所述写指针,且写入所述环形队列的总字节数不等于从所述环形队列读出的总字节数,则所述环形队列是满队列,否则,所述环形队列不是满队列;或者,判断所述环形队列供写入字节的长度是否小于当前写入操作欲写入的字节数,所述读出标识表示的从所述环形队列读出的总字节数是否等于所述写入标识表示的写入所述环形队列的总字节数,若所述环形队列供写入字节的长度小于当前写入操作欲写入的字节数,且所述读出标识表示的总字节数不等于所述写入标识表示的总字节数,则所述环形队列是满队列,否则,所述环形队列不是满队列;或者 所述判断模块判断所述环形队列是否为空队列,具体用于: 获得所述环形队列的写指针、写入标识、读指针和读出标识; 判断所述读指针是否等于所述写指针,所述写入标识表示的写入所述环形队列的总字节数是否等于所述读出标识表示的从所述环形队列读出的总字节数,若所述读指针等于所述写指针,且所述写入标识表示的总字节数等于所述读出标识表示的总字节数,则所述环形队列是空队列,否则,所述环形队列不是空队列;或者,判断已写入所述环形队列的字节的长度是否小于当前数据包的字节数,所述读出标识表示的从所述环形队列读出的总字节数是否等于所述写入标识表示的写入所述环形队列的总字节数,若已写入所述环形队列的字节的长度小于当前数据包的字节数,且所述读出标识表示的总字节数不等于所述写入标识表示的总字节数,则所述环形队列是空队列,否则,所述环形队列不是空队列。
全文摘要
本发明提供了一种核间通信的方法及核处理器,其中,该核间通信的方法包括数据发送核以字节为单位向所述数据发送核和数据接收核之间的共享队列写入数据;所述数据接收核以数据包的字节数为单位从所述共享队列读出数据。上述核间通信的方法及核处理器,在发送数据时不需要进行数据包的打包操作,实现了零拷贝;在接收数据时把队列单元设置为相应的数据包,便于实现核间通信的模块化操作;从而提高了通信的效率。
文档编号H04L12/863GK103166873SQ20111041123
公开日2013年6月19日 申请日期2011年12月12日 优先权日2011年12月12日
发明者马书宇, 陈诗军, 陆海涛 申请人:中兴通讯股份有限公司