掌桥专利:专业的专利平台
掌桥专利
首页

数据传输方法、电子设备和可读存储介质

文献发布时间:2023-06-19 11:22:42


数据传输方法、电子设备和可读存储介质

技术领域

本申请涉及计算机技术领域,特别是涉及一种数据传输方法、电子设备和可读存储介质。

背景技术

随着神经网络和大数据的不断发展,越来越多的专用处理芯片逐渐问世,这些专用处理芯片在处理相关数据时,涉及到大量的数据传输。

通常,由于神经网络等重量级数据的数据量较大,专用处理芯片在进行数据传输时,常常采用直接内存存取(Direct Memory Access,DMA)方法进行数据传输,采用DMA进行数据传输时,由DMA控制器直接掌管总线,来实现数据传输。在传输数据之前,CPU要把总线控制权交给DMA控制器,在结束数据传输之后,DMA控制器立即把总线控制权再交回给CPU。也即是说,一个完整的DMA传输过程须经过DMA请求、DMA响应、DMA传输和DMA结束4个步骤。

然而,专用处理芯片的传输数据常常会涉及的小包数据的多次传输,采用上述方法进行数据传输效率低。

发明内容

基于此,有必要针对上述技术问题,提供一种传输效率高的数据传输方法、装置、电子设备和可读存储介质。

第一方面,一种数据传输方法,该方法包括:

当待传输数据的数据量小于预设传输阈值时,为待传输数据确定目标基地址寄存器BAR;

通过目标BAR将待传输数据映射至目标存储器的第一地址段上进行存储;第一地址段中包括待传输数据对应的目标起始地址。

在其中一个实施例中,上述通过目标BAR将待传输数据映射至第一地址段上进行存储包括:

根据目标BAR和待传输数据对应的目标起始地址,确定当前传输的数据量;

将当前传输的数据量映射至第一地址段上进行存储;

更新待传输数据的对应的目标起始地址,返回根据目标BAR和待传输数据对应的目标起始地址,确定当前传输的数据量,直至完成待传输数据的传输。

在其中一个实施例中,上述根据目标BAR和待传输数据对应的目标起始地址,确定当前传输的数据量,包括:

获取目标BAR的当前起始地址;

根据目标BAR的大小、目标BAR的当前起始地址和待传输数据的目标起始地址,确定可传输数据量;

根据待传输数据的数据量和可传输数据量,确定当前传输的数据量。

在其中一个实施例中,该方法还包括:

获取目标BAR映射在目标存储器上的第二地址段;第二地址段为目标BAR通过一次映射得到的目标存储器上的地址段;

若第二地址段与待传输数据对应的目标起始地址有交集时,则通过目标BAR将待传输数据映射至第一地址段上进行存储;

若第二地址段与待传输数据对应的目标起始地址无交集时,控制目标BAR进行滑动,直至目标BAR的第二地址段与待传输数据对应的目标起始地址有交集。

在其中一个实施例中,若第二地址段与所述待传输数据对应的目标起始地址无交集时,确定目标BAR的当前起始地址,控制目标BAR从当前起始地址开始滑动。

在其中一个实施例中,该方法还包括:

在根据所述目标起始地址,通过目标BAR将待传输数据映射至第一地址段上进行存储之后,执行数据同步操作,以确认当前传输的数据量已经存储在第一地址段中。

在其中一个实施例中,上述为待传输数据确定目标基地址寄存器BAR,包括:

获取BAR集中各BAR的信号量;信号量用于指示BAR是否处于空闲状态;

根据各BAR的信号量,将处于空闲状态的BAR确定为目标BAR。

在其中一个实施例中,上述将处于空闲状态的BAR确定为目标BAR,包括:

当处于空闲状态的BAR为多个时,根据预设的顺序,将顺序在前的处于空闲状态的BAR确定为目标BAR。

在其中一个实施例中,若BAR集中不存在处于空闲状态的BAR时,该方法还包括:

获取各BAR的等待任务数量,并将等待任务数量最少的BAR作为目标BAR;

在目标BAR的信号量指示目标BAR处于空闲状态时,通过目标BAR将待传输数据映射至第一地址段上进行存储。

第二方面,一种数据传输装置,该装置包括:

选取模块,用于当待传输数据的数据量小于预设传输阈值时,为待传输数据确定目标基地址寄存器BAR;待传输数据为存储于第一处理器中的传输数据;

映射模块,用于通过目标BAR将待传输数据映射至目标存储器的第一地址段上进行存储;第一地址段中包括待传输数据对应的目标起始地址。

第三方面,本申请还提供了一种电子设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述数据传输方法步骤。

第四方面,本申请还提供了一种可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述数据传输方法的步骤。

上述数据传输方法、装置、电子设备和可读存储介质,当待传输数据的数据量小于预设传输阈值时,为待传输数据确定目标基地址寄存器BAR,进而通过目标BAR将待传输数据映射至第一地址段上进行存储,其中,第一地址段为目标存储器上用于存储待传输数据的地址段,第一地址段中包括待传输数据对应的目标起始地址,使得在进行小包数据传输时,可以直接通过目标BAR将待传输输出映射至第一地址段上进行存储,无需启动DMA进行数据传输,进而避免了DMA请求、DMA响应、DMA传输和DMA结束等复杂的传输步骤,提高了小包数据传输的效率。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为一个实施例中数据传输方法的应用环境图;

图2为一个实施例中数据传输方法的流程示意图;

图2a为一个实施例中BAR集的示意图;

图3为另一个实施例中数据传输方法的流程示意图;

图3a为一个实施例中BAR与内存空间的映射关系的示意图;

图4为另一个实施例中数据传输方法的流程示意图;

图5为另一个实施例中数据传输方法的流程示意图;

图6为另一个实施例中数据传输方法的流程示意图;

图7为一个实施例中数据传输方法的流程示意图;

图8为一个实施例中数据传输装置的结构框图;

图9为另一个实施例中数据传输装置的结构框图;

图10为另一个实施例中数据传输装置的结构框图;

图11为另一个实施例中数据传输装置的结构框图;

图12为另一个实施例中数据传输装置的结构框图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

本申请的说明书和权利要求书及附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。

在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

本申请提供的数据传输方法,可以应用于主板、计算机设备等电子设备中,该电子设备可以是同构的电子设备,也可以是异构的电子设备。可选地,当上述数据传输方法用于同构的电子设备时,该电子设备的不同存储器之间的数据传输可以采用上述数据传输方法。例如,该电子设备的片上存储器和片外存储器之间的数据传输可以采用上述的数据传输方法。

可选地,本申请提供的数据传输方法可以应用于异构的电子设备中。如参照图1所示,该电子设备可以包括第一处理器11、第二处理器12和第一存储器13。其中,该第一处理器可以是通用处理器,该第二处理器可以是专用处理器。第一处理器11和第二处理器12可以但不限于是如下多种组合中的一种组合:CPU(中央处理器)和人工智能处理器,CPU和DSP(Digital Signal Processing,数字信号处理器),CPU和GPU(图像处理器)等等,此处不做具体限定。

每个处理器可以对应设置有存储器,其中,该第一处理器可以对应设置有第一存储器13,该第一存储器13可以用于存储有计算机程序,第一处理器11可以在执行计算机程序时实现上述数据传输方法。进一步地,该第一存储器13还可以用于存储数据,该数据可以是语音数据、图像数据或文本数据等等。该第一存储器13的中存储的数据可以传输至第二处理器12对应设置的第二存储器14中,使得该第二处理器可以利用相应的数据进行语音处理、图像处理或自然语音处理等等操作。更进一步地,第二处理器12还可以将其处理结果通过第二存储器14传回至第一存储器13中。

在一个实施例中,如图2所示,本申请提供了一种数据传输方法,在待传输数据的数据量较小时,可以采用基地址寄存器(BAR)实现数据传输,此时,无需启动DMA,从而可以提高数据的传输速度和效率。也就是说,在待传输数据的数据量较小时,可以通过目标BAR确定得到待传输数据对应的内存空间的第一地址段进行存储。具体地,以该方法应用于图1所示的电子设备为例进行说明,上述方法可以包括以下步骤:

S101、当待传输数据的数据量小于预设传输阈值时,为待传输数据确定目标基地址寄存器BAR。

其中,待传输数据可以是进行机器学习所需的传输数据,其可以是能够实现上述神经网络相关的运算,包括但不限于卷积层、池化层、全连接层、激活层等网络层的输入数据,和/或输出数据。预设传输阈值可以是根据用户输入的设置指令得到的数据量阈值,例如,当用户输入的设置指令指示预设传输阈值为256KB时,可以将预设传输阈值设置为256KB。此时,若待传输数据的数据量小于256KB时,可以为待传输数据确定目标基地址寄存器(base address register,BAR)。该目标BAR能够实现与目标存储器之间的地址映射,从而可以将该目标BAR映射至目标存储器上的地址段作为目标存储地址。

通常,BAR存在于BAR集中,例如,如图2a所示,BAR集中包括12个BAR,分别属于4个虚拟功能模块(virtual function,VF),每个VF有3个BAR,分别是BAR0、BAR2、BAR4,每个BAR的大小均为16MB)也即是说,如图2a所示,上述BAR集中包括VF0_BAR0、VF0_BAR2、VF0_BAR4、VF1_BAR0、VF1_BAR2、VF1_BAR4、VF2_BAR0、VF2_BAR2、VF2_BAR4、VF3_BAR0、VF3_BAR2和VF3_BAR4这12个BAR,每个BAR的大小可以为16MB。每个BAR存在其对应的物理地址,例如,以VF0_BAR0物理地址(phy_vf0_bar0)为例,该地址为BAR的起始物理地址,之后包含16MB*4连续的物理地址空间,也即是VF1_BAR0、VF2_BAR0、VF3_BAR0的起始物理地址分别为phy_vf0_bar0+16M、phy_vf0_bar0+32M、phy_vf0_bar0+48M。每个BAR的状态信息可以被记录在sriov_bar中,sriov_bar中还可以记录BAR的起始虚拟地址、BAR的等待任务数量wait_count、信号量window_sem等信息。继续以上述BAR集中包括12个BAR为例,sriov_bar通过sriov_arr[12]记录12个BAR的状态信息,并在加载驱动时初始化sriov_arr数组内sriov_bar的属性值。为待传输数据确定目标基地址寄存器BAR可以是从上述BAR集中选取目标BAR的过程。

S102、通过目标BAR将待传输数据映射至目标存储器的第一地址段上进行存储;第一地址段中包括待传输数据对应的目标起始地址。

其中,第一地址段可以是待传输数据存储在目标存储器中的地址空间,可选地,该目标存储器可以是图1中的第一存储器或第二存储器。可选地,该待传输数据的当前存储位置可以为第一存储器,该待传输数据的目标存储位置可以为第二存储器,第一地址段可以是待传输数据在第二存储器中的地址空间。第一地址段可以是在进行数据传输之前,通过alloc函数确定出第一地址段,使得第一地址段中包括待传输数据的目标起始地址dev_address,且有足够的内存空间用于存储待传输数据。

在上述S101的基础上,当确定了目标BAR时,可以通过目标BAR映射至目标存储器上的地址作为目标存储地址,之后,可以通过数据迁移指令(如,MOVE指令或COPY指令)将待传输数据从源地址搬运至目标存储地址,以将待传输数据映射至目标存储器的第一地址段上进行存储,从而通过目标BAR实现待传输数据在第一存储器和第二存储器之间传输。可选地,该第二存储器可以是DDR。以下以该目标存储器为DDR举例说明。

此处仅以示例的方式给出了该数据传输方法的一种实现方式。在其他实施例中,该目标存储器还可以是第一存储器,待传输数据的当前存储位置可以是第二存储器。

上述数据传输方法,当待传输数据的数据量小于预设传输阈值时,为待传输数据确定目标基地址寄存器BAR,进而通过目标BAR将待传输数据映射至目标存储器的第一地址段上进行存储;第一地址段中包括待传输数据对应的目标起始地址,使得在进行小包数据传输时,可以直接通过目标BAR将待传输输出映射至第一地址段上进行存储,无需启动DMA进行数据传输,进而避免了DMA请求、DMA响应、DMA传输和DMA结束等复杂的传输步骤,提高了小包数据传输的效率。

由上述描述可知,BAR通常存在于BAR集中如图2a所示,BAR可以动态地建立与目标存储器上的存储地址之间的映射关系,BAR对应的内存空间的起始地址bar_address,BAR对应的内存空间的终止地址可以是根据BAR的大小bar_size得到的地址,例如,该BAR对应的存储器上终止地址可以是起始地址bar_address与bar的大小bar_size之和。待传输数据对应的内存空间的第一地址段可以是目标BAR直接映射在内存空间上的地址,也可以是在目标BAR直接映射在内存空间上的地址对应的存储量小于待传输数据的数据量时,通过滑窗处理得到的地址,本申请实施例对此不做限制。

图3为一个实施例中数据传输方法的流程示意图,本实施例涉及的是如何通过目标BAR将待传输数据映射至第一地址段上进行存储的过程,如图3所示,上述S102“通过目标BAR将待传输数据映射至第一地址段上进行存储”一种可能的实现方法包括以下步骤:

S201、根据目标BAR和待传输数据对应的目标起始地址,确定当前传输的数据量。

其中,待传输数据对应的目标起始地址dev_address是在待传输数据进行数据传输之前确定的。BAR在映射的过程中,可以如图3a所示,BAR在第一次映射时,其在目标存储器上的起始地址为0,在第二次映射时,BAR在目标存储器上的起始地址为bar_size;在第三次映射时,BAR在目标存储器上的起始地址为2*bar_size……。通常待传输数据对应的目标起始地址dev_address不与BAR映射的起始地址重合,因此,通过目标BAR将待传输数据映射时,需要根据目标BAR和待传输数据对应的目标起始地址,确定当前传输的数量。

可选的,可以通过图4所示实施例来详细说明。如图4所示,上述S201“根据目标BAR和待传输数据对应的目标起始地址,确定当前传输的数据量”一种可能的实现方法包括以下步骤:

S301、获取目标BAR的当前起始地址。

在上述实施例的基础上,当为待传输数据选取了目标BAR之后,可以通过读取sriov_arr数组中的信息确定目标BAR的大小。可选地,该目标BAR的当前起始地址可以是目标BAR在目标存储器上映射的地址段与待传输数据的目标起始地址存在交集时,该目标BAR对应的起始地址。可选地,本申请实施例可以在使用该目标BAR进行数据传输时,首先设置该目标BAR,以确定该目标BAR的当前起始地址。进一步地,本申请还可以存储该目标BAR的当前起始地址。上述的BAR设置操作可以包括:查询目标BAR映射在目标内存器存储器上的地址中是否与目标起始地址存在交集,确定目标BAR的当前起始地址。

可选地,BAR在映射时,可以是从目标存储器的起始地址0开始映射的,当第一次映射时,查询目标BAR对应的映射地址段与目标起始地址是否有交集,若有(即该待传输数据的目标起始地址在目标BAR对应的映射地址段范围之内时),则将目标存储器的起始地址0作为目标BAR的当前起始地址。若无(即该待传输数据的目标起始地址在目标BAR对应的映射地址段范围之外时),则滑动目标BAR,之后返回查询目标BAR对应的映射地址段与目标起始地址是否有交集,直至目标BAR对应的映射地址段与目标起始地址有交集,将当前目标BAR当前映射在目标存储器上的地址段的起始地址确定为目标BAR的当前起始地址。目标BAR滑动操作的具体实现可参见下文的描述。

S302、根据目标BAR的大小、目标BAR的当前起始地址和待传输数据的目标起始地址,确定可传输数据量。

在上述实施例的基础上,可以通过目标BAR的大小、目标BAR的当前起始地址,确定本次通过目标BAR映射的可传输数据量。例如,用bar_size表示目标BAR的大小,用bar_address表示目标BAR的当前起始地址,用dev_address表示待传输数据的目标起始地址,可以通过公式bar_address+bar_size-dev_address来确定可传输数据量。

S303、根据待传输数据的数据量和可传输数据量,确定当前传输的数据量。

在上述S302的基础上,在确定了可传输数据量的基础上,可以将待传输数据的数据量和可传输数据量之中对的较小值作为当前传输的数据量,即通过min(len,bar_address+bar_size-dev_address)确定当前传输的数据量。其中,len用于指示待传输数据的尚未存储在第一地址段的剩余数据量,也即是说,当待传输数据的尚未存储在第一地址段的剩余数据量大于可传输数据量时,目标BAR当前传输的数据量为可传输数据量,也即是目标BAR将部分待传输数据映射至第一地址段存储。当待传输数据的尚未存储在第一地址段的剩余数据量小于或等于可传输数据量时,目标BAR当前传输的数据量为待传输数据的数据量,也即是目标BAR将待传输数据的尚未存储在第一地址段的剩余数据量全部映射至第一地址段存储。

S202、将当前传输的数据量映射至第一地址段上进行存储。

S203、更新待传输数据的对应的目标起始地址,返回S201,直至完成待传输数据的传输。

在上述实施例的基础上,存在一种可能的情况,即待传输数据的数据量比可传输数据量大,则不能通过一次目标BAR映射至第一地址段上进行存储,需要通过多次目标BAR映射至第一地址段进行存储。在完成第一次目标BAR映射存储之后,可以更新并存储待传输数据对应的目标起始地址,可选地,该更新后的目标起始地址可以等于更新前的目标起始地址与当前传输的数据量之和。通常,该更新后的目标起始地址即为目标BAR第二次映射目标存储器上的起始地址,进而根据目标BAR和待传输数据对应的更新后的目标起始地址,确定当前传输的数据量,继续将当前传输的数据量映射至第一地址段上进行存储,直至完成待传输数据的传输。

上述数据传输方法,根据目标BAR和待传输数据对应的目标起始地址,确定当前传输的数据量,并将当前传输的数据量映射至第一地址段上进行存储,进而更新待传输数据的对应的目标起始地址,返回根据目标BAR和待传输数据对应的目标起始地址,确定当前传输的数据量,直至完成待传输数据的传输,使得待传输数据大于目标BAR映射在目标存储器上的地址对应的数据量时,可以通过目标BAR多次映射实现将待传输数据存储在第一地址段,提高了数据传输方法的灵活性。

由于BAR向目标存储器映射时,通常是从目标存储器的起始地址开始依次映射的,而目标起始地址在目标存储器上的位置上并不一定是该目标存储器的起始地址,在一种可能的情况下,目标BAR在第一次向目标存储器映射时,可能出现目标起始地址不在目标BAR映射的地址段之内,因此,在通过目标BAR将待传输数据存储在第一地址段时,需要先检查目标BAR在目标存储器上映射的地址段中是否与目标起始地址有交集,当存在交集时,才能通过目标BAR将待传输数据映射在第一地址段存储。下面通过图5来详细说明,如图5所示,该方法还包括:

S401、获取目标BAR映射在目标存储器上的第二地址段;第二地址段为目标BAR通过一次映射得到的目标存储器上的地址段。

其中,第二地址段可以是目标BAR通过一次映射得到的目标存储器上的地址段,如图3a所示,bar_size所表示的地址段即为目标BAR映射在目标存储器上的第二地址段。由上述实施例的描述可知,目标BAR在映射时,通常是从目标存储器的起始地址0开始映射的。第二地址段可以是目标BAR第一次映射在目标存储器上的地址段,也可以是目标BAR第N次映射在目标存储器上的地址段,本申请实施例对此不做限制。

S402、若第二地址段与待传输数据对应的目标起始地址有交集时,则通过目标BAR将待传输数据映射至第一地址段上进行存储。

若第二地址段与待传输数据对应的目标起始地址有交集时,即待传输数据的目标起始地址处于该第二地址段的地址区间内时,可以通过该目标BAR进行数据映射。也即是说第二地址段可以是与第一地址段有交集的地址段,第一地址段可以与第二地址段完全相同,第一地址段也可以包括第二地址段,本申请实施例对此不做限制。此时可以直接通过目标BAR将待传输数据映射至第一地址段上进行存储。

S403、若第二地址段与待传输数据对应的目标起始地址没有交集时,还可以通过控制目标BAR进行至少一次滑窗,直至目标BAR的当前第二地址段与待传输数据对应的目标起始地址有交集。可选的,控制目标BAR进行滑窗,直至目标BAR的第二地址段与待传输数据对应的目标起始地址有交集。其中,目标BAR的滑窗处理具体可参见图4所示的实施例中,此处不再赘述。

由于BAR向目标存储器映射时,通常是从目标存储器的起始地址开始依次映射的,若待传输数据的目标起始地址与目标存储器的起始地址间隔较远,例如,若待传输数据的目标起始地址与目标存储器的起始地址间隔为n*bar_size,其中,n为正整数,此时需要多次滑动BAR才能使得目标BAR的当前第二地址段与待传输数据对应的目标起始地址有交集,这无疑会影响数据的传输效率。本申请实施例中,可以根据待传输数据的目标起始地址确定目标BAR的当前起始地址,以减少目标BAR的滑动次数,从而提高数据的传输效率。

本申请一实施例中,可选地,若第二地址段与待传输数据对应的目标起始地址无交集时,根据待传输数据的目标起始地址,确定目标BAR的当前起始地址,控制目标BAR从当前起始地址开始滑动。

在第二地址段与待传输数据对应的目标起始地址没有交集时,根据待传输数据的目标起始地址,可以通过目标BAR的设置操作确定目标BAR的当前起始地址。该目标BAR的当前起始地址可以是与该待传输数据的目标起始地址最接近的BAR的起始地址,一般的,该最接近的BAR的起始地址小于或等于该待传输数据的目标起始地址。这样,通过控制目标BAR从待传输数据的目标起始地址的临近位置开始滑动,可以减少目标BAR的滑动次数,从而提高数据的传输效率。该最接近的BAR的起始地址可以是与待传输数据的目标起始地址存在交集的BAR的起始地址。例如,本申请可以根据目标BAR的大小bar_size将DDR上的存储空间切分为K块地址段,其中,K为正整数,同时,处理器可以分别记录K个地址段的起始地址。进一步地,处理器可以根据待传输数据的目标起始地址,从K个地址段中确定出与该目标起始地址最接近的地址段,且该最接近的地址段的起始地址小于或等于待传输数据的目标起始地址,并将该最接近的地址段的起始地址作为目标BAR的当前起始地址,以使目标BAR从待传输数据的目标起始地址的临近位置开始滑动以实现数据映射。

进一步地,本申请实施例中,每滑动一次目标BAR,均可以记录一次该目标BAR的位置,也即是目标BAR映射在目标存储器上的第二地址段,例如,可以通过上文所述的数组sriov_arr[12]记录BAR映射在目标存储器上的历史位置。该目标BAR的历史位置可以是上一次使用该目标BAR传输数据后记录的历史位置。

例如,若该目标BAR为首次使用,则可以将该目标BAR的历史位置可以是零。若该目标BAR非首次使用,则可以通过读取该目标BAR对应的数组,确定该目标BAR的历史位置,之后执行目标BAR的设置操作:即根据该目标BAR的当前位置和待传输数据的目标起始地址,更新所述目标BAR的当前起始地址。

具体地,本申请实施例可以从数组中读取上一次使用时该目标BAR的历史位置,并判断该历史位置对应的地址段是否与当前的待传输数据的目标起始地址有交集,若该目标BAR的历史位置对应的地址段与当前的待传输数据的目标起始地址有交集,则可以直接将该目标BAR的历史位置对应的起始地址作为该目标BAR的当前起始地址,从而避免了该目标BAR的滑动及读写操作,进一步提高了数据传输效率。

可选地,当通过目标BAR将待传输数据映射至第一地址段上进行存储之后,还可以执行数据同步操作,以确认当前传输的数据量已经存储在第一地址段中。

在具体的执行数据同步操作时,可以通过内存屏障(barrier)来实现数据同步操作。内存屏障,也称内存栅栏,内存栅障,屏障指令,是一类同步屏障指令,是CPU或编译器在对内存随机访问的操作中的一个同步点,使得此点之前的所有读写操作都执行后才可以开始执行此点之后的操作。也即是说,可以通过内存屏障,确定将待传输数据存储在对应的第一地址段的指令是否已经被执行,进而确定待传输数据是否存储在对应的第一地址段。

上述实施例描述了如何通过目标BAR将待传输数据映射至第一地址段上进行存储的过程。下面通过图6和图7来详细说明如何为待传输数据确定目标基地址寄存器BAR。

图6为另一个实施例中数据传输方法的流程示意图,本实施例涉及的是如何为待传输数据确定目标基地址寄存器BAR的具体过程,如图6所示,上述S101“为待传输数据确定目标基地址寄存器BAR”一种可能的实现方法包括以下步骤:

S501、获取BAR集中各BAR的信号量;信号量用于指示BAR是否处于空闲状态。

其中,由上述描述可以,BAR存在于BAR集中,每个BAR的状态信息可以被记录在sriov_bar中,sriov_bar中还可以记录BAR的起始虚拟地址、等待BAR的数量、信号量window_sem等信息。继续以上述BAR集中包括12个BAR为例,sriov_bar通过sriov_arr[12]记录12个BAR的状态信息。通过获取sriov_arr[12]获取各BAR的信号量。其中,信号量用于指示BAR是否处于空闲状态。例如,当信号量为0时,指示该BAR处理空闲状态,当信号量为1时,指示该BAR处理非空闲状态。

S502、根据各BAR的信号量,将处于空闲状态的BAR确定为目标BAR。

当获取处于空闲状态的BAR时,可以处于空闲状态的BAR确定为目标BAR,并返回该BAR在sriov_arr对应的索引号。可选地,当处于空闲状态的BAR为多个时,将顺序在前的处于空闲状态的BAR确定为目标BAR。

其中,继续如图2a所示,BAR集中包括12个BAR,分别属于4个虚拟功能模块(visualfunction,VF),每个VF有3个BAR,分别是BAR0、BAR2、BAR4,每个BAR的大小均为16MB)也即是说,如图2a所示,上述BAR集中包括按顺序排列的VF0_BAR0、VF0_BAR2、VF0_BAR4、VF1_BAR0、VF1_BAR2、VF1_BAR4、VF2_BAR0、VF2_BAR2、VF2_BAR4、VF3_BAR0、VF3_BAR2和VF3_BAR4这12个BAR。当根据各BAR的信号量,确定处于空闲状态的BAR为VF0_BAR4、VF1_BAR4和VF2_BAR0,则根据各BAR的顺序,将VF0_BAR4确定为目标BAR.

当BAR集中不存在空闲状态的BAR时,可以通过获取各BAR的等待任务数量,确定目标BAR。下面通过图7来详细说明。如图7所示,该方法还包括以下步骤:

S601、获取各BAR的等待任务数量,并将等待任务数量最少的BAR作为目标BAR。

S602、在目标BAR的信号量指示目标BAR处于空闲状态时,通过所述目标BAR将所述待传输数据映射至第一地址段上进行存储。

其中,各BAR的状态信息被记录在sriov_bar中,其中包括各BAR的等待任务数量wait_count。通过获取在sriov_bar,获取各BAR的等待任务数量,并将等待任务数量最少的BAR作为目标BAR。并在目标BAR的信号量指示目标BAR处于空闲状态时,通过所述目标BAR将所述待传输数据映射至第一地址段上进行存储。

需要说明的是,本申请实施例还可以通过其他方法获取各BAR的等待任务数量,本申请实施例中通过wait_count获取各BAR的等待任务数量的方式,仅是一种示例。

上述数据传输方法,当BAR集中不存在空闲状态的BAR时,通过获取各BAR的等待任务数量,并将等待任务数量最少的BAR作为目标BAR,在目标BAR的信号量指示目标BAR处于空闲状态时,通过所述目标BAR将所述待传输数据映射至第一地址段上进行存储。这样使得BAR集中不存在处于空闲状态的BAR时,可以将等待任务数量最少的BAR作为目标BAR,进而使得将待传输数据映射至内存空间存储时所等待的时间最少,提高了数据传输的效率。

应该理解的是,虽然图2-7的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2-7中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。

在一个实施例中,如图8所示,提供了一种数据传输装置,包括:选取模块10和映射模块20,其中:

选取模块10,用于当待传输数据的数据量小于预设传输阈值时,为待传输数据确定目标基地址寄存器BAR;

映射模块20,用于通过目标BAR将待传输数据映射至目标存储器的第一地址段上进行存储,第一地址段中包括待传输数据对应的目标起始地址。

本申请实施例提供的数据传输装置,可以执行上述方法实施例,其实现原理和技术效果类似,在此不再赘述。

图9为另一个实施例中数据传输装置的结构示意图,在图8所示实施例的基础上,如图9所示,映射模块20包括:第一确定单元201、映射单元202和更新单元203,其中:

第一确定单元201,用于根据目标BAR和待传输数据对应的目标起始地址,确定当前传输的数据量;

映射单元202,用于将当前传输的数据量映射至第一地址段上进行存储;

更新单元203,用于更新待传输数据的对应的目标起始地址,返回根据目标BAR和待传输数据对应的目标起始地址,确定当前传输的数据量,直至完成待传输数据的传输。

在其中一个实施例中,第一确定单元201具体用于获取目标BAR的大小和当前起始地址;根据目标BAR的大小、目标BAR的当前起始地址和待传输数据的目标起始地址,确定可传输数据量;根据待传输数据的数据量和可传输数据量,确定当前传输的数据量。

本申请实施例提供的数据传输装置,可以执行上述方法实施例,其实现原理和技术效果类似,在此不再赘述。

图10为另一个实施例中数据传输装置的结构示意图,在图8或图9所示实施例的基础上,如图10所示,该数据传输装置还包括确定模块30,其中:

确定模块30具体用于获取目标BAR映射在目标存储器上的第二地址段;第二地址段为目标BAR通过一次映射得到的目标存储器上的地址段;若第二地址段与待传输数据对应的目标起始地址有交集时,则通过目标BAR将待传输数据映射至第一地址段上进行存储;若第二地址段与待传输数据对应的目标起始地址无交集时,控制目标BAR进行滑动,直至目标BAR的第二地址段与待传输数据对应的目标起始地址有交集。

在一个实施例中,确定模块30具体用于若第二地址段与所述待传输数据对应的目标起始地址无交集时,确定目标BAR的当前起始地址,控制目标BAR从当前起始地址开始滑动。

需要说明的是,图10是基于图9的基础上进行示出的,当然图10也可以基于图8的基础上进行示出,这里仅是一种示例。

本申请实施例提供的数据传输装置,可以执行上述方法实施例,其实现原理和技术效果类似,在此不再赘述。

图11为另一个实施例中数据传输装置的结构示意图,在图8-10任一项所示实施例的基础上,如图11所示,选取模块10包括:获取单元101和第二确定单元102,其中:

获取单元101用于获取BAR集中各BAR的信号量;信号量用于指示BAR是否处于空闲状态;

第二确定单元102用于根据各BAR的信号量,将处于空闲状态的BAR确定为目标BAR。

在一个实施例中,第二确定单元102具体用于当处于空闲状态的BAR为多个时,将顺序在前的处于空闲状态的BAR确定为目标BAR。

在一个实施例中,第二确定单元102还用于获取各BAR的等待任务数量,并将等待任务数量最少的BAR作为目标BAR;在目标BAR的信号量指示目标BAR处于空闲状态时,通过目标BAR建立将待传输数据映射至第一地址段上进行存储。

需要说明的是,图11是基于图10的基础上进行示出的,当然图11也可以基于图8或图9的基础上进行示出,这里仅是一种示例。

本申请实施例提供的数据传输装置,可以执行上述方法实施例,其实现原理和技术效果类似,在此不再赘述。

图12为另一个实施例中数据传输装置的结构示意图,在图8-11任一项所示实施例的基础上,如图12所示,该数据传输装置还包括:同步模块40,其中:

同步模块40用于在根据所述目标起始地址,通过目标BAR将待传输数据映射至第一地址段上进行存储之后,执行数据同步操作,以确认当前传输的数据量已经存储在第一地址段中。

需要说明的是,图12是基于图11的基础上进行示出的,当然图12也可以基于图8-10任一项的基础上进行示出,这里仅是一种示例。

本申请实施例提供的数据传输装置,可以执行上述方法实施例,其实现原理和技术效果类似,在此不再赘述。

关于数据传输装置的具体限定可以参见上文中对于数据传输方法的限定,同样。上述数据传输装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于电子设备中的处理器中,也可以以软件形式存储于电子设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

在一个实施例中,提供了一种电子设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现以下步骤:

当待传输数据的数据量小于预设传输阈值时,为待传输数据确定目标基地址寄存器BAR;

通过目标BAR将待传输数据映射至目标存储器的第一地址段上进行存储;第一地址段中包括待传输数据对应的目标起始地址。

在一个实施例中,处理器执行计算机程序时实现以下步骤:根据目标BAR和待传输数据对应的目标起始地址,确定当前传输的数据量;将当前传输的数据量映射至第一地址段上进行存储;更新待传输数据的对应的目标起始地址,返回根据目标BAR和待传输数据对应的目标起始地址,确定当前传输的数据量,直至完成待传输数据的传输。

在一个实施例中,处理器执行计算机程序时实现以下步骤:获取目标BAR的大小和当前起始地址;根据目标BAR的大小、目标BAR的当前起始地址和待传输数据的目标起始地址,确定可传输数据量;根据待传输数据的数据量和可传输数据量,确定当前传输的数据量。

在一个实施例中,处理器执行计算机程序时实现以下步骤:获取目标BAR映射在目标存储器上的第二地址段;第二地址段为目标BAR通过一次映射得到的目标存储器上的地址段;若第二地址段与待传输数据对应的目标起始地址有交集时,则通过目标BAR将待传输数据映射至第一地址段上进行存储;若第二地址段与待传输数据对应的目标起始地址无交集时,控制目标BAR进行滑动,直至目标BAR的第二地址段与待传输数据对应的目标起始地址有交集。

在一个实施例中,处理器执行计算机程序时实现以下步骤:若第二地址段与所述待传输数据对应的目标起始地址无交集时,确定目标BAR的当前起始地址,控制目标BAR从当前起始地址开始滑动。

在一个实施例中,处理器执行计算机程序时实现以下步骤:在根据所述目标起始地址,通过目标BAR将待传输数据映射至第一地址段上进行存储之后,执行数据同步操作,以确认当前传输的数据量已经存储在第一地址段中。

在一个实施例中,处理器执行计算机程序时实现以下步骤:获取BAR集中各BAR的信号量;信号量用于指示BAR是否处于空闲状态;根据各BAR的信号量,将处于空闲状态的BAR确定为目标BAR。

在一个实施例中,处理器执行计算机程序时实现以下步骤:当处于空闲状态的BAR为多个时,将顺序在前的处于空闲状态的BAR确定为目标BAR。

在一个实施例中,处理器执行计算机程序时实现以下步骤:获取各BAR的等待任务数量,并将等待任务数量最少的BAR作为目标BAR;在目标BAR的信号量指示目标BAR处于空闲状态时,通过目标BAR将待传输数据映射至第一地址段上进行存储。

在一个实施例中,处理器执行计算机程序时实现以下步骤:在根据目标起始地址,通过目标BAR将待传输数据映射至第一地址段上进行存储之后,通过内存屏障确认待传输数据是否存储在对应的内存空间。

可选地,所述处理器包括第一处理器和第二处理器,所述第一处理器为人工智能处理器,所述第二处理器为通用处理器。

所述电子设备可以但不限于是数据传输装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、服务器、云端服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、交通工具、家用电器、和/或医疗设备。所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、B超仪和/或心电图仪。

在一个实施例中,提供了一种可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:

当待传输数据的数据量小于预设传输阈值时,为待传输数据确定目标基地址寄存器BAR;

通过目标BAR将待传输数据映射至目标存储器的第一地址段上进行存储第一地址段中包括待传输数据对应的目标起始地址。

在一个实施例中,计算机程序被处理器执行时实现以下步骤:根据目标BAR和待传输数据对应的目标起始地址,确定当前传输的数据量;将当前传输的数据量映射至第一地址段上进行存储;更新待传输数据的对应的目标起始地址,返回根据目标BAR和待传输数据对应的目标起始地址,确定当前传输的数据量,直至完成待传输数据的传输。

在一个实施例中,计算机程序被处理器执行时实现以下步骤:获取目标BAR的大小和当前起始地址;根据目标BAR的大小、目标BAR的当前起始地址和待传输数据的目标起始地址,确定可传输数据量;根据待传输数据的数据量和可传输数据量,确定当前传输的数据量。

在一个实施例中,计算机程序被处理器执行时实现以下步骤:获取目标BAR映射在目标存储器上的第二地址段;第二地址段为目标BAR通过一次映射得到的目标存储器上的地址段;若第二地址段与待传输数据对应的目标起始地址有交集时,则通过目标BAR将待传输数据映射至第一地址段上进行存储;若第二地址段与待传输数据对应的目标起始地址无交集时,控制目标BAR进行滑动,直至目标BAR的第二地址段与待传输数据对应的目标起始地址有交集。

在一个实施例中,计算机程序被处理器执行时实现以下步骤:若第二地址段与所述待传输数据对应的目标起始地址无交集时,确定目标BAR的当前起始地址,控制目标BAR从当前起始地址开始滑动。

在一个实施例中,计算机程序被处理器执行时实现以下步骤:在根据所述目标起始地址,通过目标BAR将待传输数据映射至第一地址段上进行存储之后,执行数据同步操作,以确认当前传输的数据量已经存储在第一地址段中。

在一个实施例中,计算机程序被处理器执行时实现以下步骤:获取BAR集中各BAR的信号量;信号量用于指示BAR是否处于空闲状态;根据各BAR的信号量,将处于空闲状态的BAR确定为目标BAR。

在一个实施例中,计算机程序被处理器执行时实现以下步骤:当处于空闲状态的BAR为多个时,将顺序在前的处于空闲状态的BAR确定为目标BAR。

在一个实施例中,计算机程序被处理器执行时实现以下步骤:获取各BAR的等待任务数量,并将等待任务数量最少的BAR作为目标BAR;在目标BAR的信号量指示目标BAR处于空闲状态时,通过目标BAR将待传输数据映射至第一地址段上进行存储。

在一个实施例中,计算机程序被处理器执行时实现以下步骤:在根据目标起始地址,通过目标BAR将待传输数据映射至第一地址段上进行存储之后,通过内存屏障确认待传输数据是否存储在对应的内存空间。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

相关技术
  • 数据传输方法、装置、电子设备及可读存储介质
  • 数据传输方法及装置、电子设备、可读存储介质
技术分类

06120112901323