事件抑制方法、装置、设备、异构平台及存储介质
文献发布时间:2024-04-18 20:01:30
技术领域
本发明涉及数据传输技术领域,具体涉及事件抑制方法、装置、设备、异构平台及存储介质。
背景技术
在依托数据中心网络的云服务业务中,一般会采用异构平台,例如CPU+GPU(中央处理器+图像处理器)、CPU+FPGA(中央处理器+现场可编程门阵列)、CPU+NPU(中央处理器+网络处理器)等;一般情况下,搭载CPU的上位机,可以与GPU、FPGA、NPU等异构设备之间通过描述符实现数据搬运,例如基于多队列DMA(Direct Memory Access,直接存储访问)传输技术实现数据搬运。
在数据搬运过程中,上位机与异构设备之间存在通知事件、中断事件等交互事件,若传输队列或虚拟机用户业务流量突然增大,会引起大量的交互事件,容易影响整个异构平台的数据传输带宽,影响系统性能。
发明内容
有鉴于此,本发明提供了一种事件抑制方法、装置、设备、异构平台及存储介质,以解决交互事件对数据传输带宽影响较大的问题。
第一方面,本发明提供了一种事件抑制方法,包括:对描述符队列中的当前写位置执行写操作;读取事件抑制信息中的第一事件抑制项;由第二设备配置所述第一事件抑制项中的第一事件抑制条件;所述第一事件抑制条件表示描述符队列中允许所述第一设备发起第一事件的写位置;在所述第一事件抑制项表示抑制第一事件的情况下,判断所述当前写位置与所述第一事件抑制条件是否相匹配;在所述当前写位置与所述第一事件抑制条件相匹配的情况下,向所述第二设备发起所述第一事件。
本发明由第二设备配置第一事件抑制项中的第一事件抑制条件,第一设备对描述符队列执行写操作时,基于该写操作所对应的当前写位置与第一事件抑制条件是否相匹配,确定是否能够向第二设备发起第一事件。基于该第一事件抑制条件能够实现对第一事件的抑制,有效避免因向第二设备插入过多的第一事件而影响第二设备的逻辑资源或线程资源;并且,不需要多次轮询,能够有效降低对DMA带宽的占用,能够应用于高速异构平台;第二设备可以主动配置该第一事件抑制条件,且可以配置该第一事件抑制项是否表示抑制第一事件,从而能够基于实际需求进行事件抑制,也能够保证数据传输的可靠性。
在一些可选的实施方式中,所述第一设备设有第一写指针,所述第一写指针指向所述描述符队列中需要被所述第一设备执行写操作的位置;所述第一事件抑制条件包括第一事件抑制偏置;所述判断所述当前写位置与所述第一事件抑制条件是否相匹配,包括:判断所述第一写指针与所述第一事件抑制偏置是否相匹配。
在一些可选的实施方式中,所述第二设备设有第二读指针,所述第二读指针指向所述描述符队列中需要被所述第二设备执行读操作的位置;所述第一事件抑制偏置为所述第二设备根据所述第二读指针和需要所述第一设备暂停发送所述第一事件的第一抑制量而确定的。
在一些可选的实施方式中,在所述第二读指针与所述第一抑制量之和不超过所述描述符队列的队列深度的情况下,所述第一事件抑制偏置为:第二读指针+第一抑制量;在所述第二读指针与所述第一抑制量之和超过所述描述符队列的队列深度的情况下,所述第一事件抑制偏置为:(第二读指针+第一抑制量) mod 队列深度;mod表示取模运算符。
本发明中,第二设备可以主动设置第一事件抑制偏置,基于该第一事件抑制偏置可以抑制第一设备向第二设备发送的第一事件,从而在第二设备拥塞时主动减少第一事件的数量,减小因插入第一事件而对第二设备的影响。并且,第二设备基于第二读指针和自身所需的第一抑制量,可以方便地设置合适的第一事件抑制偏置,实现方式简单,不会增加第二设备的负担。
在一些可选的实施方式中,所述第一设备还设有第一写翻转标志,在所述第一写指针从所述描述符队列的队尾移动至队首的情况下,所述第一写翻转标志发生变化;所述第一事件抑制条件还包括第一事件抑制翻转标志;所述判断所述当前写位置与所述第一事件抑制条件是否相匹配,还包括:判断所述第一写翻转标志与所述第一事件抑制翻转标志是否相匹配。
在一些可选的实施方式中,所述第二设备设有第二读指针和第二读翻转标志;所述第二读指针指向所述描述符队列中需要被所述第二设备执行读操作的位置,在所述第二读指针从所述描述符队列的队尾移动至队首的情况下,所述第二读翻转标志发生变化;所述第一事件抑制翻转标志是在所述第二读翻转标志的基础上翻转M次生成的;M=(第二读指针+第一抑制量) / 队列深度;/表示取商运算符。
在一些可选的实施方式中,所述第一事件抑制项还包括第一事件抑制使能;所述第一事件抑制使能用于确定所述第一事件抑制项是否表示抑制第一事件,以在所述第一事件抑制项表示抑制第一事件的情况下,执行判断所述当前写位置与所述第一事件抑制条件是否相匹配的步骤。
在一些可选的实施方式中,该方法还包括:在所述第一事件抑制项表示抑制第一事件的情况下,在向所述第二设备发起预设数量的所述第一事件之后,将所述第一事件抑制项更新为表示不抑制第一事件。
本发明为第一事件抑制条件设置第一事件抑制翻转标志,可以使得在队列深度不变的情况下,第二设备能够设置更大的第一抑制量,可以满足第二设备更多的抑制需求。基于第一事件抑制使能,也可以方便地表示当前是否需要对第一事件进行抑制,实现方式简单。
在一些可选的实施方式中,所述方法还包括:在需要抑制第二事件的情况下,配置所述事件抑制信息的第二事件抑制项中的第二事件抑制条件;所述第二事件抑制条件用于在与所述第二设备对所述描述符队列执行写操作的位置相匹配的情况下,允许所述第二设备向所述第一设备发起所述第二事件。
在一些可选的实施方式中,所述第一设备设有第一读指针,所述第一读指针指向所述描述符队列中需要被所述第一设备执行读操作的位置;所述第二设备设有第二写指针,所述第二写指针指向所述描述符队列中需要被所述第二设备执行写操作的位置;所述第二事件抑制条件包括第二事件抑制偏置;所述配置所述事件抑制信息的第二事件抑制项中的第二事件抑制条件,包括:确定需要所述第二设备暂停发送所述第二事件的第二抑制量;根据所述第一读指针和所述第二抑制量,确定所述第二事件抑制偏置;所述第二事件抑制偏置用于在与所述第二写指针相匹配的情况下,允许所述第二设备向所述第一设备发起所述第二事件。
在一些可选的实施方式中,所述根据所述第一读指针和所述第二抑制量,确定所述第二事件抑制偏置,包括:在所述第一读指针与所述第二抑制量之和不超过所述描述符队列的队列深度的情况下,所述第二事件抑制偏置为:第一读指针+第二抑制量;在所述第一读指针与所述第二抑制量之和超过所述描述符队列的队列深度的情况下,所述第二事件抑制偏置为:(第一读指针+第二抑制量) mod 队列深度;mod表示取模运算符。
在一些可选的实施方式中,所述第一设备还设有第一读翻转标志,在所述第一读指针从所述描述符队列的队尾移动至队首的情况下,所述第一读翻转标志发生变化;所述第二设备还设有第二写翻转标志,在所述第二写指针从所述描述符队列的队尾移动至队首的情况下,所述第二写翻转标志发生变化;所述第二事件抑制条件还包括第二事件抑制翻转标志;所述配置所述事件抑制信息的第二事件抑制项中的第二事件抑制条件,还包括:在所述第一读翻转标志的基础上翻转N次,生成所述第二事件抑制翻转标志;N=(第一读指针+第二抑制量) / 队列深度;/表示取商运算符,所述第二事件抑制翻转标志用于在与所述第二写翻转标志相匹配的情况下,允许所述第二设备向所述第一设备发起所述第二事件。
在一些可选的实施方式中,所述方法还包括:根据是否需要抑制第二事件,配置所述第二事件抑制项中的第二事件抑制使能;所述第二事件抑制使能用于确定所述第二事件抑制项是否表示抑制第二事件,以在所述第二事件抑制项表示抑制第二事件,且所述第二设备对所述描述符队列执行写操作的位置与所述第二事件抑制条件相匹配的情况下,允许所述第二设备向所述第一设备发起所述第二事件。
在一些可选的实施方式中,该方法还包括:对描述符队列中的当前读位置执行读操作;并且,所述对描述符队列中的当前读位置执行读操作,包括:在所述第一设备为上位机、所述第二设备为异构设备的情况下,若所述当前读位置处的描述符已用但未被回收,回收所述当前读位置处的描述符;在所述第一设备为异构设备、所述第二设备为上位机的情况下,若所述当前读位置处的描述符可用但未被用,读取所述当前读位置处的描述符。
在一些可选的实施方式中,所述描述符队列还包括用于指示描述符当前状态的老化标志;所述当前状态包括:已用但未被回收,可用但未被用;所述方法还包括:根据所述当前读位置处描述符的老化标志确定所述当前读位置处描述符的当前状态。
本发明基于老化标志标识描述符的当前状态,实现方式简单,也便于上位机和异构设备快速确定描述符的状态,进而执行相应的读写操作。
在一些可选的实施方式中,所述老化标志包括至少两位;所述当前状态还包括:已被回收;所述对描述符队列中的当前写位置执行写操作,包括:在所述第一设备为上位机、所述第二设备为异构设备的情况下,若所述当前写位置处的描述符已被回收,向当前写位置写入可用的描述符,并将相应老化标志更新为可用但未被用;在所述第一设备为异构设备、所述第二设备为上位机的情况下,将当前写位置处描述符的老化标志更新为已用但未被回收。
在一些可选的实施方式中,所述第一设备设有第一写指针和第一写翻转标志;所述第一写指针指向所述描述符队列中需要被所述第一设备执行写操作的位置,在所述第一写指针从所述描述符队列的队尾移动至队首的情况下,所述第一写翻转标志发生变化;所述老化标志包括第一位和第二位;所述将相应老化标志更新为可用但未被用,包括:将相应老化标志的第一位更新为所述第一写翻转标志;所述将当前写位置处描述符的老化标志更新为已用但未被回收,包括:将当前写位置处描述符的老化标志的第二位更新为所述第一写翻转标志。
在一些可选的实施方式中,所述第一设备设有第一读指针和第一读翻转标志;所述第一读指针指向所述描述符队列中需要被所述第一设备执行写操作的位置,在所述第一读指针从所述描述符队列的队尾移动至队首的情况下,所述第一读翻转标志发生变化;所述根据所述当前读位置处描述符的老化标志确定所述当前读位置处描述符的当前状态,包括:在所述第一设备为上位机、所述第二设备为异构设备的情况下,若所述当前读位置处描述符的老化标志的第一位与第二位相同,且所述第一读翻转标志与所述当前读位置处描述符的老化标志的第二位相匹配,确定所述当前读位置处的描述符已用但未被回收;在所述第一设备为异构设备、所述第二设备为上位机的情况下,若所述当前读位置处描述符的老化标志的第一位与第二位不同,且所述第一读翻转标志与所述当前读位置处描述符的老化标志的第一位相匹配,确定所述当前读位置处的描述符可用但未被用;所述对描述符队列中的当前写位置执行写操作,包括:在所述第一设备为上位机、所述第二设备为异构设备的情况下,若所述当前写位置处描述符的老化标志的第一位与第二位相同,且所述第一写翻转标志与所述当前写位置处描述符的老化标志的第二位不相匹配,确定所述当前写位置处的描述符已被回收。
第二方面,本发明提供了一种事件抑制装置,应用于第一设备,包括:写操作模块,用于对描述符队列中的当前写位置执行写操作;读取模块,用于读取事件抑制信息中的第一事件抑制项;由第二设备配置所述第一事件抑制项中的第一事件抑制条件;所述第一事件抑制条件表示描述符队列中允许所述第一设备发起第一事件的写位置;判断模块,用于在所述第一事件抑制项表示抑制第一事件的情况下,判断所述当前写位置与所述第一事件抑制条件是否相匹配;抑制模块,用于在所述当前写位置与所述第一事件抑制条件相匹配的情况下,向所述第二设备发起所述第一事件。
第三方面,本发明提供了一种计算机设备,包括:存储器和处理器,存储器和处理器之间互相通信连接,存储器中存储有计算机指令,处理器通过执行计算机指令,从而执行上述第一方面或其对应的任一实施方式的事件抑制方法。
第四方面,本发明提供了一种异构平台,包括:上位机和异构设备;所述上位机和所述异构设备用于执行上述第一方面或其对应的任一实施方式的事件抑制方法。
第五方面,本发明提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机指令,计算机指令用于使计算机执行上述第一方面或其对应的任一实施方式的事件抑制方法。
附图说明
为了更清楚地说明本发明具体实施方式或相关技术中的技术方案,下面将对具体实施方式或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据本发明实施例的事件抑制方法的流程示意图;
图2是根据本发明实施例的另一事件抑制方法的流程示意图;
图3是根据本发明实施例的再一事件抑制方法的流程示意图;
图4是根据本发明实施例的异构平台的工作原理示意图;
图5是根据本发明实施例的异构平台的工作过程流程示意图;
图6是根据本发明实施例的实现事件抑制过程中的一种状态示意图;
图7是根据本发明实施例的实现事件抑制过程中的另一种状态示意图;
图8是根据本发明实施例的实现事件抑制过程中的再一种状态示意图;
图9是根据本发明实施例的异构平台的一种结构示意图;
图10是根据本发明实施例的事件抑制装置的结构框图;
图11是本发明实施例的计算机设备的硬件结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
以CPU+FPGA的异构平台为例,搭载FPGA的DPU(Data Processing Unit,数据处理单元)、FPGA加速卡等异构设备,因其可编程、易管理、易移植等优势被广泛应用于大型数据中心。通过将FPGA芯片编程为支持虚拟化技术的设备或模块,结合板卡的PCIe(PeripheralComponent Interconnect Express,一种高速串行计算机扩展总线)、以太网口、板载存储等接口或外设,可以通过多队列传输技术向位于上位机的大量虚拟机用户提供各种自定义服务。
在数据密集型的FPGA服务中,上位机(软件,例如虚拟机软件)到异构设备(硬件,例如FPGA)的数据通路是人们重点关注的对象。在上位机为主体的异构系统中,普遍采用多队列DMA传输技术实现FPGA与上位机之间的数据搬运,每个队列的数据传输都是基于描述符创建、描述符搬运(例如,描述符DMA搬运)、硬件解析、数据搬运(例如,数据DMA搬运)、描述符回收完成的。由于该传输流程较长,单次DMA的时延也较长(FPGA为了时序收敛,时钟频率受限,一次DMA请求的往返时延高达数百微秒),一旦某个传输队列或虚拟机用户业务流量突然增大,将表现为描述符创建、描述符回收激增。
在这种情况下,一方面,上位机驱动向FPGA发起大量通知事件,插入大量的描述符搬运请求;另一方面,FPGA向上位机发起大量中断事件,从而打断上位机驱动程序中其他逻辑的运行,以优先进行描述符回收操作。通知事件和中断事件的处理均会占用大量的逻辑、处理资源,进而影响整个异构平台的数据传输带宽。
因此,为了保证数据传输的带宽和稳定性,可以为异构平台引入事件抑制机制,以减少交互事件的数量。但由于异构平台中软硬两端的通信实现较复杂、成本较高,目前通常使用直接关闭通知事件与中断事件的方式,改由FPGA或上位机驱动主动获取对方的传输队列状态信息(如队列首指针、尾指针),进而判断自身是否应该执行描述符搬运或描述符回收操作。这种方案虽然能够解决插入的交互事件对FPGA逻辑与CPU线程资源的影响,但是对于上位机驱动,每个传输队列都需要增加一组轮询函数,占用PCIe总线带宽查询存储在FPGA的传输队列状态信息;对于FPGA则需要在描述符DMA获取过程中插入传输队列状态信息的DMA获取操作。而所有对DMA带宽的占用都会导致系统传输带宽的下降,因此,该方案仅适用于对传输带宽要求较低的异构系统场景,适用性较差。
本发明实施例提供一种事件抑制方法,设有事件抑制信息,基于该事件抑制信息可以确定是否需要向对端发送交互事件,从而可以可能减少插入事件的数量,避免因插入过多的事件而影响设备的逻辑资源或线程资源,在保证高密度数据传输基本功能的同时,尽可能降低其对系统性能的影响。
根据本发明实施例,提供了一种事件抑制方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
在本实施例中提供了一种事件抑制方法,可用于上位机或异构设备,该异构设备例如可以是GPU、FPGA、NPU等。为方便描述,将执行该方法的设备称为第一设备,将与该第一设备进行数据传输的设备成为第二设备;可以理解,该第一设备可以为上位机、第二设备为异构设备,或者,该第一设备可以为异构设备、第二设备为上位机。图1是根据本发明实施例的事件抑制方法的流程图,如图1所示,该流程包括以下步骤。
步骤S101,对描述符队列中的当前写位置执行写操作。
本实施例中,描述符队列是包括多个描述符的队列,其包括描述符地址和描述符长度;该描述符地址表示描述符在共享内存中的物理地址,该描述符地址一般由上位机操作系统分配;描述符长度表示该描述符指向的缓冲区大小,其单位为字节。例如,该描述符队列可以为多队列DMA传输技术中所使用的描述符队列。
其中,在上位机与异构设备之间基于该描述符队列实现数据传输时,上位机和异构设备均需要对该描述符队列进行写操作、读操作。具体地,若描述符队列中某个位置处需要写入描述符,则该位置为描述符队列中当前需要执行写操作的位置,即当前写位置,上位机可以创建描述符,并将创建的描述符写入至描述符队列的当前写位置;之后异构设备即可读取该描述符,并使用。异构设备在使用完毕后,也可对该当前写位置处的描述符执行写操作,以将该描述符的状态更新为已用。最后上位机读取状态为已用的描述符,实现对该描述符的回收。
可以理解,若第一设备为上位机,则该第一设备对描述符队列中的当前写位置执行写操作,具体可以为:向当前写位置写入描述符。若第一设备为异构设备,则该第一设备对描述符队列中的当前写位置执行写操作,具体可以为:将当前写位置处描述符的状态更新为表示已用。
步骤S102,读取事件抑制信息中的第一事件抑制项;由第二设备配置第一事件抑制项中的第一事件抑制条件。该第一事件抑制条件表示描述符队列中允许第一设备发起第一事件的写位置。
本实施例中,上位机与异构设备之间存在交互事件,该交互事件具体可以为通知事件或中断事件。具体地,上位机创建描述符后,可以向异构设备发起通知事件,使得异构设备可以读取新创建的描述符;异构设备在消耗描述符后,可以向上位机发起中断事件,使得上位机能够回收已被异构设备使用的描述符。
具体地,将第一设备向第二设备发起的交互事件称为第一事件,并且,将第二设备向第一设备发起的交互事件称为第二事件。可以理解,若第一设备为上位机、第二设备为异构设备,则该第一事件为通知事件,第二事件为中断事件;若第一设备为异构设备、第二设备为上位机,则该第一事件为中断事件,第二事件为通知事件。
本实施例中,除了设有描述符队列之外,还设有事件抑制信息,该事件抑制信息包括用于抑制第一事件的项目,即第一事件抑制项。其中,由于该第一事件是第一设备向第二设备发起的交互事件,其有可能影响第二设备的正常工作,故该第一事件抑制项由第二设备配置,即第二设备配置该事件抑制信息中的第一事件抑制项。例如,该事件抑制信息可以为表格形式的事件抑制表,该事件抑制表的一行即可表示该第一事件抑制项。
并且,该第一事件抑制项包括用于表示抑制第一事件的条件,即第一事件抑制条件,且该第一事件抑制条件表示描述符队列中允许第一设备发起第一事件的写位置。其中,第二设备可以基于自身需求设置该第一事件抑制条件。
步骤S103,在第一事件抑制项表示抑制第一事件的情况下,判断当前写位置与第一事件抑制条件是否相匹配。
本实施例中,第二设备需要抑制第一事件时,可以将第一事件抑制项表示为抑制第一事件;相反地,若第二设备不需要抑制第一事件,则可以将第一事件抑制项表示为不抑制第一事件。第一设备读取到该第一事件抑制项后,即可确定其是否表示抑制第一事件,若该第一事件抑制项表示不抑制第一事件,则第一设备正常向第二设备发起第一事件即可;例如,第一设备为上位机,其创建描述符后,即可向异构设备(即第二设备)发起通知事件。若第一事件抑制项表示抑制第一事件,则第一设备需要判断此时是否能够向第二设备发起该第一事件。
具体地,该第一事件抑制条件可以表示描述符队列中,允许第一设备发起第一事件的写位置。第一设备在判断是否能够向第二设备发起该第一事件时,即可判断此时执行写操作的当前写位置,与该第一事件抑制条件是否相匹配。
步骤S104,在当前写位置与第一事件抑制条件相匹配的情况下,向第二设备发起第一事件。
本实施例中,若当前写位置与第一事件抑制条件不匹配,则可说明第一设备执行的写操作所对应的当前写位置不符合该第一事件抑制条件,故此时不能向第二设备发起第一事件。若当前写位置与第一事件抑制条件相匹配,则可说明第一设备执行的写操作所对应的当前写位置符合该第一事件抑制条件,故此时可以向第二设备发起第一事件。
例如,描述符队列具有一定的队列深度;若该队列深度为D,则该描述符队列最多可以表示D个描述符。例如,队列深度为1024,第一事件抑制条件对应描述符队列的第500个位置,即第一设备在对该描述符队列中的前499个描述符进行写操作时,可以不发起第一事件,实现事件抑制;当第一设备对第500个描述符执行写操作时,此时的当前写位置与第一事件抑制条件相匹配,故此时第一设备可以向第二设备发起第一事件。
本实施例提供的事件抑制方法,由第二设备配置第一事件抑制项中的第一事件抑制条件,第一设备对描述符队列执行写操作时,基于该写操作所对应的当前写位置与第一事件抑制条件是否相匹配,确定是否能够向第二设备发起第一事件。基于该第一事件抑制条件能够实现对第一事件的抑制,有效避免因向第二设备插入过多的第一事件而影响第二设备的逻辑资源或线程资源;并且,不需要多次轮询,能够有效降低对DMA带宽的占用,能够应用于高速异构平台;第二设备可以主动配置该第一事件抑制条件,且可以配置该第一事件抑制项是否表示抑制第一事件,从而能够基于实际需求进行事件抑制,也能够保证数据传输的可靠性。
在本实施例中提供了一种事件抑制方法,可用于第一设备,该第一设备可以为上位机或异构设备。如图2所示,该流程包括以下步骤。
步骤S201,对描述符队列中的当前写位置执行写操作。
其中,详细请参见图1所示实施例的步骤S101,在此不再赘述。
步骤S202,读取事件抑制信息中的第一事件抑制项;由第二设备配置第一事件抑制项中的第一事件抑制条件。该第一事件抑制条件表示描述符队列中允许第一设备发起第一事件的写位置。其中,详细请参见图1所示实施例的步骤S102,在此不再赘述。
步骤S203,在第一事件抑制项表示抑制第一事件的情况下,判断当前写位置与第一事件抑制条件是否相匹配。
其中,详细请参见图1所示实施例的步骤S103,在此不再赘述。
在一些可选的实施方式中,异构平台中的设备设有相应的读指针和写指针。写指针即生产者指针,读指针即消费者指针。具体地,第一设备设有第一写指针和第一读指针,该第一写指针指向描述符队列中需要被第一设备执行写操作的位置,即当前写位置,该第一读指针指向描述符队列中需要被第一设备执行读操作的位置;相应地,第二设备设有第二写指针和第二读指针,该第二写指针指向描述符队列中需要被第二设备执行写操作的位置,即当前写位置,该第二读指针指向描述符队列中需要被第二设备执行读操作的位置。
此外可选地,异构平台中的设备还可以设有相应的读写翻转标志,在相应的指针从描述符队列的队尾移动至队首时,翻转标志发生变化,用于区分读写操作是否已遍历整个描述符队列。具体地,该第一设备设有第一写翻转标志和第一读翻转标志,在第一写指针从描述符队列的队尾移动至队首的情况下,第一写翻转标志发生变化;在第一读指针从描述符队列的队尾移动至队首的情况下,第一读翻转标志发生变化。并且,第二设备设有第二写翻转标志和第二读翻转标志,在第二写指针从描述符队列的队尾移动至队首的情况下,第二写翻转标志发生变化;在第二读指针从描述符队列的队尾移动至队首的情况下,第二读翻转标志发生变化。
一般情况下,读写翻转标志表示相应的读写操作是否发生翻转,其一般可以用一位(bit)数据表示该读写翻转标志。例如,第一写翻转标志初始为1,在第一写指针从描述符队列的队尾移动至队首时,该第一写翻转标志从1变为0;在第一写指针再次从描述符队列的队尾移动至队首时,该第一写翻转标志从0变为1,以此类推。其余的第一读翻转标志、第二写翻转标志、第二读翻转标志与此相次,此处不做赘述。
本实施例中,第一事件抑制条件可以包括第一事件抑制偏置;可以理解,该第一事件抑制偏置也是由第二设备配置的。其中,该第一事件抑制偏置表示在描述符队列中,需要抑制发起第一事件所对应的偏置量。
并且,第一设备执行的上述步骤S203“判断当前写位置与第一事件抑制条件是否相匹配”,具体可以包括以下步骤A1。
步骤A1,判断第一写指针与第一事件抑制偏置是否相匹配。
本实施例中,第一设备的第一写指针指向描述符队列中需要被第一设备执行写操作的位置,即当前写位置,故通过判断该第一写指针与第一事件抑制偏置是否相匹配,即可确定该当前写位置与第一事件抑制偏置是否相匹配,若二者相匹配,则可说明当前写位置与第二设备所设置的允许发起第一事件的位置相对应,故当前写位置与第一事件抑制条件相匹配,第一设备可以发起第一事件。
其中,该第二设备设置该第一事件抑制偏置时,可以确定需要第一设备暂停发送第一事件的抑制量,即第一抑制量,基于该第一抑制量和本地的第二读指针,设置所需的第一事件抑制偏置;即,该第一事件抑制偏置为第二设备根据第二读指针和需要第一设备暂停发送第一事件的第一抑制量而确定的。
可选地,在第二读指针与第一抑制量之和不超过描述符队列的队列深度的情况下,第一事件抑制偏置为:第二读指针+第一抑制量。在第二读指针与第一抑制量之和超过描述符队列的队列深度的情况下,第一事件抑制偏置为:(第二读指针+第一抑制量) mod队列深度;mod表示取模运算符。
本实施例中,该第一事件抑制偏置对应描述符队列中的某个位置,故可以基于该描述符队列的队列深度确定合适的第一事件抑制偏置。若第二读指针与第一抑制量之和不超过描述符队列的队列深度,此时说明第二读指针+第一抑制量仍然对应描述符队列中的某个位置,故可以将第二读指针+第一抑制量作为该第一事件抑制偏置。若第二读指针与第一抑制量之和超过描述符队列的队列深度,则说明第二读指针+第一抑制量超出了描述符队列,此时通过对其进行取余(即取模运算),使得最终确定的第一事件抑制偏置能够对应描述符队列中的某个位置。
例如,若描述符队列的队列深度为1024,第二设备的第二读指针为100,即其指向描述符队列中的第100个位置;若第二设备当前出现拥塞,则可以要求对端的第一设备暂停发送第一事件,且要求第一设备对描述符队列执行500次写操作后再发送第一事件,即第一设备暂停发送第一事件的第一抑制量为500。此时,第二读指针100+第一抑制量500=600,未超过队列深度1024,故该第一事件抑制偏置为600。若该第一抑制量为1000,则第二读指针100+第一抑制量1000=1100,超过了队列深度1024,故该第一事件抑制偏置为(100+1000)mod 1024 = 76。
可以理解,若第二读指针与第一抑制量之和不超过描述符队列的队列深度,该第一事件抑制偏置也可表示为(第二读指针+第一抑制量) mod 队列深度,其与第二读指针+第一抑制量相同,故第二设备可以直接将(第二读指针+第一抑制量) mod 队列深度作为第一事件抑制偏置。
本实施例中,第二设备可以主动设置第一事件抑制偏置,基于该第一事件抑制偏置可以抑制第一设备向第二设备发送的第一事件,从而在第二设备拥塞时主动减少第一事件的数量,减小因插入第一事件而对第二设备的影响。并且,第二设备基于第二读指针和自身所需的第一抑制量,可以方便地设置合适的第一事件抑制偏置,实现方式简单,不会增加第二设备的负担。
可选地,若第一设备设有第一写翻转标志,该第一事件抑制条件还可以包括第一事件抑制翻转标志;即第二设备还配置抑制该第一事件的翻转标志,即第一事件抑制翻转标志。并且,上述步骤S203“判断当前写位置与第一事件抑制条件是否相匹配”还包括步骤A2。
步骤A2,判断第一写翻转标志与第一事件抑制翻转标志是否相匹配。
本实施例中,由于队列深度有限,为了能够满足更大的抑制需求,即能够设置大于队列深度的抑制量(第一抑制量),第一设备设置上述的第一写翻转标志,且第二设备为第一事件抑制条件设置第一事件抑制翻转标志。若第一写翻转标志与第一事件抑制翻转标志相匹配,则说明第一设备当前的第一写指针可能能够符合要求;若第一写翻转标志与第一事件抑制翻转标志不匹配,无论第一写指针与第一事件抑制偏置是否相匹配,第一设备均不能发起第一事件,即需要抑制该第一事件。
即,第一设备在判断是否能够向第二设备发起第一事件时,需要判断第一写指针与第一事件抑制偏置是否相匹配,以及第一写翻转标志与第一事件抑制翻转标志是否相匹配,只有在第一写指针与第一事件抑制偏置相匹配,且第一写翻转标志与第一事件抑制翻转标志相匹配的情况下,第一设备才可以发起第一事件。
例如,第一写翻转标志和第一事件抑制翻转标志均为一位的标志位,其取值为0或1。若第一写翻转标志与第一事件抑制翻转标志相等,即二者均为0或均为1,则可认为二者相匹配。
可选地,第二设备设有第二读翻转标志,其基于该第二读翻转标志设置合适的第一事件抑制翻转标志。具体地,该第一事件抑制翻转标志是在第二读翻转标志的基础上翻转M次生成的;M=(第二读指针+第一抑制量) / 队列深度;/表示取商运算符。
本实施例中,基于第二读指针+第一抑制量与队列深度之间的大小关系,确定翻转次数M,且M=(第二读指针+第一抑制量) / 队列深度。可以理解,若第二读指针+第一抑制量小于该队列深度,则M=0,即不需要翻转;若第二读指针+第一抑制量大于队列深度,则M为大于0的整数,需要翻转。一般情况下,该翻转次数M的取值为0、1或2。例如,该第一事件抑制量,不能超过队列深度的2倍或3倍。
例如,若第二读翻转标志为1,且M=0,则不需要翻转,此时将第一事件抑制翻转标志也设为1;若M=1,则需要翻转一次,即第二读翻转标志从1翻转为0,该第一事件抑制翻转标志也设为0;若M=2,则需要翻转两次,即第二读翻转标志从1翻转为0,再翻转为1,故该第一事件抑制翻转标志也设为1。
可选地,该第一事件抑制项还包括第一事件抑制使能。该第一事件抑制使能用于确定第一事件抑制项是否表示抑制第一事件,以在第一事件抑制项表示抑制第一事件的情况下,执行判断当前写位置与第一事件抑制条件是否相匹配的步骤,即执行上述步骤S203。其中,在第一事件抑制使能为第一数值的情况下,确定第一事件抑制项表示抑制第一事件;在第一事件抑制使能为第二数值的情况下,确定第一事件抑制项表示不抑制第一事件。
本实施例中,该第一事件抑制使能也可以是一位二进制数,其取值为0或1;将其中一个数值表示抑制第一事件,即抑制使能,另一数值表示不抑制第一事件,即抑制不使能。例如,第一数值为1,第二数值为0。该第一事件抑制使能的初始值为0,即不抑制第一事件;若第二设备当前需要抑制第一事件,则可将该第一事件抑制使能设为1,此时第一设备即可基于第一事件抑制偏置、第一事件抑制翻转标志等确定何时可以发起第一事件。
其中,该第一事件抑制项具有一定的有效次数,当第一设备基于该第一事件抑制项实现了有效次数的抑制后,即可将该第一事件抑制项更新为表示不抑制第一事件。具体地,若第一事件抑制项表示抑制第一事件,且第一设备向第二设备发起预设数量的第一事件之后,则可以将第一事件抑制项更新为表示不抑制第一事件,例如,将第一事件抑制使能从1更新为0。其中,该预设数量即为该第一事件抑制项的有效次数;例如,该预设数量默认为1,即第一设备基于该第一事件抑制项发起了第一事件后,该第一事件抑制项即可失效,其第一事件抑制使能即可从1更新为0。
本实施例中,为第一事件抑制条件设置第一事件抑制翻转标志,可以使得在队列深度不变的情况下,第二设备能够设置更大的第一抑制量,可以满足第二设备更多的抑制需求。基于第一事件抑制使能,也可以方便地表示当前是否需要对第一事件进行抑制,实现方式简单。
步骤S204,在当前写位置与第一事件抑制条件相匹配的情况下,向第二设备发起第一事件。
其中,详细请参见图1所示实施例的步骤S104,在此不再赘述。
步骤S205,在需要抑制第二事件的情况下,配置事件抑制信息的第二事件抑制项中的第二事件抑制条件;第二事件抑制条件用于在与第二设备对描述符队列执行写操作的位置相匹配的情况下,允许第二设备向第一设备发起第二事件。
本实施例中,如上所述,第一设备可以向第二设备发起第一事件,相应地,第二设备也可以向第一设备发起相应的交互事件,即第二事件。并且,与第二设备配置第一事件抑制条件相似,该第一设备也可以配置用于抑制第二事件的第二事件抑制条件,即第二设备能够向第一设备发起交互事件的条件,以确定第二设备何时可以向第一设备发起第二事件。具体地,该事件抑制信息除了包括第一事件抑制项之外,还可以包括第二事件抑制项,该第二事件抑制项包括上述的第二事件抑制条件。
可以理解,与上述的第一事件抑制条件相似,该第二事件抑制条件用于在与第二设备对描述符队列执行写操作的位置相匹配的情况下,允许第二设备向第一设备发起第二事件;具体地,第二设备对描述符队列执行写操作时,可以判断该写操作的位置与第二事件抑制条件是否相匹配,在二者相匹配时才可以向第一设备发起第二事件。
在一些可选的实施方式中,该第一设备设有第一读指针,第二设备设有第二写指针,第二写指针指向描述符队列中需要被第二设备执行写操作的位置。第二事件抑制条件包括第二事件抑制偏置,第一设备基于该第一读指针设置所需的第二事件抑制偏置。
具体地,上述步骤S205“配置事件抑制信息的第二事件抑制项中的第二事件抑制条件”可以包括以下步骤B1至步骤B2。
步骤B1,确定需要第二设备暂停发送第二事件的第二抑制量。
本实施例中,第一设备发现本地拥塞时,可以基于拥塞程度确定对第二事件的抑制程度,即第二抑制量。
步骤B2,根据第一读指针和第二抑制量,确定第二事件抑制偏置;第二事件抑制偏置用于在与第二写指针相匹配的情况下,允许第二设备向第一设备发起第二事件。
本实施例中,与第二设备设置第一事件抑制偏置的过程相似,该第一设备可以根据本地的第一读指针以及所需的第二抑制量,设置合适的第二事件抑制偏置;当第二设备对描述符队列执行写操作时,需要读取第二事件抑制项中的第二事件抑制条件,以确定其第二写指针与该第二事件抑制偏置是否相匹配,从而确定是否可以向第一设备发起第二事件。
可选地,上述步骤B2“根据第一读指针和第二抑制量,确定第二事件抑制偏置”包括以下步骤B21至步骤B22。
步骤B21,在第一读指针与第二抑制量之和不超过描述符队列的队列深度的情况下,第二事件抑制偏置为:第一读指针+第二抑制量。
步骤B22,在第一读指针与第二抑制量之和超过描述符队列的队列深度的情况下,第二事件抑制偏置为:(第一读指针+第二抑制量) mod 队列深度;mod表示取模运算符。
本实施例中,与上述的第一事件抑制偏置相似,该第二事件抑制偏置对应描述符队列中的某个位置,故可以基于该描述符队列的队列深度确定合适的第二事件抑制偏置。若第一读指针与第二抑制量之和不超过描述符队列的队列深度,此时说明第一读指针+第二抑制量仍然对应描述符队列中的某个位置,故可以将第一读指针+第二抑制量作为该第二事件抑制偏置。若第一读指针与第二抑制量之和超过描述符队列的队列深度,则说明第一读指针+第二抑制量超出了描述符队列,此时通过对其进行取余(即取模运算),使得最终确定的第二事件抑制偏置能够对应描述符队列中的某个位置。
例如,若描述符队列的队列深度为1024,第一设备的第一读指针为100,即其指向描述符队列中的第100个位置;若第一设备当前出现拥塞,则可以要求对端的第二设备暂停发送第二事件,且要求第二设备对描述符队列执行500次写操作后再发送第二事件,即第二设备暂停发送第二事件的第二抑制量为500。此时,第一读指针100+第二抑制量500=600,未超过队列深度1024,故该第二事件抑制偏置为600。若该第二抑制量为1000,则第一读指针100+第二抑制量1000=1100,超过了队列深度1024,故该第二事件抑制偏置为(100+1000)mod 1024 = 76。
可以理解,若第一读指针与第二抑制量之和不超过描述符队列的队列深度,该第二事件抑制偏置也可表示为(第一读指针+第二抑制量) mod 队列深度,其与第一读指针+第二抑制量相同,故第一设备可以直接将(第一读指针+第二抑制量) mod 队列深度,作为第二事件抑制偏置。
本实施例中,第一设备可以主动设置第二事件抑制偏置,基于该第二事件抑制偏置可以抑制第二设备向第一设备发送的第二事件,从而在第一设备拥塞时主动减少第二事件的数量,减小因插入第二事件而对第一设备的影响。并且,第一设备基于第一读指针和自身所需的第二抑制量,可以方便地设置合适的第二事件抑制偏置,实现方式简单,不会增加第一设备的负担。
可选地,该第一设备还设有第一读翻转标志,第二设备还设有第二写翻转标志;第二事件抑制条件还包括第二事件抑制翻转标志;即第一设备还配置抑制该第二事件的翻转标志,即第二事件抑制翻转标志。并且,上述步骤S205“配置事件抑制信息的第二事件抑制项中的第二事件抑制条件”还包括以下步骤B3。
步骤B3,在第一读翻转标志的基础上翻转N次,生成第二事件抑制翻转标志;N=(第一读指针+第二抑制量) / 队列深度;第二事件抑制翻转标志用于在与第二写翻转标志相匹配的情况下,允许第二设备向第一设备发起第二事件。
本实施例中,第一设备基于其本地的第一读翻转标志设置合适的第二事件抑制翻转标志。具体地,由于队列深度有限,为了能够满足第一设备更大的抑制需求,即能够设置大于队列深度的抑制量(第二抑制量),第一设备为第二事件抑制条件设置第二事件抑制翻转标志。第二设备执行写操作时,若其第二写翻转标志与第二事件抑制翻转标志相匹配,则说明第二设备当前的第二写指针可能能够符合要求;若第二写翻转标志与第二事件抑制翻转标志不匹配,无论第二写指针与第二事件抑制偏置是否相匹配,第二设备均不能发起第二事件,即需要抑制该第二事件。
即,第二设备在判断是否能够向第一设备发起第二事件时,需要判断第二写指针与第二事件抑制偏置是否相匹配,以及第二写翻转标志与第二事件抑制翻转标志是否相匹配,只有在第二写指针与第二事件抑制偏置相匹配,且第二写翻转标志与第二事件抑制翻转标志相匹配的情况下,第二设备才可以发起第二事件。
例如,第二写翻转标志和第二事件抑制翻转标志均为一位的标志位,其取值为0或1。若第二写翻转标志与第二事件抑制翻转标志相等,即二者均为0或均为1,则可认为二者相匹配。
具体地,第一设备基于第一读指针+第二抑制量与队列深度之间的大小关系,确定翻转次数N,且N=(第一读指针+第二抑制量) / 队列深度。可以理解,若第一读指针+第二抑制量小于该队列深度,则N=0,即不需要翻转;若第一读指针+第二抑制量大于队列深度,则N为大于0的整数,需要翻转。一般情况下,该翻转次数N的取值为0、1或2。例如,该第二事件抑制量,不能超过队列深度的2倍或3倍。
例如,若第一读翻转标志为1,且N=0,则不需要翻转,此时将第二事件抑制翻转标志也设为1;若N=1,则需要翻转一次,即第一读翻转标志从1翻转为0,该第二事件抑制翻转标志也设为0;若N=2,则需要翻转两次,即第一读翻转标志从1翻转为0,再翻转为1,故该第二事件抑制翻转标志也设为1。
可选地,该第二事件抑制项还包括第二事件抑制使能。该方法还包括:根据是否需要抑制第二事件,配置第二事件抑制项中的第二事件抑制使能。其中,该第二事件抑制使能用于确定第二事件抑制项是否表示抑制第二事件,以在第二事件抑制项表示抑制第二事件,且第二设备对描述符队列执行写操作的位置与第二事件抑制条件相匹配的情况下,允许第二设备向第一设备发起第二事件。
具体地,在需要抑制第二事件的情况下,第一设备可以将第二事件抑制使能设置第三数值,第三数值表示抑制第二事件;在不需要抑制第二事件的情况下,将第二事件抑制使能设置第四数值,第四数值表示不抑制第二事件。
本实施例中,与上述的第一事件抑制使能相似,该第二事件抑制使能也可以是一位二进制数,其取值为0或1;将其中一个数值表示抑制第二事件,即抑制使能,另一数值表示不抑制第二事件,即抑制不使能。例如,第三数值为1,第四数值为0。该第二事件抑制使能的初始值为0,即不抑制第二事件;若第一设备当前需要抑制第二事件,则可将该第二事件抑制使能设为1,此时第二设备即可基于第二事件抑制偏置、第二事件抑制翻转标志等确定何时可以发起第二事件。其中,该第三数值与上述的第一数值可以相同,第四数值与上述的第二数值可以相同。
其中,该第二事件抑制项具有一定的有效次数,当第二设备基于该第二事件抑制项实现了有效次数的抑制后,即可将该第二事件抑制项更新为表示不抑制第二事件。具体地,若第二事件抑制项表示抑制第二事件,且第二设备向第一设备发起预设数量的第二事件之后,则可以将第二事件抑制项更新为表示不抑制第二事件,例如,将第二事件抑制使能从1更新为0。其中,该预设数量即为该第二事件抑制项的有效次数;例如,该预设数量默认为1,即第二设备基于该第二事件抑制项发起了第二事件后,该第二事件抑制项即可失效,其第二事件抑制使能即可从1更新为0。
本实施例中,第一设备为第二事件抑制条件设置第二事件抑制翻转标志,可以使得在队列深度不变的情况下,第一设备能够设置更大的第二抑制量,可以满足第一设备更多的抑制需求。基于第二事件抑制使能,也可以方便地表示当前是否需要对第二事件进行抑制,实现方式简单。
在本实施例中提供了一种事件抑制方法,可用于第一设备,该第一设备可以为上位机或异构设备。如图3所示,该流程包括以下步骤。
步骤S301,对描述符队列中的当前写位置执行写操作。
其中,详细请参见图1所示实施例的步骤S101,在此不再赘述。
本实施例中,对于不同的第一设备,其所执行的写操作略有区别。具体地,若
在第一设备为上位机、第二设备为异构设备的情况下,第一设备所执行的写操作,具体为:向当前写位置写入可用的描述符。在第一设备为异构设备、第二设备为上位机的情况下,第一设备所执行的写操作,具体为:向当前写位置写入已用的描述符。
步骤S302,读取事件抑制信息中的第一事件抑制项;由第二设备配置第一事件抑制项中的第一事件抑制条件。该第一事件抑制条件表示描述符队列中允许第一设备发起第一事件的写位置。其中,详细请参见图1所示实施例的步骤S102,在此不再赘述。
步骤S303,在第一事件抑制项表示抑制第一事件的情况下,判断当前写位置与第一事件抑制条件是否相匹配。
其中,详细请参见图1所示实施例的步骤S103,或者图2所示实施例的步骤S203,在此不再赘述。
步骤S304,在当前写位置与第一事件抑制条件相匹配的情况下,向第二设备发起第一事件。
其中,详细请参见图1所示实施例的步骤S104,在此不再赘述。
步骤S305,对描述符队列中的当前读位置执行读操作。
具体地,上述步骤S305“对描述符队列中的当前读位置执行读操作”,具体包括:在第一设备为上位机、第二设备为异构设备的情况下,若当前读位置处的描述符已用但未被回收,回收当前读位置处的描述符。在第一设备为异构设备、第二设备为上位机的情况下,若当前读位置处的描述符可用但未被用,读取当前读位置处的描述符。
本实施例中,第一设备对描述符队列中的某个位置既可以执行写操作,也可以执行读操作。其中,对于描述符队列中的某个位置,若第一设备为上位机,则第一设备可以先对该位置进行写操作,之后再对其进行读操作;若第一设备为异构设备,则第一设备可以先对该位置进行读操作,之后再对其进行写操作。
其中,若第一设备为上位机、第二设备为异构设备,上位机执行的读操作具体为回收当前读位置处的描述符;若第一设备为异构设备、第二设备为上位机,异构设备执行的读操作具体为读取当前读位置处的描述符。
例如,异构平台包括上位机和FPGA,且第一设备为上位机,第二设备为FPGA,该异构平台的原理可参见图4所示。如图4所示,上位机设有第一写指针和第一读指针,FPGA设有第二写指针和第二读指针。其中,上位机侧的第一写指针可以指示描述符队列中,上位机驱动下一次将写入可用描述符的位置,第一读指针表示上位机驱动下一次将回收已用描述符的位置;FPGA侧的第二读指针可以指示描述符队列中,设备下一次将获取可用描述符的位置,第二写指针可以指示设备下一次将写入已用描述符的位置。
并且,上位机发起用于抑制中断事件的中断抑制,即第二事件抑制条件,并设置事件抑制信息中的第二事件抑制项;FPGA可以获取该第二事件抑制项中的中断机制,基于该中断机制确定何时向上位机发起中断事件(即第二事件)。同样地,FPGA可以发起用于抑制通知事件的通知抑制,即第一事件抑制条件,并设置事件抑制信息中的第一事件抑制项;上位机可以获取该第一事件抑制项中的通知机制,基于该通知机制确定何时向FPGA发起通知事件(即第一事件)。其中,该上位机和FPGA中的读/写翻转标志,可以作为判断描述符是否可用、事件抑制是否应该触发的依据。
具体地,以图4所示的结构为例,该异构平台的工作过程具体可参见图5所示。如图5所示,该异构平台的工作过程包括以下步骤。
步骤S501,上位机创建新的可用描述符,并在第一写指针所指向的描述符队列中的当前写位置写入该可用描述符。
步骤S502,FPGA的第二读指针指向该可用描述符时,FPGA读取该可用描述符。
步骤S503,FPGA基于读取到的可用描述符,执行硬件解析、数据搬运等处理过程。
其中,可以基于DMA实现数据搬运,此处不作详述。其中,FPGA消耗该可用描述符后,该可用描述符即可变为已用描述符。
步骤S504,FPGA的第二写指针指向该可用描述符所对应的位置时,FPGA向描述符队列中的该位置写入已用描述符。
可以理解,若FPGA为第一设备,此时该可用描述符所对应的位置,即为当前写位置。其中,FPGA可以写入新的描述符,或者,FPGA也可以改变该可用描述符的状态,将其从可用状态更新为已用状态,从而完成写入已用描述符的写操作。
步骤S505,上位机的第一读指针指向该已用描述符时,上位机回收该已用描述符。
例如,上位机可以删除描述符队列中的该已用描述符;或者,上位机也可以将该已用描述符的状态更新为已回收,以表示后续可以继续向该位置写入新的可用描述符。
步骤S506,上位机需要抑制中断事件时,可以发起中断抑制,以更新事件抑制信息中的第二事件抑制项。
具体地,将中断事件作为第二事件,上位机可以基于当前的第一读指针、第一抑制量和第一读翻转标志等,确定第二事件抑制偏置和第二事件抑制翻转标志,从而确定相应的第二事件抑制项。
步骤S507,FPGA执行写操作时,获取该中断抑制。
例如,FPGA执行上述步骤S504时,可以获取该中断抑制。
步骤S508,若FPGA当前写操作的位置与中断抑制相匹配,则可以向上位机发起中断事件。
具体地,FPGA基于本地的第二写指针和第二写翻转标志,确定其与中断抑制是否相匹配,即判断与第二事件抑制项是否相匹配。在相匹配的情况下,即可以向上位机发起中断事件。
此外,可以理解,若第二事件抑制项当前并不表示需要抑制第二事件,例如第二事件抑制使能为0,则FPGA可以直接向上位机发送中断事件,不需要判断是否与该中断抑制相匹配。
步骤S509,FPGA需要抑制通知事件时,可以发起通知抑制,以更新事件抑制信息中的第一事件抑制项。
具体地,将通知事件作为第一事件,FPGA可以基于当前的第二读指针、第二抑制量和第二读翻转标志等,确定第一事件抑制偏置和第一事件抑制翻转标志,从而确定相应的第一事件抑制项。
步骤S510,上位机执行写操作时,获取该通知抑制。
例如,上位机执行上述步骤S501时,可以获取该通知抑制。
步骤S511,若上位机当前写操作的位置与通知抑制相匹配,则可以向FPGA发起通知事件。
具体地,上位机基于本地的第一写指针和第一写翻转标志,确定其与通知抑制是否相匹配,即判断与第一事件抑制项是否相匹配。在相匹配的情况下,即可以向FPGA发起通知事件。
此外,可以理解,若第一事件抑制项当前并不表示需要抑制第一事件,例如第一事件抑制使能为0,则上位机可以直接向FPGA发送通知事件,不需要判断是否与该通知抑制相匹配。
本实施例中,描述符队列和事件抑制信息可以由其中一个设备维护,例如第一设备。例如,如图4所示,在上位机为主体的异构系统中,可以由上位机维护描述符队列和事件抑制信息,FPGA等异构设备可以基于DMA读取该描述符队列和事件抑制信息。
在一些可选的实施方式中,描述符队列除了包括描述符地址和描述符长度之外,还包括:用于指示描述符当前状态的老化标志;其中,该当前状态包括:已用但未被回收,可用但未被用等。
具体地,该方法还包括以下步骤C1。
步骤C1,根据当前读位置处描述符的老化标志确定当前读位置处描述符的当前状态。
本实施例中,第一设备和第二设备可以基于实际情况更新该老化标志。并且,第一设备对当前读位置执行读操作时,基于该老化标志确定该当前读位置处描述符的当前状态。具体地,在第一设备为上位机、第二设备为异构设备的情况下,第一设备基于该老化标志确定当前读位置处的描述符是否已用但未被回收;在第一设备为异构设备、第二设备为上位机的情况下,第一设备基于该老化标志确定当前读位置处的描述符是否可用但未被用。
可选地,该老化标志至少包括两位,第一设备和第二设备可以分别设置其中的一位。具体地,该老化标志可以包括第一位和第二位。例如,老化标志是2 bit的数据,其中的高位为第一位,低位为第二位。
并且,该当前状态还包括:已被回收;上述步骤S301“对描述符队列中的当前写位置执行写操作”具体可以包括步骤D1至步骤D2。
步骤D1,在第一设备为上位机、第二设备为异构设备的情况下,若当前写位置处的描述符已被回收,向当前写位置写入可用的描述符,并将相应老化标志更新为可用但未被用。
本实施例中,上位机向描述符队列中写入的描述符,是可供异构设备使用的描述符,即该描述符是可用描述符。当上位机需要向描述符队列写入新的描述符时,需要先确定当前写位置对应的描述符是否已被回收,即上位机是否已对该描述符进行了读操作;若该描述符的状态是已被回收,则表示上位机可以进行写操作,即写入新的可用描述符。并且,上位机可以将该可用描述符对应的老化标志标记为表示可用,具体为可用但未被用。
可选地,如上所述,第一设备设有第一写指针和第一写翻转标志;可以基于该第一写翻转标志确定合适的老化标志。具体地,上述步骤D1“将相应老化标志更新为可用但未被用”包括以下步骤D11。
步骤D11,将相应老化标志的第一位更新为第一写翻转标志。
本实施例中,并不使用某个固定数值表示描述符是否可用,上位机利用会发生翻转的第一写翻转标志确定该老化标志的第一位。例如,若第一写翻转标志当前为1,则将老化标志的第一位也设为1,若第一写翻转标志当前为0,则将老化标志的第一位也设为0。
步骤D2,在第一设备为异构设备、第二设备为上位机的情况下,将当前写位置处描述符的老化标志更新为已用但未被回收。
本实施例中,异构设备向描述符队列中的描述符执行写操作,实质上是将该描述符标记为已用,即异构设备已消耗该描述符。具体地,异构设备可以将该描述符对应的老化标志标记为表示已用,即将老化标志的第二位更新为表示已用,从而表示可用的描述符已变为已用的描述符。
可选地,上述步骤D2“将当前写位置处描述符的老化标志更新为已用但未被回收”可以包括以下步骤D21。
步骤D21,将当前写位置处描述符的老化标志的第二位更新为第一写翻转标志。
本实施例中,与上述步骤D11相似,也不将某个固定数值表示描述符是否已用,异构设备利用会发生翻转的第一写翻转标志确定该老化标志的第二位。例如,若第一写翻转标志当前为1,则将老化标志的第二位也设为1,若第一写翻转标志当前为0,则将老化标志的第二位也设为0。
可以理解,上位机或异构设备更新该老化标志时,均基于第一写翻转标志更新老化标志相应的第一位、第二位。如上述步骤D11所示,当上位机更新老化标志的第一位时,老化标志的第二位保持不变,此时可以使得老化标志的第一位、第二位不同;例如,更新后的老化标志为10B或01B。并且,如上述步骤D21所示,当异构设备更新老化标志的第二位时,老化标志的第一位保持不变,此时可以使得老化标志第一位、第二位相同;例如,更新后的老化标志为11B或00B。
可选地,若基于写翻转标志设置老化标志,相应地,可以基于读翻转标志与该老化标志进行对比,以确定描述符的当前状态。具体地,第一设备设有第一读指针和第一读翻转标志;上述步骤C1“根据当前读位置处描述符的老化标志确定当前读位置处描述符的当前状态”具体可以包括以下步骤C11至步骤C12。
步骤C11,在第一设备为上位机、第二设备为异构设备的情况下,若当前读位置处描述符的老化标志的第一位与第二位相同,且第一读翻转标志与当前读位置处描述符的老化标志的第二位相匹配,确定当前读位置处的描述符已用但未被回收。
本实施例中,若第一设备为上位机、第二设备为异构设备,上位机需要对当前读位置执行读操作时,可以确定该当前读位置处描述符的老化标志,若该老化标志的第一位与第二位不同,则表示该当前读位置的描述符还未被异构设备使用,故上位机不可以执行读操作。若该老化标志的第一位与第二位相同,则可说明该当前读位置的描述符已被异构设备使用,此时上位机可以继续判断当前的第一读翻转标志与老化标志的第二位是否相匹配。
若第一读翻转标志与老化标志的第二位相匹配,则说明该描述符还未被回收,即当前读位置处的描述符已用但未被回收,故此时上位机可以对该描述符进行读操作,以回收该描述符。若第一读翻转标志与老化标志的第二位不匹配,则说明该描述符已被回收,上位机不需要再执行读操作。
步骤C12,在第一设备为异构设备、第二设备为上位机的情况下,若当前读位置处描述符的老化标志的第一位与第二位不同,且第一读翻转标志与当前读位置处描述符的老化标志的第一位相匹配,确定当前读位置处的描述符可用但未被用。
本实施例中,若第一设备为异构设备、第二设备为上位机,异构设备需要对当前读位置执行读操作时,可以确定该当前读位置处描述符的老化标志,若该老化标志的第一位与第二位相同,则表示该当前读位置的描述符不可用,例如该描述符已被回收,故异构设备不可以执行读操作。若该老化标志的第一位与第二位不同,则可说明该当前读位置的描述符是可用的,此时异构设备可以继续判断当前的第一读翻转标志与老化标志的第二位是否相匹配。
若第一读翻转标志与老化标志的第二位相匹配,则说明该描述符还未被使用,即当前读位置处的描述符可用但未被用,故此时异构设备可以对该描述符进行读操作,以读取并消耗该描述符。若第一读翻转标志与老化标志的第二位不匹配,则说明该描述符已被使用,异构设备不需要再执行读操作。
此外,上述步骤S301“对描述符队列中的当前写位置执行写操作”还可以包括步骤D3。
步骤D3,在第一设备为上位机、第二设备为异构设备的情况下,若当前写位置处描述符的老化标志的第一位与第二位相同,且第一写翻转标志与当前写位置处描述符的老化标志的第二位不相匹配,确定当前写位置处的描述符已被回收。
本实施例中,若第一设备为上位机、第二设备为异构设备,且第一设备(即上位机)需要执行写操作时,可以基于该当前写位置处的老化标志是否表示该描述符已被回收。具体地,若当前写位置处描述符的老化标志的第一位与第二位相同(例如,老化标志为00B或11B),并且,此时上位机的第一写翻转标志与当前写位置处描述符的老化标志的第二位不相匹配,即二者不同,此时可以确定该当前写位置处的描述符已被异构设备使用,且上位机的第一写指针已发生了翻转,此时上位机可以对该当前写位置写入新的描述符,即执行步骤D1。
本实施例中,以包含第一位和第二位的老化标志表示描述符的当前状态,且上位机和异构设备基于本地的写翻转标志设置该老化标志,可以简单区分描述符的多种状态。
以上位机与FPGA进行数据传输为例,其中,老化标志为2比特(bit),且老化标志的高位为第一位,低位为第二位。若老化标志为10B或01B(其中的B表示二进制),且FPGA读取该描述符时FPGA的读翻转标志与老化标志的高位相等,则可以判断该描述符为可用且尚未被使用;若老化标志为10B或01B,但FPGA读取该描述符时的读翻转标志与老化标志的高位不相等,则判断该描述符为已被使用。若老化标志为00B或11B,且上位机读取该描述符时上位机的读翻转标志与老化标志的低位相等(其中,由于此时老化标志的高位和低位相同,故也可以判断上位机的读翻转标志与老化标志的高位是否相等),则判断该描述符已被使用但尚未回收;若老化标志为00B或11B,但上位机读取该描述符时上位机的读翻转标志与老化标志的低位相反,则判断该描述符已被使用且已被回收,上位机可以对该描述符进行写操作,即写入新的描述符。
为方便理解,下面以队列深度为4的描述符队列为例,结合图4所示的上位机和FPGA构成的异构平台,解释说明实现事件抑制的详细过程。
本实施例中,如图4所示,上位机和FPGA均设有相应的读写指针和读写翻转标志。在初始情况下,上位机和FPGA的读写翻转标志均为1,老化标志为00B。其中,上位机为第一设备,FPGA为第二设备。
在初始时刻,描述符队列为空,上位机的第一写指针、第一读指针,以及FPGA的第二读指针、第二写指针均指向该描述符队列的第一个位置。若在某个时刻,上位机创建三个可用描述符,且尚未被FPGA获取使用。如图6所示,上位机创建了描述符地址分比为8010H、8020H、8030H(H表示十六进制)的三个描述符,描述符长度均为10H;并且,由于此时第一写翻转标志为1,故将老化标志的高位设为1,该老化标志为10B(B表示二进制)。
并且,若此时上位机和FPGA均不需要启用事件抑制功能,则事件抑制信息中的两个事件抑制项(即第一事件抑制项和第二事件抑制项)均为初始状态。如图6所示,事件抑制信息具体为事件抑制表,其第一行表示第一事件抑制项、第二行表示第二事件抑制项,且其中的事件抑制使能、事件抑制偏置、事件抑制翻转标志初始均为0。由于此时事件抑制功能未启用,每当上位机创建新的描述符或FPGA消耗描述符,均需要向对端发起通知事件或中断事件。即,上位机创建图6所示的每个描述符时,均可向FPGA发起通知事件。
在上位机创建描述符后,FPGA读取这些可用的描述符。如图7所示,FPGA读取描述符队列中的第一个和第二个描述符后,其第二读指针移动至第三个描述符位置处。此时,若FPGA发现本地出现拥塞,则可以要求上位机暂停发送通知事件,直到上位机再次创建7个可用描述符,即第一抑制量为7。此时,FPGA可以根据本地的第二读指针、第二读翻转标志计算并写入第一事件抑制项中各个字段的值。
事件抑制使能:置1。
事件抑制偏置:(第二读指针+第一抑制量) mod 队列深度,即(2+7) mod 4 = 1。
事件抑制翻转标志:(第二读指针+第一抑制量) / 队列深度,即(2+7)/4=2,即在第二读翻转标志(即1)的基础上翻转两次,故事件抑制翻转标志为1。
这样,上位机每创建一个可用描述符,若本地的第一写指针、第一写翻转标志与该第一事件抑制项各字段相匹配,则可以向FPGA发送通知事件,否则通知事件被抑制。
并且,FPGA读取这些描述符后,可以对这些描述符进行写操作,已将老化标志更新为已用。具体地,此时FPGA的第二写翻转标志为1,故可以将老化标志的低位设为1,老化标志更新为11B。若FPGA对三个已用描述符均执行了读操作和写操作,其第二读指针和第二写指针可参见图8所示。
此外,若上位机回收第一个和第二个描述符后,发现本地出现拥塞,则可以要求FPGA暂停发送中断事件,直到FPGA再次写入3个已用描述符(即第二抑制量为3)。此时,上位机驱动根据本地的第一读指针、第一读翻转标志计算并写入第二事件抑制项中各个字段的值。
事件抑制使能:置1。
事件抑制偏置:(第一读指针+第二抑制量) mod 队列深度,即(2+3) mod 4 = 1。
事件抑制翻转标志:(第一读指针+第二抑制量) / 队列深度,即(2+3)/4=1,即在第一读翻转标志(即1)的基础上翻转一次,故事件抑制翻转标志为0。
之后,FPGA每写入一个已用描述符,若本地的第二写指针、第二写翻转标志与第二事件抑制项各字段匹配,则可以向上位机发送中断事件,否则中断事件被抑制。
本实施例提供的事件抑制方法,基于事件抑制信息实现对中断事件、通知事件的抑制,不需要占用过多的带宽,在尽可能减少事件插入对上位机中断服务资源占用和对系统传输带宽的影响的同时,保证了描述符传输与回收时效性。该事件抑制信息可以由上位机、异构设备通过共享内存配合完成,中断事件与通知事件抑制独立运行互不影响,具有较强的稳定性。通过对端发起、本端执行、双端相互配合的事件抑制方式,事件抑制量可根据流控要求动态设计,最大限度减少数据包时效性损失。并且,该事件抑制信息可以添加至多种开发框架的异构平台中,具有较强的通用性、可移植性。
本实施例提供一种异构平台,如图9所示,该异构平台包括上位机901和异构设备902。其中,该上位机901可以作为第一设备,执行上述实施例提供的事件抑制方法,该异构设备902也可以作为第一设备,执行上述实施例提供的事件抑制方法,实现对中断事件和通知事件的抑制。
在本实施例中还提供了一种事件抑制装置,应用于第一设备,如图10所示,包括:
写操作模块1001,用于对描述符队列中的当前写位置执行写操作;
读取模块1002,用于读取事件抑制信息中的第一事件抑制项;由第二设备配置所述第一事件抑制项中的第一事件抑制条件;所述第一事件抑制条件表示描述符队列中允许所述第一设备发起第一事件的写位置;
判断模块1003,用于在所述第一事件抑制项表示抑制第一事件的情况下,判断所述当前写位置与所述第一事件抑制条件是否相匹配;
抑制模块1004,用于在所述当前写位置与所述第一事件抑制条件相匹配的情况下,向所述第二设备发起所述第一事件。
在一些可选的实施方式中,所述第一设备设有第一写指针,所述第一写指针指向所述描述符队列中需要被所述第一设备执行写操作的位置;所述第一事件抑制条件包括第一事件抑制偏置;所述判断模块1003判断所述当前写位置与所述第一事件抑制条件是否相匹配,包括:判断所述第一写指针与所述第一事件抑制偏置是否相匹配。
在一些可选的实施方式中,所述第二设备设有第二读指针,所述第二读指针指向所述描述符队列中需要被所述第二设备执行读操作的位置;所述第一事件抑制偏置为所述第二设备根据所述第二读指针和需要所述第一设备暂停发送所述第一事件的第一抑制量而确定的。
在一些可选的实施方式中,在所述第二读指针与所述第一抑制量之和不超过所述描述符队列的队列深度的情况下,所述第一事件抑制偏置为:第二读指针+第一抑制量;在所述第二读指针与所述第一抑制量之和超过所述描述符队列的队列深度的情况下,所述第一事件抑制偏置为:(第二读指针+第一抑制量) mod 队列深度;mod表示取模运算符。
在一些可选的实施方式中,所述第一设备还设有第一写翻转标志,在所述第一写指针从所述描述符队列的队尾移动至队首的情况下,所述第一写翻转标志发生变化;所述第一事件抑制条件还包括第一事件抑制翻转标志;所述判断模块1003,判断所述当前写位置与所述第一事件抑制条件是否相匹配,还包括:判断所述第一写翻转标志与所述第一事件抑制翻转标志是否相匹配。
在一些可选的实施方式中,所述第二设备设有第二读指针和第二读翻转标志;所述第二读指针指向所述描述符队列中需要被所述第二设备执行读操作的位置,在所述第二读指针从所述描述符队列的队尾移动至队首的情况下,所述第二读翻转标志发生变化;所述第一事件抑制翻转标志是在所述第二读翻转标志的基础上翻转M次生成的;M=(第二读指针+第一抑制量) / 队列深度;/表示取商运算符。
在一些可选的实施方式中,所述第一事件抑制项还包括第一事件抑制使能;所述第一事件抑制使能用于确定所述第一事件抑制项是否表示抑制第一事件,以在所述第一事件抑制项表示抑制第一事件的情况下,执行判断所述当前写位置与所述第一事件抑制条件是否相匹配的步骤。
在一些可选的实施方式中,该装置还包括抑制更新模块,用于:或者,在所述第一事件抑制项表示抑制第一事件的情况下,响应于所述第二设备发起的更新指令,将所述第一事件抑制项更新为表示不抑制第一事件。
在一些可选的实施方式中,所述装置还包括配置模块,用于:在需要抑制第二事件的情况下,配置所述事件抑制信息的第二事件抑制项中的第二事件抑制条件;所述第二事件抑制条件用于在与所述第二设备对所述描述符队列执行写操作的位置相匹配的情况下,允许所述第二设备向所述第一设备发起所述第二事件。
在一些可选的实施方式中,所述第一设备设有第一读指针,所述第一读指针指向所述描述符队列中需要被所述第一设备执行读操作的位置;所述第二设备设有第二写指针,所述第二写指针指向所述描述符队列中需要被所述第二设备执行写操作的位置;所述第二事件抑制条件包括第二事件抑制偏置;所述配置模块配置所述事件抑制信息的第二事件抑制项中的第二事件抑制条件,包括:根据所述第一读指针和所述第二抑制量,确定所述第二事件抑制偏置;所述第二事件抑制偏置用于在与所述第二写指针相匹配的情况下,允许所述第二设备向所述第一设备发起所述第二事件。
在一些可选的实施方式中,所述配置模块根据所述第一读指针和所述第二抑制量,确定所述第二事件抑制偏置,包括:在所述第一读指针与所述第二抑制量之和不超过所述描述符队列的队列深度的情况下,所述第二事件抑制偏置为:第一读指针+第二抑制量;在所述第一读指针与所述第二抑制量之和超过所述描述符队列的队列深度的情况下,所述第二事件抑制偏置为:(第一读指针+第二抑制量) mod 队列深度;mod表示取模运算符。
在一些可选的实施方式中,所述第一设备还设有第一读翻转标志,在所述第一读指针从所述描述符队列的队尾移动至队首的情况下,所述第一读翻转标志发生变化;所述第二设备还设有第二写翻转标志,在所述第二写指针从所述描述符队列的队尾移动至队首的情况下,所述第二写翻转标志发生变化;所述第二事件抑制条件还包括第二事件抑制翻转标志;
所述配置模块配置所述事件抑制信息的第二事件抑制项中的第二事件抑制条件,还包括:
在所述第一读翻转标志的基础上翻转N次,生成所述第二事件抑制翻转标志;N=(第一读指针+第二抑制量) / 队列深度;/表示取商运算符,所述第二事件抑制翻转标志用于在与所述第二写翻转标志相匹配的情况下,允许所述第二设备向所述第一设备发起所述第二事件。
在一些可选的实施方式中,所述配置模块还用于:根据是否需要抑制第二事件,配置所述第二事件抑制项中的第二事件抑制使能;所述第二事件抑制使能用于确定所述第二事件抑制项是否表示抑制第二事件,以在所述第二事件抑制项表示抑制第二事件,且所述第二设备对所述描述符队列执行写操作的位置与所述第二事件抑制条件相匹配的情况下,允许所述第二设备向所述第一设备发起所述第二事件。
在一些可选的实施方式中,该装置还包括:读操作模块,用于对描述符队列中的当前读位置执行读操作;并且,所述读操作模块对描述符队列中的当前读位置执行读操作,包括:在所述第一设备为上位机、所述第二设备为异构设备的情况下,若所述当前读位置处的描述符已用但未被回收,回收所述当前读位置处的描述符;在所述第一设备为异构设备、所述第二设备为上位机的情况下,若所述当前读位置处的描述符可用但未被用,读取所述当前读位置处的描述符。
在一些可选的实施方式中,所述描述符队列还包括用于指示描述符当前状态的老化标志;所述当前状态包括:已用但未被回收,可用但未被用;所述读操作模块还可以用于:根据所述当前读位置处描述符的老化标志确定所述当前读位置处描述符的当前状态。
一些可选的实施方式中,所述老化标志包括至少两位;所述当前状态还包括:已被回收;所述写操作模块1001对描述符队列中的当前写位置执行写操作,包括:
在所述第一设备为上位机、所述第二设备为异构设备的情况下,若所述当前写位置处的描述符已被回收,向当前写位置写入可用的描述符,并将相应老化标志更新为可用但未被用;
在所述第一设备为异构设备、所述第二设备为上位机的情况下,将当前写位置处描述符的老化标志更新为已用但未被回收。
在一些可选的实施方式中,所述第一设备设有第一写指针和第一写翻转标志;所述第一写指针指向所述描述符队列中需要被所述第一设备执行写操作的位置,在所述第一写指针从所述描述符队列的队尾移动至队首的情况下,所述第一写翻转标志发生变化;所述老化标志包括第一位和第二位;
所述写操作模块1001将相应老化标志更新为可用但未被用,包括:将相应老化标志的第一位更新为所述第一写翻转标志;
所述写操作模块1001将当前写位置处描述符的老化标志更新为已用但未被回收,包括:将当前写位置处描述符的老化标志的第二位更新为所述第一写翻转标志。
在一些可选的实施方式中,所述第一设备设有第一读指针和第一读翻转标志;所述第一读指针指向所述描述符队列中需要被所述第一设备执行写操作的位置,在所述第一读指针从所述描述符队列的队尾移动至队首的情况下,所述第一读翻转标志发生变化;
所述读操作模块根据所述当前读位置处描述符的老化标志确定所述当前读位置处描述符的当前状态,包括:在所述第一设备为上位机、所述第二设备为异构设备的情况下,若所述当前读位置处描述符的老化标志的第一位与第二位相同,且所述第一读翻转标志与所述当前读位置处描述符的老化标志的第二位相匹配,确定所述当前读位置处的描述符已用但未被回收;在所述第一设备为异构设备、所述第二设备为上位机的情况下,若所述当前读位置处描述符的老化标志的第一位与第二位不同,且所述第一读翻转标志与所述当前读位置处描述符的老化标志的第一位相匹配,确定所述当前读位置处的描述符可用但未被用;
所述写操作模块1001对描述符队列中的当前写位置执行写操作,包括:在所述第一设备为上位机、所述第二设备为异构设备的情况下,若所述当前写位置处描述符的老化标志的第一位与第二位相同,且所述第一写翻转标志与所述当前写位置处描述符的老化标志的第二位不相匹配,确定所述当前写位置处的描述符已被回收。
上述各个模块和单元的更进一步的功能描述与上述对应实施例相同,在此不再赘述。
本实施例中的事件抑制装置是以功能单元的形式来呈现,这里的单元是指ASIC(Application Specific Integrated Circuit,专用集成电路)电路,执行一个或多个软件或固定程序的处理器和存储器,和/或其他可以提供上述功能的器件。
本发明实施例还提供一种计算机设备,请参阅图11,图11是本发明可选实施例提供的一种计算机设备的结构示意图,如图11所示,该计算机设备包括:一个或多个处理器10、存储器20,以及用于连接各部件的接口,包括高速接口和低速接口。
处理器10可以是中央处理器,网络处理器或其组合。其中,处理器10还可以进一步包括硬件芯片。存储器20存储有可由至少一个处理器10执行的指令,以使所述至少一个处理器10执行实现上述实施例示出的方法。存储器20可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据计算机设备的使用所创建的数据等。
该计算机设备还包括输入装置30和输出装置40。处理器10、存储器20、输入装置30和输出装置40可以通过总线或者其他方式连接,图11中以通过总线连接为例。输入装置30可接收输入的数字或字符信息,输出装置40可以包括显示设备、辅助照明装置(例如,LED)和触觉反馈装置(例如,振动电机)等。
本发明实施例还提供了一种计算机可读存储介质,上述根据本发明实施例的方法可在硬件、固件中实现,或者被实现为可记录在存储介质,或者被实现通过网络下载的原始存储在远程存储介质或非暂时机器可读存储介质中并将被存储在本地存储介质中的计算机代码,从而在此描述的方法可被存储在使用通用计算机、专用处理器或者可编程或专用硬件的存储介质上的这样的软件处理。
虽然结合附图描述了本发明的实施例,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下做出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。
- 预训练语言模型的训练方法、语言模型的训练方法及装置
- 基于预训练语言模型的三维内容生成模型训练方法及装置