数据传输方法、装置和设备与流程

文档序号:16247434发布日期:2018-12-11 23:42阅读:159来源:国知局
数据传输方法、装置和设备与流程

本申请涉及计算机技术领域,特别涉及一种数据传输方法、装置和设备。

背景技术

随着计算机技术的发展,往往会在计算机设备中接入其它设备来进行命令处理。例如,计算机设备中可以接入片上系统(systemonchip,soc),soc中设置有硬件加速器,可以辅助计算机设备中的应用进行命令处理,从而可以改善计算机设备的系统性能,提升系统处理速度。

目前,如图1所示,soc中设置有驱动模块、加速器、提交队列(submissionqueue,sq)和完成队列(completionqueue,cq)。应用将命令传输给soc;soc中的驱动模块将命令添加到sq中;soc中的加速器从sq中取出命令并执行,且每执行完成一个命令后,将其执行结果添加到cq中;驱动模块依次将cq中的执行结果携带于处理数据中返回给应用。在此过程中,由于soc中通常设置有多个加速器,且各个加速器执行命令的时间不确定,所以有可能造成cq中执行结果的添加顺序与sq中命令的存储顺序不一致,也就是说,先存储到sq的命令,体现在cq中时可能是在较后的时间点执行完成,继而导致soc向应用返回处理数据的顺序与应用向soc传输命令的顺序不一致。

例如,应用依次将命令3、命令4、命令5和命令6传输给soc。soc中的驱动模块将这四个命令依次添加到sq中,soc中的多个加速器从sq中取出命令并执行。假设加速器1执行命令3和命令6,加速器2执行命令4,加速器3执行命令5,由于各个命令的大小可能不同,所以执行完成各个命令的时间点可能不同,假设先执行完成命令5,再执行完成命令4,然后执行完成命令3,最后执行完成命令6,则依次将命令5、命令4、命令3和命令6的执行结果添加到cq中。之后,驱动模块依次将cq中的这四个执行结果携带于处理数据中返回给应用。这种情况下,应用向soc传输命令的顺序为:命令3、命令4、命令5、命令6,soc向应用返回处理数据的顺序为:命令5、命令4、命令3、命令6,两者顺序不一致。

然而,应用的命令之间往往有逻辑关系存在,即前面的命令的处理数据往往会对后面的命令的处理造成影响,因而应用往往希望soc返回的处理数据的顺序与应用传输给soc的命令的顺序是一致的。如果两者顺序不一致,则很有可能导致应用发生逻辑混乱,难以满足应用需求。



技术实现要素:

本申请提供了一种数据传输方法、装置和设备,可以解决相关技术中返回处理数据的顺序与应用传输命令的顺序不一致的问题。所述技术方案如下:

第一方面,提供了一种数据传输方法,所述方法包括:

当接收到提交队列sq中第一命令的执行结果时,第一设备修改命令状态表中第一命令的执行状态为已完成,然后第一设备确定命令状态表中记录的前n个命令的执行状态均为已完成,该前n个命令为sq中存储顺序连续的至少一个命令,n为正整数。之后,第一设备按照该前n个命令在sq的存储顺序,将该前n个命令的处理数据发送给应用,该前n个命令的处理数据包括该前n个命令的执行结果。其中,sq用于存储应用发送的命令,第一命令为sq存储的命令中的任意一个命令,命令状态表用于记录sq中至少一个待处理的命令在sq的存储顺序,以及该至少一个待处理的命令中每个命令的执行状态。

需要说明的是,命令状态表可以为位图,保存于内存中,位图中可以有多个数据位,每个数据位用于记录一个命令的执行状态,或者命令状态表可以为数据表,保存于数据库中,数据表可以有多个表项,每个表项用于记录一个命令的执行状态。

在本申请中,由于第一设备是按照该前n个命令在sq的存储顺序,将该前n个命令的处理数据发送给应用,所以可以保证第一设备向应用返回处理数据的顺序与应用向第一设备传输命令的顺序一致,实现了第一设备对命令的保序处理,从而可以有效避免应用发生逻辑混乱,满足应用需求。

在另一种可能的实现方式中,第一设备为片上系统soc,soc中包括加速器和驱动模块。这种情况下,当接收到sq中第一命令的执行结果时,第一设备修改命令状态表中第一命令的执行状态为已完成之前,加速器可以从sq中获取第一命令并执行,在执行完成第一命令后,将第一命令的执行结果添加到sq关联的完成队列cq。相应地,第一设备修改命令状态表中第一命令的执行状态为已完成时,可以由驱动模块来修改命令状态表中第一命令的执行状态为已完成。

在本申请中,可以由soc中加速器和驱动模块结合起来完成对命令的处理,具体可由加速器从sq中获取命令并执行,并将执行结果添加到cq中,由驱动模块来对命令状态表进行管理,并从cq中获取执行结果携带于处理数据中返回给应用。

在另一种可能的实现方式中,为了减少对命令状态表的查找次数,提高对命令状态表的查找效率,可以采用二分法来对命令状态表进行查找。此时,第一设备确定命令状态表中记录的前n个命令的执行状态均为已完成时,可以令i=0,判断命令状态表中记录的前m个命令的执行状态是否均为已完成,m为预设正偶数除以2i后得到的数值;当命令状态表中记录的前m个命令的执行状态均为已完成时,确定n为m,且确定命令状态表中记录的前n个命令的执行状态均为已完成;当命令状态表中记录的前m个命令的执行状态不均为已完成,且m等于1时,确定命令状态表中记录的第一个命令的执行状态为未完成;当命令状态表中记录的前m个命令的执行状态不均为已完成,且m不等于1时,令i=i+1,并返回判断命令状态表中记录的前m个命令的执行状态是否均为已完成的步骤。

上述二分法查找过程,是先将命令状态表中记录的执行状态分为前后两部分,然后仅对在前记录的m个执行状态,判断这m个执行状态是否均为已完成,从而相比于逐个判断命令状态表中记录的前n个执行状态是否均为已完成的操作,可以减少近一半的运算量,从而可以节省处理资源,提高系统性能。

在另一种可能的实现方式中,已完成表示为0,未完成表示为1,预设正偶数为32;这种情况下,上述二分法查找过程中判断命令状态表中记录的前m个命令的执行状态是否均为已完成时,可以当命令状态表中记录的前m个命令的执行状态组成的整型数为0时,第一设备确定命令状态表中记录的前m个命令的执行状态均为已完成;当命令状态表中记录的前m个命令的执行状态组成的整型数不为0时,第一设备确定命令状态表中记录的前m个命令的执行状态不均为已完成。

这种情况下,仅需要一次查找即可判断命令状态表中记录的前m个执行状态是否均为已完成,从而相比于逐个判断命令状态表中记录的前m个执行状态是否均为已完成的操作,可以大大减少运算量,并且,此时对于整个命令状态表,仅需要六次查找即可判断出命令状态表中记录的前n个执行状态是否均为已完成,从而可以进一步节省处理资源,进一步提高系统性能。

在另一种可能的实现方式中,在接收到sq中第一命令的执行结果时,第一设备修改命令状态表中第一命令的执行状态为已完成之前,第一设备还可以按照第一命令在sq的存储顺序,在命令状态表中添加第一命令的执行状态,并修改第一命令的执行状态为未完成;相应地,第一设备按照前n个命令在sq的存储顺序,将前n个命令的处理数据发送给应用之后,还可以删除命令状态表中前n个命令的执行状态。

在本申请中,第一设备可以根据命令在sq中的添加情况、命令的执行情况、命令的执行结果的处理情况,来及时实现对命令状态表的更新,保证命令状态表中总是只准确存储尚未被处理完成的命令的执行状态,从而可以保证使用命令状态表来实现对命令的保序处理的准确性。

第二方面,提供了一种数据传输装置,所述数据传输装置具有实现上述第一方面中数据传输方法行为的功能。所述数据传输装置包括至少一个模块,该至少一个模块用于实现上述第一方面所提供的数据传输方法。

第三方面,提供了一种第一设备,所述第一设备包括加速器、处理器和存储器,所述处理器中运行有驱动模块,所述存储器用于存储计算机指令,所述驱动模块用于执行所述存储器中的计算机指令,所述第一设备通过所述加速器、所述驱动模块和所述存储器中的计算机指令执行上述第一方面所提供的数据传输方法的操作步骤。

第四方面,提供了一种服务器,所述服务器包括第一设备、第一处理器和总线,所述第一设备和第一处理器通过所述总线相通信,所述第一设备包括第二处理器和存储器,所述存储器用于存储计算机指令,所述服务器运行时,所述第二处理器执行所述存储器中的计算机指令以利用所述服务器中的硬件资源执行上述第一方面所提供的数据传输方法的操作步骤。

第五方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面所述的数据传输方法。

第六方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面所述的数据传输方法。

上述第二方面、第三方面、第四方面、第五方面和第六方面所获得的技术效果与第一方面中对应的技术手段获得的技术效果近似,在这里不再赘述。

本申请提供的技术方案带来的有益效果是:

在本申请中,当第一设备接收到sq中第一命令的执行结果时,修改命令状态表中第一命令的执行状态为已完成,命令状态表用于记录sq中至少一个待处理的命令在sq的存储顺序,以及该至少一个待处理的命令中每个命令的执行状态。之后,当命令状态表中记录的前n个命令的执行状态均为已完成时,第一设备按照该前n个命令在sq的存储顺序,将该前n个命令的处理数据发送给应用,该前n个命令为sq中存储顺序连续的至少一个命令。如此,可以保证第一设备向应用返回处理数据的顺序与应用传输命令的顺序一致,实现了第一设备对命令的保序处理,从而可以有效避免应用发生逻辑混乱,满足应用需求。

附图说明

图1是相关技术提供的一种soc的结构示意图;

图2是本申请实施例提供的一种soc的结构示意图;

图3是本申请实施例提供的一种计算机设备的结构示意图;

图4是本申请实施例提供的一种数据传输方法的流程图;

图5是本申请实施例提供的另一种soc的结构示意图;

图6是本申请实施例提供的一种数据传输装置的结构示意图。

具体实施方式

为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。

首先,对本申请实施例涉及的应用场景进行说明。

目前,为了提高计算机设备的处理性能,会将部分处理器实现的功能卸载至第一设备,由第一设备完成命令处理。例如,计算机设备中可以接入soc,soc中设置的硬件加速器可以辅助计算机设备中的应用进行命令处理,具体地,计算机设备接入soc后,计算机设备中的应用可以将一些需要处理的命令传输给soc,soc中的驱动模块和加速器可以处理这些命令,并在处理完成后,将这些命令的处理数据返回给应用,从而改善计算机设备的系统性能,提升系统处理速度。本申请实施例提供的数据传输方法就应用于第一设备辅助进行命令处理的场景。第一设备可以为soc、现场可编程门阵列(field-programmablegatearray,fpga),即、中央处理器(centralprocessingunit,cpu)等,为了便于后续描述,本申请实施例的以下描述中以第一设备为soc为例进行详细描述。

其次,对本申请实施例涉及的系统架构进行说明。

图2是本申请实施例提供的一种soc的结构示意图。参见图2,soc中包括:驱动模块201、多个加速器202、sq2011和cq2012;

其中,驱动模块201为软件,驱动模块201可以将应用传输的命令依次添加到sq2011中,每个加速器202为硬件,可以从sq2011中取出命令并执行,且每执行完成一个命令,可以将这个命令的执行结果添加到cq2012中。

这种情况下,sq2011中命令的存储顺序与应用传输命令的顺序一致,然而,由于多个加速器202在执行命令时,各个命令的大小可能不同,所以多个加速器202执行完成各个命令的时间点可能不同,从而导致命令的执行结果在cq2012中的添加顺序与命令在sq2011中的存储顺序可能不一致。

本申请实施例提供的数据传输方法正是通过控制cq2012中执行结果的处理顺序与sq2011中命令的存储顺序一致,以使第一设备向应用返回处理数据的顺序与应用向第一设备传输命令的顺序一致。

图3是本申请实施例提供的一种计算机设备的结构示意图。参见图3,该计算机设备包括至少一个处理器301,总线302、存储器303以及至少一个通信接口304。

处理器301可以是一个通用cpu、微处理器、特定应用集成电路(application-specificintegratedcircuit,asic)或一个或多个用于控制本申请方案程序执行的集成电路。每个处理器可以是一个单核处理器,也可以是一个多核处理器。这里的处理器可以指一个或多个设备、电路、和/或用于处理数据(例如计算机程序指令)的处理核。

处理器301还可以通过总线302与soc305连接。例如,soc305可以以扩展外围组件互连高速(peripheralcomponentinterconnectexpress,pcie)总线标准卡的形式接入该计算机设备。soc305中包括加速器、处理器和存储器,该处理器中运行有驱动模块,该存储器用于存储计算机指令,该驱动模块用于执行该存储器中的计算机指令,soc305通过该加速器、该驱动模块和该存储器中的计算机指令执行下述实施例提供的数据传输方法。soc305中处理的结构和形式与处理器301类似,在此不再赘述。

总线302可包括一通路,在上述组件之间传送信息。总线302除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,在图中将各种总线都标为总线302。

存储器303可以是只读存储器(read-onlymemory,rom)或可存储静态信息和指令的其它类型的静态存储设备,随机存取存储器(randomaccessmemory,ram)或者可存储信息和指令的其它类型的动态存储设备,也可以是电可擦可编程只读存储器(electricallyerasableprogrammableread-onlymemory,eeprom)、只读光盘(compactdiscread-onlymemory,cd-rom)或其它光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其它磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其它介质,但不限于此。存储器303可以是独立包括,通过通信总线302与处理器301相连接。存储器303也可以和处理器301集成在一起。

通信接口304,使用任何收发器一类的装置,用于与其它设备或通信网络通信,如以太网,无线接入网(ran),无线局域网(wirelesslocalareanetworks,wlan)等。

在具体实现中,作为一种实施例,该计算机设备还可以包括输出设备306和输入设备307。输出设备306和处理器301通信,可以以多种方式来显示信息。例如,输出设备306可以是液晶显示器(liquidcrystaldisplay,lcd)、发光二级管(lightemittingdiode,led)显示设备、阴极射线管(cathoderaytube,crt)显示设备或投影仪(projector)等。输入设备307和处理器301通信,可以以多种方式接收用户的输入。例如,输入设备307可以是鼠标、键盘、触摸屏设备或传感设备等。

上述的计算机设备可以是一个通用计算机设备或者是一个专用计算机设备。在具体实现中,计算机设备可以是x86服务器或arm服务器等设备,本申请实施例不限定计算机设备的类型。

图4是本申请实施例提供的一种数据传输方法的流程图,该方法应用于图2所示的soc。参见图4,该方法包括如下步骤:

步骤401:从sq中获取第一命令并执行,sq用于存储应用发送的命令,第一命令为sq存储的命令中的任意一个命令。

需要说明的是,sq可以存储在soc的存储区域,例如,sq存储至soc的内存中。sq中存储的命令可以是soc需要辅助应用处理的命令。

另外,soc在接收到应用发送的命令后,可以将该命令添加到sq中。并且,应用每将一个命令发送给soc,soc就可以将这个命令添加到sq中,此时sq中命令的存储顺序与应用传输命令的顺序相同。

另外,soc中可以包括多个加速器,该多个加速器中的每个加速器都可以从sq中获取命令并执行,即该多个加速器中的任一加速器可以从sq中获取第一命令并执行。

进一步地,在步骤401之前,还可以按照第一命令在sq的存储顺序,在命令状态表中添加第一命令的执行状态,并修改第一命令的执行状态为未完成。如此,可以便于后续根据命令状态表来实现命令的保序处理。

需要说明的是,命令状态表可以存储在soc的存储区域,且命令状态表用于按照尚未被处理完成的至少一个命令在sq的存储顺序记录该至少一个命令中每个命令的执行状态,也即是,命令状态表用于记录sq中至少一个待处理的命令在sq的存储顺序,以及该至少一个待处理的命令中每个命令的执行状态。例如,该命令状态表可以为位图,保存于内存中,位图中可以有多个数据位,每个数据位用于记录一个命令的执行状态,或者命令状态表可以为数据表,保存于数据库中,数据表可以有多个表项,每个表项用于记录一个命令的执行状态,当然,也可以为其它形式的记录表,本申请实施例对此不作限定。为了便于后续描述,本申请实施例的以下描述中以该命令状态表为位图为例进行详细描述。

另外,命令的执行状态用于指示命令是否被执行完成,也即是,当已经执行完成某一命令时,该命令的执行状态可以被修改为已完成,当尚未执行完成某一命令时,该命令的执行状态可以被修改为未完成。

值得注意的是,soc中还可以包括有驱动模块,该驱动模块可以向sq中添加命令,并管理命令状态表。也即是,该驱动模块可以将第一命令添加到sq中,并按照第一命令在sq的存储顺序,在命令状态表中添加第一命令的执行状态,并修改第一命令的执行状态为未完成。

步骤402:在执行完成第一命令后,将第一命令的执行结果添加到sq关联的cq。

需要说明的是,sq关联的cq可以存储在soc的存储区域,例如,cq存储至soc的内存中。sq关联的cq用于存储从sq中获取的命令的执行结果。

另外,加速器每执行完成一个命令后,就可以将这一个命令的执行结果添加到cq中。也即是,加速器执行完成第一命令后,可以将第一命令的执行结果添加到cq中。

步骤403:当接收到sq中第一命令的执行结果时,修改命令状态表中第一命令的执行状态为已完成。

由于第一命令已经被执行完成,得到了执行结果,所以可以将命令状态表中第一命令的执行状态修改为已完成。具体可以由soc中的驱动模块来修改命令状态表中第一命令的执行状态为已完成。

步骤404:判断命令状态表中记录的前n个命令的执行状态是否均为已完成,n为正整数。

需要说明的是,由于命令状态表中记录的是尚未被处理完成的至少一个命令的执行状态,且命令状态表中所有执行状态的记录顺序与该所有执行状态所属的命令在sq的存储顺序一致,所以命令状态表中记录的前n个命令的执行状态为尚未被处理完成的至少一个命令中最早存储到sq中的n个命令的执行状态,也即是,该前n个命令为sq中存储顺序连续的至少一个命令。

由于需要处理的命令数量往往比较多,所以为了减少对命令状态表的查找次数,提高对命令状态表的查找效率,可以采用二分法来对命令状态表进行查找。此时,步骤404的操作可以为:令i=0,判断命令状态表中记录的前m个命令的执行状态是否均为已完成,m为预设正偶数除以2i后得到的数值;当命令状态表中记录的前m个命令的执行状态均为已完成时,确定n为m,且确定命令状态表中记录的前n个命令的执行状态均为已完成;当命令状态表中记录的前m个命令的执行状态不均为已完成,且m等于1时,确定命令状态表中记录的第一个命令的执行状态为未完成;当命令状态表中记录的前m个命令的执行状态不均为已完成,且m不等于1时,令i=i+1,并返回判断命令状态表中记录的前m个命令的执行状态是否均为已完成的步骤。

预设正偶数可以预先进行设置,如预设正偶数可以为小于命令状态表中记录的执行状态的总数量中最大的偶数等,本申请实施例对此不作限定。

另外,上述二分法查找过程,是先将命令状态表中记录的执行状态分为前后两部分,然后仅对在前记录的m个执行状态,判断这m个执行状态是否均为已完成,从而相比于逐个判断命令状态表中记录的前n个执行状态是否均为已完成的操作,可以减少近一半的运算量,从而可以节省处理资源,提高系统性能。

上述二分法查找过程中,还可以通过进一步的优化来减少对命令状态表的查找次数,提高对命令状态表的查找效率。具体地,可以将命令状态表中的已完成表示为0,未完成表示为1,且将预设正偶数设置为32,此时,判断命令状态表中记录的前m个命令的执行状态是否均为已完成的操作可以为:当命令状态表中记录的前m个命令的执行状态组成的整型数为0时,确定命令状态表中记录的前m个命令的执行状态均为已完成;当命令状态表中记录的前m个命令的执行状态组成的整型数不为0时,确定命令状态表中记录的前m个命令的执行状态不均为已完成。

这种情况下,仅需要一次查找即可判断命令状态表中记录的前m个执行状态是否均为已完成,从而相比于逐个判断命令状态表中记录的前m个执行状态是否均为已完成的操作,可以大大减少运算量,并且,此时对于整个命令状态表,仅需要六次查找即可判断出命令状态表中记录的前n个执行状态是否均为已完成,从而可以进一步节省处理资源,进一步提高系统性能。

步骤405:当确定命令状态表中记录的前n个命令的执行状态均为已完成时,按照该前n个命令在sq的存储顺序,将该前n个命令的处理数据发送给应用。

该前n个命令在sq的存储顺序即为该前n个命令的执行状态在命令状态表中的记录顺序,该前n个命令的处理数据包括该前n个命令的执行结果。

另外,按照该前n个命令在sq的存储顺序,将该前n个命令的处理数据发送给应用时,可以先按照该前n个命令的执行状态在命令状态表中的记录顺序,处理cq中该前n个命令的执行结果,并在每处理完成一个命令的执行结果时,将这一个命令的处理数据传输给应用。例如,可以对cq中某个命令的执行结果调用这个命令对应的回调函数,得到这个命令的处理数据,当然,也可以以其它方式处理cq中命令的执行结果来得到命令的处理数据,本申请实施例对此不作限定。

当命令状态表中记录的前n个命令的执行状态均为已完成时,表明尚未被处理完成的至少一个命令中最早存储到sq中的n个命令已经执行完成。由于该前n个命令的执行状态在命令状态表中的记录顺序与该前n个命令在sq中的存储顺序一致,因此,此时可以按照该前n个命令的执行状态在命令状态表中的记录顺序,处理cq中该前n个命令的执行结果,得到该n个命令的处理数据,并将该前n个命令的处理数据发送给应用,从而可以保证cq中命令的执行结果的处理顺序与sq中命令的存储顺序一致,保证向应用返回处理数据的顺序与应用传输命令的顺序一致。

进一步地,为了保证命令状态表的准确性,在步骤405之后,还可以删除命令状态表中该前n个命令的执行状态,具体可以由驱动模块来删除命令状态表中该前n个命令的执行状态。如此,可以及时实现对命令状态表的更新,保证命令状态表中总是只存储尚未被处理完成的命令的执行状态。

步骤406:当确定命令状态表中记录的第一个命令的执行状态为未完成时,不处理cq中所有的执行结果。

当命令状态表中记录的第一个命令的执行状态为未完成时,表明尚未被处理完成的至少一个命令中最早存储到sq中的1个命令尚未执行完成,因而此时为了保证cq中命令的执行结果的处理顺序与sq中的命令的存储顺序一致,可以先不处理cq中所有的执行结果,直至将新的执行结果添加到cq中后,再重新执行步骤404来进行后续的处理过程。

如此,通过上述步骤404-步骤406可以使得cq中命令的执行结果的处理顺序与sq中命令的存储顺序一致,继而使得soc向应用返回处理数据的顺序与应用向soc传输命令的顺序一致,此时soc呈现给应用的接口中对命令的处理完全是按照应用传输命令的顺序进行的,从而实现了soc对命令的保序处理,进而可以有效避免应用发生逻辑混乱,满足应用需求。

在本申请实施例中,soc从sq中获取第一命令并执行,在执行完成第一命令后,将第一命令的执行结果添加到sq关联的cq,并修改命令状态表中第一命令的执行状态为已完成,命令状态表用于记录sq中至少一个待处理的命令在sq的存储顺序,以及该至少一个待处理的命令中每个命令的执行状态。之后,当命令状态表中记录的前n个命令的执行状态均为已完成时,按照该前n个命令在sq的存储顺序,将该前n个命令的处理数据发送给应用。如此,可以保证cq中命令的执行结果的处理顺序与sq中命令的存储顺序一致,继而保证soc向应用返回处理数据的顺序与应用向soc传输命令的顺序一致,实现了soc对命令的保序处理,从而可以有效避免应用发生逻辑混乱,满足应用需求。

为了便于理解,下面结合图5来对上述图4实施例提供的数据传输方法进行举例说明。

图5是本申请实施例提供的一种soc的结构示意图。参见图5,soc中包括驱动模块和多个加速器,sq、cq和命令状态表存储在soc的存储区域中。

假设应用依次传输给soc的多个命令为命令1、命令2、命令3和命令4。应用依次将该多个命令添加到sq中,且按照该多个命令在sq的存储顺序,在命令状态表中添加该多个命令的执行状态,并修改该多个命令的执行状态为未完成(即1),得到如下表1所示的命令状态表。

表1

多个加速器从sq中获取命令并执行,由于各个命令的大小可能不同,所以多个加速器执行完成各个命令的时间点可能不同,假设先执行完成命令3,再执行完成命令2,然后执行完成命令1,最后执行完成命令4。

首先,加速器执行完成命令3后,将命令3的执行结果添加到cq中,然后驱动模块修改命令状态表中命令3的执行状态为已完成(即0),得到如下表2所示的命令状态表。此后,驱动模块判断命令状态表中的前n个命令的执行状态是否均为已完成,由于命令状态表中的第一个命令的执行状态(即命令1的执行状态)为未完成,所以驱动模块不处理cq中所有的执行结果。

表2

然后,加速器执行完成命令2后,将命令2的执行结果添加到cq中,然后驱动模块修改命令状态表中命令2的执行状态为已完成(即0),得到如下表3所示的命令状态表。此后,驱动模块判断命令状态表中的前n个命令的执行状态是否均为已完成,由于该命令状态表中的第一个命令的执行状态(即命令1的执行状态)为未完成,所以驱动模块不处理cq中所有的执行结果。

表3

接下来,加速器执行完成命令1后,将命令1的执行结果添加到cq中,然后驱动模块修改命令状态表中命令1的执行状态为已完成(即0),得到如下表4所示的命令状态表。此后,驱动模块判断该命令状态表中的前n个命令的执行状态是否均为已完成,由于该命令状态表中的前3个命令的执行状态(即命令1、命令2和命令3的执行状态)均为已完成,所以驱动模块可以按照该前3个命令的执行状态在命令状态表中的记录顺序,先处理cq中命令1的执行结果,再处理cq中命令2的执行结果,最后处理cq中命令3的执行结果,并且,在处理完成cq中命令1、命令2和命令3的执行结果后,将命令1、命令2和命令3的处理数据传输给应用,之后,删除命令状态表中命令1、命令2和命令3的执行状态,得到如下表5所示的命令状态表,此时命令状态表中的第一个命令的执行状态为命令4的执行状态。

表4

表5

最后,加速器执行完成命令4后,将命令4的执行结果添加到cq中,然后驱动模块修改命令状态表中命令4的执行状态为已完成(即0),得到如下表6所示的命令状态表。此后,驱动模块判断命令状态表中的前n个命令的执行状态是否均为已完成,由于命令状态表中的第一个命令的执行状态(即命令4的执行状态)为已完成,所以驱动模块可以处理cq中命令4的执行结果,并且,在处理完成cq中命令4的执行结果后,将命令4的处理数据传输给应用,之后,删除命令状态表中命令4的执行状态。

表6

需要说明的是,本申请实施例中仅以上表1-表6为例对命令状态表进行说明,上表1-表6并不对本申请实施例构成限定。

上述数据传输过程中,应用向soc传输命令的顺序为:命令1、命令2、命令3、命令4,之后,soc向应用返回处理数据的顺序也为:命令1、命令2、命令3、命令4,即soc向应用返回处理数据的顺序与应用向soc传输命令的顺序一致,从而实现了soc对命令的保序处理,进而可以有效避免应用发生逻辑混乱,满足应用需求。

上文中结合图2至图5,详细描述了根据本申请实施例所提供的数据传输的方法,下面将结合图6、图2和图3,描述根据本申请实施例所提供的数据传输的装置、第一设备和服务器。

图6是本申请实施例提供的一种数据传输装置的结构示意图,应用于第一设备。参见图6,该装置包括第一修改模块601、确定模块602和发送模块603。

第一修改模块601,用于执行图4实施例中的步骤403;

确定模块602,用于执行图4实施例中的步骤404,并确定命令状态表中记录的前n个命令的执行状态均为已完成;

发送模块603,用于执行图4实施例中的步骤405。

可选地,命令状态表为位图或数据表。

可选地,确定模块602包括:

判断单元,用于令i=0,判断命令状态表中记录的前m个命令的执行状态是否均为已完成,m为预设正偶数除以2i后得到的数值;

第一确定单元,用于当命令状态表中记录的前m个命令的执行状态均为已完成时,确定n为m,且确定命令状态表中记录的前n个命令的执行状态均为已完成;

第二确定单元,用于当命令状态表中记录的前m个命令的执行状态不均为已完成,且m等于1时,确定命令状态表中记录的第一个命令的执行状态为未完成;

触发单元,用于当命令状态表中记录的前m个命令的执行状态不均为已完成,且m不等于1时,令i=i+1,并触发判断单元判断命令状态表中记录的前m个命令的执行状态是否均为已完成。

可选地,已完成表示为0,未完成表示为1,预设正偶数为32;判断单元包括:

第一确定子单元,用于当命令状态表中记录的前m个命令的执行状态组成的整型数为0时,确定命令状态表中记录的前m个命令的执行状态均为已完成;

第二确定子单元,用于当命令状态表中记录的前m个命令的执行状态组成的整型数不为0时,确定命令状态表中记录的前m个命令的执行状态不均为已完成。

可选地,该装置还包括:

第二修改模块,用于按照第一命令在sq的存储顺序,在命令状态表中添加第一命令的执行状态,并修改第一命令的执行状态为未完成;

相应地,该装置还包括:

删除模块,用于删除命令状态表中前n个命令的执行状态。

在本申请实施例中,当接收到sq中第一命令的执行结果时,修改命令状态表中第一命令的执行状态为已完成,命令状态表用于记录sq中至少一个待处理的命令在sq的存储顺序,以及该至少一个待处理的命令中每个命令的执行状态。之后,当命令状态表中记录的前n个命令的执行状态均为已完成时,按照该前n个命令在sq的存储顺序,将该前n个命令的处理数据发送给应用,该前n个命令为sq中存储顺序连续的至少一个命令。如此,可以保证向应用返回处理数据的顺序与应用传输命令的顺序一致,实现了对命令的保序处理,从而可以有效避免应用发生逻辑混乱,满足应用需求。

需要说明的是:上述实施例提供的数据传输的装置在数据传输时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将数据传输的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的数据传输装置与数据传输的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。

本申请实施例还提供了一种第一设备,第一设备可以为图2所示的第一设备,第一设备包括加速器、处理器和存储器,处理器中运行有驱动模块,存储器用于存储计算机指令,驱动模块用于执行存储器中的计算机指令,第一设备通过加速器、驱动模块和存储器中的计算机指令执行上述实施例提供的地址转换方法的操作步骤。

本申请实施例还提供了一种服务器,服务器可以为图3所示的计算机设备,服务器包括第一设备、第一处理器和总线,第一设备和第一处理器通过总线相通信,第一设备包括第二处理器和存储器,存储器用于存储计算机指令,服务器运行时,第二处理器执行存储器中的计算机指令以利用服务器中的硬件资源执行上述实施例提供的地址转换方法的操作步骤。

在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意结合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如:同轴电缆、光纤、数据用户线(digitalsubscriberline,dsl))或无线(例如:红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如:软盘、硬盘、磁带)、光介质(例如:数字通用光盘(digitalversatiledisc,dvd))、或者半导体介质(例如:固态硬盘(solidstatedisk,ssd))等。

以上所述为本申请提供的实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1