直接内存存取方法、装置、专用计算芯片及异构计算系统
技术领域
本说明书一个或多个实施例涉及计算机技术领域,尤其涉及一种直接内存存取方法、装置、专用计算芯片及异构计算系统。
背景技术
异构计算是指由通用中央处理器(Central Processing Unit,CPU)进行数据处理整体流程的控制,当需要进行专用计算时,通用CPU调用专用计算芯片进行计算。具体地,通用CPU需要调用直接内存存取(Direct Memory Access,DMA)方法(一种通过专用的硬件模块实现内存数据的搬移方法),将专用计算的输入数据从系统内存传输到设备内存。专用计算芯片完成计算后,再把输出数据传输回系统内存。由此可以看出,在一次异构计算中,需要分别进行两次的DMA传输:输入数据的传输和输出数据的传输。
具体地,输入数据的传输过程可以为:1)访问DMA描述符所在队列的指针,以读取输入数据的DMA描述符(用于描述输入数据的地址和长度)。2)访问输入数据的DMA描述符,以读取输入数据的地址和长度。3)根据输入数据的地址和长度,读取输入数据。输出数据的传输过程可以为:1)访问DMA描述符所在队列的指针,以读取输出数据的DMA描述符(用于描述输出数据的地址和长度)。2)访问输出数据的DMA描述符,以读取输出数据的地址和长度;3)根据输出数据的地址和长度,写入输出数据。综上,传统技术中,一次异构计算的过程需要执行六次访问操作。
发明内容
本说明书一个或多个实施例描述了一种直接内存存取方法、装置、专用计算芯片及异构计算系统,可以减小DMA传输中的数据访问次数,从而可以提高异构计算的性能。
第一方面,提供了一种直接内存存取方法,包括:
从直接内存存取DMA控制块指针队列中读取DMA控制块指针;
根据所述DMA控制块指针,在系统内存中确定对应的DMA控制块,所述DMA控制块的内容包括DMA控制信息和输入数据;所述系统内存是指用于存储通用中央处理器CPU使用的数据的存储空间;
确定所述DMA控制信息和所述输入数据的总长度;
根据所述DMA控制块指针以及所述总长度,将所述DMA控制信息和所述输入数据搬移至设备内存;所述设备内存是指用于存储专用计算芯片的数据的存储空间;
对所述输入数据进行相应的计算,得到输出数据;
将所述输出数据写入所述设备内存;
获取所述输出数据的长度;
根据所述DMA控制信息以及所述输出数据的长度,将所述输出数据从所述设备内存搬移至所述DMA控制块。
第二方面,提供了一种专用计算芯片,包括:直接内存存取DMA长度寄存器、DMA控制块指针队列、DMA数据传输模块以及专用计算模块;
所述DMA长度寄存器,用于存储输入数据的长度以及输出数据的长度;
所述DMA控制块指针队列,用于存储多个DMA控制块指针;所述DMA控制块指针指向系统内存中的DMA控制块;所述DMA控制块的内容包括DMA控制信息和输入数据;
DMA数据传输模块,用于根据所述输入数据的长度、所述DMA控制信息的长度以及所述DMA控制块指针,将所述DMA控制信息以及所述输入数据从系统内存搬移至设备内存;还用于根据所述DMA控制信息以及所述输出数据的长度,将所述输出数据从所述设备内存搬移至所述系统内存;
所述专用计算模块,用于对所述输入数据进行计算,并得到所述输出数据。
第三方面,提供了一种异构计算系统,包括:通用中央处理器CPU、系统内存、如上述第二方面提供的专用计算芯片和设备内存;
所述通用CPU,用于调用所述专用计算芯片进行异构计算;
所述系统内存,用于存储所述通用CPU使用的数据;
所述设备内存,用于存储所述专用计算芯片所使用的数据。
第四方面,提供了一种直接内存存取装置,包括:
读取单元,用于从直接内存存取DMA控制块指针队列中读取DMA控制块指针;
确定单元,用于根据所述读取单元读取的所述DMA控制块指针,在系统内存中确定对应的DMA控制块,所述DMA控制块的内容包括DMA控制信息和输入数据;所述系统内存是指用于存储通用中央处理器CPU使用的数据的存储空间;
所述确定单元,还用于确定所述DMA控制信息和所述输入数据的总长度;
搬移单元,用于根据所述读取单元读取的所述DMA控制块指针以及所述确定单元确定的所述总长度,将所述DMA控制信息和所述输入数据搬移至设备内存;所述设备内存是指用于存储专用计算芯片的数据的存储空间;
计算单元,用于对所述输入数据进行相应的计算,得到输出数据;
写入单元,用于将所述计算单元计算的所述输出数据写入所述设备内存;
获取单元,用于获取所述输出数据的长度;
所述搬移单元,还用于根据所述DMA控制信息以及所述获取单元获取的所述输出数据的长度,将所述输出数据从所述设备内存搬移至所述DMA控制块。
本说明书一个或多个实施例提供的直接内存存取方法、装置、专用计算芯片及异构计算系统,从DMA控制块指针队列中读取DMA控制块指针。根据DMA控制块指针,在系统内存中确定对应的DMA控制块。确定DMA控制块中的DMA控制信息和输入数据的总长度。根据DMA控制块指针以及总长度,将DMA控制信息和输入数据搬移至设备内存。对输入数据进行相应的计算,得到输出数据。将输出数据写入设备内存,并获取输出数据的长度。根据DMA控制信息以及输出数据的长度,将输出数据从设备内存搬移至DMA控制块。
由此可以看出,本说明书提供的方案,在输入数据的传输过程,执行如下两次访问操作:第一次,访问DMA控制块指针队列,以读取DMA控制块指针。第二次,访问DMA控制块指针,以读取DMA控制信息和输入数据。相比传统的技术方案,减少了对DMA描述符的访问。在对输入数据进行相应的计算之后,可以直接根据DMA控制信息,将输出数据搬移至DMA控制块。也即输出数据的传输过程,只执行一次输出数据的访问,不需要再执行DMA描述符所在队列的指针以及输出数据的描述符的访问操作。综上,相比传统技术,两次的DMA传输可以减少3次访问操作。这可以大大提升数据的DMA传输效率,进而可以提高异构计算的性能。
附图说明
为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本说明书提供的异构计算系统结构示意图;
图2为本说明书一个实施例提供的直接内存存取方法流程图;
图3为本说明书一个实施例提供的直接内存存取装置示意图。
具体实施方式
下面结合附图,对本说明书提供的方案进行描述。
本说明书一个实施例提供的直接内存存取方法可以应用于如图1所示的异构计算系统中,该异构计算系统可以包括:通用CPU10、系统内存20、专用计算芯片30以及设备内存40,其中,通用CPU10和专用计算芯片30也可以称为异构计算系统中的两个计算单元。
通用CPU10用于实现异构计算的数据处理主要流程的控制。具体包括:a.异构计算输入数据的预处理和准备。b.调用专用计算芯片进行异构计算。c.查询异构计算结果(也称输出数据)返回。d.进行异构计算输出数据的后处理和输出结果。
系统内存20用于存储通用CPU10使用的数据。在一种实现方式中,其可以以DMA控制块(一种数据结构)的形式来存储使用的数据,该DMA控制块在系统内存20中占用一个物理上连续的地址空间。以使用的数据包括输入数据和输出数据为例来说,该DMA控制块的内容可以包括DMA控制信息、输入数据和输出数据。其中,输入数据所占用的空间也可以称为输入数据块。同样,输出数据所占用的空间也可以称为输出数据块。具体地,通用CPU10可以在进行异构计算时,根据当前异构计算方法,确定输入数据的长度和输出数据的长度。需要说明的是,在本说明书中,对一次特定的异构计算,其对应的输入数据以及输入数据的长度和输出数据的长度通常是确定的。之后可以构造出DMA控制信息,具体的构造过程后续进行说明。由此,就得到了DMA控制块的部分内容(DMA控制信息和输入数据)。在得到DMA控制块的部分内容之后,通用CPU10可以将该部分内容写入系统内存20的一个物理上连续的地址空间内。可以理解的是,由于输出数据的长度也是确定的,所以,在上述部分内容之后通常会连续地预留上述长度的地址空间,以用于写入输出数据。系统内存20中写入部分内容的地址空间与预留的地址空间就构成了上述DMA控制块。总之,针对一次异构计算,在系统内存20中就可以构成一个DMA控制块。
需要说明的是,上述DMA控制信息可以包括:输入数据的偏移地址、输出数据的偏移地址以及计算完成标志。其中,输入数据的偏移地址可以占用32个bit位(即4个字节),其可以是指输入数据所占用的空间(或者输入数据块)相对DMA控制块起始地址的偏移量。具体地,根据DMA控制块起始地址以及该偏移地址,可以确定输入数据在系统内存20中的实际地址。输出数据的偏移地址的定义与输入数据的偏移地址的定义相同。计算完成标志可以占用1个bit位(扩展为4个字节),其可以是在异构计算前被通用CPU10清0。在异构计算完成后,专用计算芯片30将该标志位改写为1。CPU10通过轮询该计算完成标志,确认异构计算是否完成。
专用计算芯片30用于配合通用CPU完成专用计算(如,矩阵乘以及大数模乘等)功能。该专用计算芯片30例如可以为现场可编程门阵列(Field-Programmable Gate Array,FPGA)芯片,专用集成电路(Appl icat ion Specific Integrated Circuit,ASIC)芯片,图形处理器(Graphics Process ing Unit,GPU)芯片等。通用CPU10计算效率较低,使用专用计算芯片30进行计算,性价比更高。
设备内存40用于存储专用计算芯片30的数据。具体地,当开始进行异构计算时,专用计算芯片30可以从设备内存40中读取输入数据。当异构计算完成时,可以将输出数据写入设备内存40。
图1中,专用计算芯片30具体可以包括:DMA长度寄存器31、DMA控制块指针队列32、DMA数据传输模块33以及专用计算模块34。
DMA长度寄存器31用于存储输入数据的长度以及输出数据的长度。通常对于一次特定的异构计算,输入数据的长度以及输出数据的长度是固定的。也即通用CPU10可以根据当前所执行的异构计算方法来确定上述长度。
DMA控制块指针队列32用于存储多个DMA控制块指针,该DMA控制块指针指向系统内存20中的DMA控制块,其可以占用32bit位。具体地,在系统内存20中每构成一个DMA控制块,通用CPU10就可以向DMA控制块指针队列32写入与该DMA控制块对应的DMA控制块指针。由于针对一次异构计算就可以构成一个DMA控制块,所以DMA控制块指针也是与一次异构计算相对应的。当异构处理系统中有多个进程处理任务时,DMA控制块指针队列32中的多个DMA控制块指针就可以被同时读取,由此可以实现多次异构计算可以并行进行,这可以大大提高异构计算的效率。需要说明的是,此处的多次异构计算属于同一类型,如,均为加密计算等。
DMA数据传输模块33用于根据输入数据的长度、DMA控制信息的长度以及DMA控制块指针,将DMA控制信息以及输入数据从系统内存20搬移至设备内存40;还用于根据DMA控制信息以及输出数据的长度,将输出数据从设备内存40搬移至系统内存20。
专用计算模块34用于实现专用计算功能。具体地,用于对输入数据进行计算,并得到输出数据。
如前所述,图1中的通用CPU10可以调用专用计算芯片30进行异构计算。为了提高异构计算的性能,本说明书对直接内存存取方法进行了改进。在执行本说明书提供的用于异构计算的直接内存存取方法之前,可以先执行如下步骤:
1)通用CPU10根据当前异构计算方法,确定输入数据的长度和输出数据的长度,并把输入数据的长度和输出数据的长度写入DMA长度寄存器31。
2)通用CPU10准备异构计算的输入数据,并构造DMA控制信息。由上述内容可知,DMA控制信息可以包括:输入数据的偏移地址、输出数据的偏移地址以及计算完成标志。当DMA控制块中的内容按照DMA控制信息、输入数据以及输出数据存放时,对输入数据的偏移地址,可以根据DMA控制信息的长度来确定。由于DMA控制信息的长度=输入数据的偏移地址的长度+输出数据的偏移地址的长度+计算完成标志的长度=4+4+4=12。因此,输入数据的偏移地址可以为:12(此处为10进制表示方法)。对输出数据的偏移地址,可以根据DMA控制信息与输入数据的总长度来确定。假设输入数据的长度为100个字节,那么输出数据的偏移地址为:12+100=112(此处为10进制表示方法)。在完成上述构造过程之后,可以将DMA控制信息以及输入数据写入系统内存20的一个物理上连续的地址空间内,并将计算完成标志清0。
可以理解的是,由于输出数据的长度也是确定的,所以,在完成上述写入过程之后可以连续地预留上述长度的地址空间,以用于写入输出数据。系统内存20中写入数据的地址空间与预留的地址空间就构成了一个DMA控制块。
3)通用CPU10向DMA控制块指针队列32中写入DMA控制块指针,该DMA控制块指针指向构成的DMA控制块的起始地址。
需要说明的是,针对多次异构计算,当该多次异构计算属于同一类型(如,均为加密计算)时,上述步骤1)可以只执行一次,而步骤2)和步骤3)则可以是根据异构计算的次数循环多次执行的。
可以理解的是,在DMA控制块指针队列32中写入DMA控制块指针之后,就可以执行本说明书提供的用于异构计算的直接内存存取方法。
图2为本说明书一个实施例提供的直接内存存取方法流程图。所述方法的执行主体可以为图1中的专用计算芯片30。如图2所示,所述方法具体可以包括:
步骤210,从DMA控制块指针队列中读取DMA控制块指针。
此处的DMA控制块指针指向DMA控制块的起始地址,从而根据该指针可以直接对DMA控制块的内容进行访问,由此可以减少对系统内存20的访问次数,从而可以降低DMA传输延迟。
具体地,专用计算芯片30可以轮询检查DMA控制块指针队列32是否为空。如果不为空,则可以从队列的头部读取DMA控制块指针。本说明书提供的DMA控制块指针队列32由于可以同时存放多个DMA控制块指针,所以可以更加方便的支持DMA异步操作,更加方便的支持多进程各自独立进行DMA操作,提高了DMA的传输效率。
步骤220,根据DMA控制块指针,在系统内存中确定对应的DMA控制块。
以图1为例来说,当读取DMA控制块指针A时,可以确定DMA控制块A;当读取DMA控制块指针B时,可以确定DMA控制块B。可以理解的是,在该步骤中读取到的DMA控制块的内容只包括DMA控制信息和输入数据。
步骤230,确定DMA控制信息和输入数据的总长度。
根据上述内容可知,本说明书中的DMA控制信息可以包括:输入数据的偏移地址、输出数据的偏移地址以及计算完成标志,且其具有固定长度。该固定长度为上述三者的长度之和。在DMA控制信息的长度固定时,上述总长度的确定过程可以为:从DMA长度寄存器31中读取输入数据的长度。根据固定长度以及输入数据的长度,确定总长度。
步骤240,根据DMA控制块指针以及总长度,将DMA控制信息和输入数据搬移至设备内存。
此处可以是由DMA数据传输模块33根据DMA控制块指针以及总长度,将DMA控制信息和输入数据搬移至设备内存40。
在一种实现方式中,在执行上述搬移操作之前,可以先在设备内存40中划分一块物理上连续的地址空间。之后,可以根据DMA控制块指针以及总长度,从对应的DMA控制块中读取DMA控制信息和输入数据。此处,由于DMA控制块在系统内存20中占用物理上连续的地址空间,所以上述读取的操作也可以理解为是一种连读的读取操作。将DMA控制信息和输入数据写入设备内存40中预先划分的物理上连续的地址空间。可以理解的是,在执行上述写入操作之后,DMA控制信息和输入数据在设备内存40中的起始地址是确定的。
步骤250,对输入数据进行相应的计算,得到输出数据。
此处,可以是调用专用计算模块34对输入数据进行相应的计算。具体地,可以根据步骤240中确定的起始地址以及DMA控制信息中输入数据的偏移地址,确定输入数据在设备内存40的实际地址。之后,可以根据该实际地址,从设备内存40中读取该数据输入,并调用专用计算模块34对输入数据进行相应的计算。
步骤260,将输出数据写入设备内存。
具体地,可以根据步骤240中确定的起始地址以及DMA控制信息中输出数据的偏移地址,确定输出数据在设备内存40的实际地址。之后,可以将输出数据写入设备内存40中该实际地址对应的存储空间。
步骤270,获取输出数据的长度。
如,可以是从DMA长度寄存器31中读取输出数据的长度。
步骤280,根据DMA控制信息以及输出数据的长度,将输出数据从设备内存搬移至DMA控制块。
具体地,可以是根据DMA控制信息中的输出数据的偏移地址以及输出数据的长度,将输出数据从设备内存40搬移至DMA控制块。该搬移过程具体可以为:获取DMA控制信息和输入数据在设备内存40的起始地址。根据偏移地址以及起始地址,确定输出数据在设备内存40的第一实际地址。根据偏移地址以及DMA控制块指针,确定输出数据在DMA控制块的第二实际地址。根据第一实际地址以及输出数据的长度,从设备内存40中读取输出数据。将输出数据写入DMA控制块中第二实际地址对应的位置。因为DMA控制块位于系统内存20中,所以该写入的步骤也可以为:将输出数据写入系统内存20中第二实际地址对应的位置。
在执行完成步骤280之后,专用计算芯片30可以对DMA控制信息中的计算完成标志进行改写,如,可以将计算完成标志改写为1。通用CPU10可以轮询计算完成标志,当计算完成标志为1时,表示该异构计算完成,可以使用系统内存20中的输出数据。
综上,本说明书实施例提供的直接内存存取方法,可以避免单独的输出数据的DMA传输对系统内存的访问,利用从系统内存中获取输入数据的同时获取了输出数据的偏移地址。从而在异构计算完成后,直接根据该偏移地址进行输出数据的搬移。避免了通用CPU在其中的操作,减少了整个异构计算的延迟。此外,本说明书提供的DMA块指针队列每次只需要写入一个32bit的DMA块指针,数据量很小,直接对应一个通用CPU的原子写操作,提高了多进程进行并发操作的效率。
与上述直接内存存取方法对应地,本说明书一个实施例还提供的一种直接内存存取装置,如图3所示,该装置可以包括:
读取单元301,用于从直接内存存取DMA控制块指针队列中读取DMA控制块指针。
确定单元302,用于根据读取单元301读取的DMA控制块指针,在系统内存中确定对应的DMA控制块,该DMA控制块的内容包括DMA控制信息和输入数据。上述系统内存是指用于存储通用中央处理器CPU使用的数据的存储空间。
确定单元302,还用于确定DMA控制信息和输入数据的总长度。
可选地,DMA控制信息可以具有固定长度。确定单元302具体可以用于:
从DMA长度寄存器中读取输入数据的长度。该输入数据的长度是由通用CPU根据当前所执行的异构计算方法确定的。
根据固定长度以及输入数据的长度,确定总长度。
搬移单元303,用于根据读取单元301读取的DMA控制块指针以及确定单元32确定的总长度,将DMA控制信息和输入数据搬移至设备内存。该设备内存是指用于存储专用计算芯片的数据的存储空间。
此处的搬移单元303可以由图1中的DMA数据传输模块33实现。
计算单元304,用于对输入数据进行相应的计算,得到输出数据。
此处的计算单元304可以由图1中的专用计算模块34实现。
写入单元305,用于将计算单元304计算的输出数据写入设备内存。
获取单元306,用于获取输出数据的长度。
搬移单元303,还用于根据DMA控制信息以及获取单元306获取的输出数据的长度,将输出数据从设备内存搬移至DMA控制块。
可选地,上述DMA控制信息可以包括输出数据的偏移地址。
搬移单元303具体可以用于:
根据输出数据的偏移地址以及输出数据的长度,将输出数据从设备内存搬移至DMA控制块。
本说明书上述实施例装置的各功能模块的功能,可以通过上述方法实施例的各步骤来实现,因此,本说明书一个实施例提供的装置的具体工作过程,在此不复赘述。
本说明书一个实施例提供的直接内存存取装置,读取单元301从直接内存存取DMA控制块指针队列中读取DMA控制块指针。确定单元302根据DMA控制块指针,在系统内存中确定对应的DMA控制块。确定单元302,还用于确定DMA控制信息和输入数据的总长度。搬移单元303根据DMA控制块指针以及总长度,将DMA控制信息和输入数据搬移至设备内存。计算单元304对输入数据进行相应的计算,得到输出数据。写入单元305将输出数据写入设备内存。获取单元306获取输出数据的长度。搬移单元303根据DMA控制信息以及输出数据的长度,将输出数据从设备内存搬移至DMA控制块。由此,以提高异构计算的性能。
需要说明的是,本说明书实施例提供的直接内存存取装置可以为图1中专用计算芯片30中的一个模块或者单元。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本说明书所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。
以上所述的具体实施方式,对本说明书的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本说明书的具体实施方式而已,并不用于限定本说明书的保护范围,凡在本说明书的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本说明书的保护范围之内。