CN111309384A - 针对硬件加速器的软硬件交互方法、装置和存储介质 - Google Patents
针对硬件加速器的软硬件交互方法、装置和存储介质 Download PDFInfo
- Publication number
- CN111309384A CN111309384A CN202010079758.4A CN202010079758A CN111309384A CN 111309384 A CN111309384 A CN 111309384A CN 202010079758 A CN202010079758 A CN 202010079758A CN 111309384 A CN111309384 A CN 111309384A
- Authority
- CN
- China
- Prior art keywords
- data
- sub
- hardware
- thread
- result
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 63
- 230000003993 interaction Effects 0.000 title claims abstract description 34
- 238000004364 calculation method Methods 0.000 claims abstract description 16
- 230000008569 process Effects 0.000 claims description 20
- 230000005540 biological transmission Effects 0.000 claims description 9
- 230000002452 interceptive effect Effects 0.000 claims description 4
- 238000004590 computer program Methods 0.000 claims description 3
- 238000012545 processing Methods 0.000 description 9
- 238000010586 diagram Methods 0.000 description 6
- 238000012790 confirmation Methods 0.000 description 4
- 238000013461 design Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 238000007792 addition Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000005641 tunneling Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3818—Decoding for concurrent execution
- G06F9/382—Pipelined decoding, e.g. using predecoding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Abstract
本发明提供一种针对时间序列加速器的软硬件交互方法、装置和存储介质,所述交互方法包括:主线程步骤,用于建立多个子线程,生成编译器调用指令,并生成相应队列;按所述多个子线程分别执行基于时间序列加速器的软硬件交互流程分解出的多个流水线的任务,所述多个流水线包括:第一流水线,发送数据至指定硬件;第二流水线,发送指令和结果相关信息给所述指定硬件;第三流水线,发送硬件计算指令;以及第四流水线,从指定硬件读取结果数据;其中,多个子线程以并行的方式执行所述四个流水线的任务。本发明实施例的方法,能够提高硬件资源的利用率。
Description
技术领域
本发明涉及计算机系统领域,更具体而言,涉及一种针对时间序列加速器的软硬件高效交互方法、装置和存储介质。
背景技术
在大数据时代下,随着物联网、云计算和互联网等技术的发展,在各类应用场景下产生的大量数据,正在以惊人的规模持续增长和积累。而随着晶体管工艺的提升,量子隧穿效应将成为无法避免的限制,“摩尔定律“即将失效,人类社会也正在步入“后摩尔时代”。专用计算架构成为“后摩尔时代”的重要机遇所在。专用芯片作为协处理器迎来了“黄金”时代。专用芯片基本上都是采用类似于单指令多数据流(SIMD:Single InstructionMultiple Data)设计架构,如图形处理器(GPU:Graphics Processing Unit),张量处理器(TPU:Tensor Processing Unit)等,这些专用芯片可用作时间序列加速器来加速数据处理。
数据传输效率是体现性能的关键。现阶段在使用这些专用芯片作为硬件加速器处理数据时,需要进行数据的搬运,经历数据的传输、计算、结果读回三个步骤,也就是说,在主机加速器的交互中,从主机端搬运数据到协处理器端(硬件加速器),等待协处理器端对接收的数据计算完成,然后再从协处理器端读取计算完成的结果数据。此过程为一个串行的过程,导致数据传输效率受限,系统等待时间比较长,影响了任务处理的吞吐量,从而影响了硬件资源的利用率。
如何减少系统的等待时间和提高硬件资源利用率,是一个有待解决的问题。
发明内容
鉴于此,本发明实施例提供了一种针对加速器的软硬件交互方法、装置和存储介质,以消除或改善现有技术中存在的一个或更多个缺陷。
本发明的技术方案如下:
根据本发明的一方面,提供了一种针对时间序列加速器的软硬件交互方法、装置和存储介质,该方法包括以下步骤:
主线程步骤,用于建立多个子线程,生成编译器调用指令,并生成数据ID队列、指令和结果ID队列以及结果ID队列;
按所述多个子线程分别执行基于时间序列加速器的软硬件交互流程分解出的多个流水线的任务,所述多个流水线包括:第一流水线,发送数据至指定硬件;第二流水线,发送指令和结果相关信息给所述指定硬件;第三流水线,发送硬件计算指令;以及第四流水线,从指定硬件读取结果数据;
其中,执行所述第一流水线的子线程由编译器调用指令唤醒,按照所述数据ID队列进行数据向指定硬件的发送,并在发送完毕后唤醒下一子线程;
执行所述第二流水线的子线程基于所述指令和结果ID队列向所述指定硬件发送指令和结果相关信息;
执行所述第三流水线的子线程基于前一子线程的唤醒向指定硬件发送开启计算指令;
执行所述第四流水线的子线程基于前一子线程的唤醒来根据所述结果ID队列读取结果数据。
可选地,所述多个子线程包括第一子线程、第二子线程和第三子线程,其中,第一子线程用于执行第一流水线的任务,第二子线程用于执行所述第二流水线和第三流水线的任务,第三子线程用于执行第四流水线的任务。
可选地,所述主线程步骤还包括:在建立了多个子线程后初始化多个预建立的数据结构,所述多个数据结构用于保存所述软硬件交互流程中被访问的不同类别的数据。
可选地,所述多个数据结构采用基于锁的map并发数据结构。
可选地,所述多个数据结构为多个数据表,所述多个数据表包括:应用数据表、应用结果表、编译数据表、编译结果表、硬件数据表和硬件结果表。
所述主线程步骤还包括:在生成编译器调用指令后,添加源数据到所述应用数据表,并调用上层应用访问所述应用数据表,以获取所述应用数据表中的数据ID来生成数据ID队列;以及调用上层应用生成二进制指令数据和结果ID;
所述执行所述第一流水线的子线程由所述编译器调用指令唤醒,按照所述数据ID队列进行数据向指定硬件的发送,并在发送完毕后唤醒下一子线程,包括:执行所述第一流水线的第一子线程由所述编译器调用指令唤醒,访问所述应用数据表和数据ID队列,生成编译信息记录到所述编译数据表中,将所述编译数据表中的数据发送给所述指定硬件,并在发送数据成功的情况下在所述硬件数据表中生成数据记录;
所述执行所述第二流水线的子线程基于所述指令和结果ID队列向所述指定硬件发送指令和结果相关信息,包括:执行所述第二流水线的第二子线程访问指令和结果ID队列,填写编译结果表和硬件结果表,并向所述指定硬件传送指令和结果相关信息;以及执行所述第三流水线,发送硬件计算指令,并唤醒所述多个子线程中的用于执行所述第四流水线的第三子线程;
所述按所述多个子线程分别执行基于时间序列加速器的软硬件交互流程分解出的多个流水线的任务,还包括:执行第三子线程,读取在编译结果表中的结果数据,并将读取的结果数据添加到应用数据结果表。
可选地,所述方法还包括:在所述发送数据子线程中发送数据失败的情况下,删除编译数据表中对应的项,并将数据ID重新加入到所述数据ID队列中。
可选地,所述应用数据表和所述应用结果表包括如下信息:名称、ID、行大小、列大小、数据大小、数据内存中的地址;所述编译数据表和编译结果表包括如下信息:id、行大小、列大小、数据大小、数据内存中的地址;所述硬件数据表和硬件结果表包括如下信息:ID、数据内存中的地址。
可选地,所述方法还包括:所述多个子线程以并行方式执行不同软硬件交互流程的相应流水线。
可选地,所述方法还包括:所述多个子线程被唤醒之前处于等待状态;在所述数据ID队列边为空时,退出所述第一子线程;在所述指令和结果ID队列为空时,退出所述第二子线程;在所述结果ID队列为空时,退出所述第三子线程。
根据本发明的另一方面,还提供一种针对硬件加速器的软硬件交互装置,包括处理器和存储器,所述存储器中存储有计算机指令,所述处理器用于执行所述存储器中存储的计算机指令,当所述计算机指令被处理器执行时该装置实现如前所述方法的步骤。
根据本发明的又一方面,提供一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如前所述方法的步骤。
本发明实施例实现了一种基于流水线的软硬件交互,通过将现有的主机跟加速器交互的串行过程解耦合,转化为流水线式并行执行,也即通过流水线的方式解耦合数据传输-计算-结果读回操作,可以大幅提升任务处理的吞吐率,缩短任务执行总时间,极大提高专用芯片的性能。
本领域技术人员将会理解的是,能够用本发明实现的目的和优点不限于以上具体所述,并且根据以下详细说明将更清楚地理解本发明能够实现的上述和其他目的。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,并不构成对本发明的限定。在附图中:
图1为本发明一实施例中针对时间序列加速器的软硬件交互方法的流程示意图。
图2为本发明一实施例中各子线程的执行示意图。
图3为本发明一实施例中数据表结构示意图。
图4为本发明一实施例中流水线设计示意图。
图5为本发明一实施例中系统主线程流程示意图。
图6为本发明一实施例中发送数据子线程流程示意图。
图7为本发明一实施例中发送指令和结果信息子线程流程示意图。
图8为本发明一实施例中读取结果数据子线程流程示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施方式和附图,对本发明做进一步详细说明。在此,本发明的示意性实施方式及其说明用于解释本发明,但并不作为对本发明的限定。
在此,还需要说明的是,为了避免因不必要的细节而模糊了本发明,在附图中仅仅示出了与根据本发明的方案密切相关的结构和/或处理步骤,而省略了与本发明关系不大的其他细节。
应该强调,术语“包括/包含”在本文使用时指特征、要素、步骤或组件的存在,但并不排除一个或更多个其它特征、要素、步骤或组件的存在或附加。
在此,还需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互结合。
原有的软硬件交互流程为,从主机端搬运数据到加速器,然后等待加速器计算完成,最后从加速器读取计算结果,这种串行交互流程大大限制了数据传输速率。为了更好地发挥专用芯片的性能,本发明提出了一种基于流水线的针对加速器的软硬件交互方法,所针对的加速器例如可以时间序列加速器,但并不限于此。为了提高主机跟时间序列专用加速器的交互能力,本发明实施例提供的技术方案为,将现有的主机跟加速器交互的串行过程解耦合,转化为流水线式并行执行,也即通过流水线的方式解耦合数据传输-计算-结果读回操作。本发明实施例能够大幅提升任务处理的吞吐率,缩短任务执行总时间,极大提高专用芯片的性能。由于本发明涉及专用加速器,本发明涉及跟编译器和上层应用的交互通信。
图1所示为本发明实施例中针对时间序列加速器的软硬件交互方法的流程示意图。如图1所示,该交互方法包括以下步骤:
步骤S110,执行主线程,主线程用于建立多个子线程,进行编译器指令调用,并生成数据ID队列、指令和结果ID队列以及结果ID队列。
本步骤中,主线程建立多个子线程,用于分线程执行主机和加速器的数据传输-计算-结果读回操作。作为示例,主线程可以建立3个子线程,但本发明并不限于此,而是还可以建立更多或更少的子线程。
主线程在建立多个子线程后,可进行编译器指令调用,以调用编译器。在生成编译器调用指令之后,调用上层系统(或称上层应用)添加源数据到预先建立的数据结构中(如访问应用数据表中),并通过获取数据ID获得数据ID队列,基于为数据ID分配的结果ID生成结果ID队列,并生成二进制指令数据,进一步基于二进制指令数据和结果ID生成指令和结果ID队列。调用上层系统完毕后,主线程返回,进入等待结果数据阶段。根据结果ID获取到所有结果数据后,向各子线程发出退出指令。
此处说明上层系统所做的处理。在被主线程调用后,上层系统首先访问应用数据表,获取所有的数据ID。对于每一项数据,将其ID写入到数据ID队列中,供发送数据子线程(子线程1)使用。同时,为这些数据分配结果ID,并生成相应的结果数据相关信息写入结果ID队列,此外,还生成二进制指令,并基于二进制指令和结果数据相关信息写入指令和结果ID队列,供发送指令和结果信息子线程(子线程2)使用。上层系统处理完毕后,唤醒发送数据子线程,即子线程1,开始指令执行。
在本发明一实施例中,由于在针对时间序列加速器的软硬件交互过程中会涉及到数据的并发访问,因此在执行上述步骤S110之前,可在内存中建立一些数据结构用于保存相关的数据信息并能够提供并发访问。
为了减少并发时产生的冲突,本发明实施例的数据结构被设计为根据系统功能将数据信息分成了多个数据表进行存储,如图3所示,这多个数据表分别为应用数据表(APP-DTab),应用结果表(APP-RTab),编译数据表(C-DTab),编译结果表(C-RTab),硬件数据表(H-DTab)和硬件结果表(H-RTab)。应用数据表(APP-DTab)和应用结果表(APP-RTab)对应的数据结构中,存储的数据信息可包括:name(名称)、id(身份标识)、row(行大小)、col(列大小)、len(数据大小)、addr(数据内存中的地址);编译数据表(C-DTab)和编译结果表(C-RTab)存储的信息可包括:id、row、col、len、addr。硬件数据表(H-DTab)和硬件结果表(H-RTab)存储的信息包括:id、addr。
为了能够加快数据查询速度,本发明实施例进一步采用了C++的map数据结构来存放数据。同时可采用C++11的并发API实现了基于锁的map并发数据结构(lock_map),并使用lock_map来实现相关的表。lock_map的具体实现如下所述:建立一个容器,容器的每项是一个指向列表(list)的指针,该列表的每一个项用于存放map键值对<key,value>,可以通过key索引到对应的value值。存放键值对<key,value>时,首先对key值进行哈希操作,得到此键值对在哈希表中存放的位置,即对应到在容器中的下标。然后将此键值对存放到容器对应项所指向的list中。同理,获取key对应的value时,只需对key进行哈希操作,再到对应的list中获取即可。在本发明实施例的具体应用示例中,比如对于应用数据表,key可存放ID值,value可存放保存了{名称、行大小、列大小、数据大小、数据内存中的地址}的数据结构,这样就能够通过ID来索引到具体的表项内容。加锁操作是针对每个list进行的,而不是对整个map进行加锁,这样既能减少并发访问时的冲突,又能在访问没有冲突时提升数据查询的效率。本发明实施例中,整个lock_map用于实现表的组建,以及根据需求建立起这样的索引。
可选地,在主线程中,还包括:在建立子线程之前对预先建立的数据结构进行初始化,例如清空图1中所示的各列表中的数据。
步骤S120,按多个子线程分别执行基于时间序列加速器的软硬件交互流程分解出的多个流水线的任务。
在一实施例中,针对时间序列加速器的软硬件交互过程,即主机和加速器的数据传输-计算-结果读回操作可设计四条数据传输流水线实现。图4为本发明实施例整个系统中流水线设计图。如图4所示,该四个流水线包括:第一流水线,用于发送数据至指定硬件(即作为协处理器的加速器);第二流水线,用于发送指令和结果相关信息给硬件;第三流水线,用于发送硬件计算指令给硬件,以由硬件进行计算;以及第四流水线,用于从硬件读取结果数据。
在主线程生成三个子线程的情况下,该三个子线程可以包括:子线程1:发送数据子线程;子线程2:发送指令和结果信息子线程;以及子线程3:读取结果数据子线程。也即,子线程1用于执行第一流水线的任务,子线程2用于执行第二流水线和第三流水线的任务,子线程3用于执行第四流水线的任务。
此外,在主线程生成四个子线程的情况下,可以每一个子线程执行一个流水线。在主线程生成两个子线程的情况下,也可以每个线程执行两个流水线。下面将仅就三个子线程的情况进行描述。
第一流水线主要用于在编译器被调用时完成发送数据的工作,此过程中要访问访问APP-DTab、H-DTab和C-DTab数据表,在子线程1中执行,详细操作如图6所示。第二流水线主要用于在编译器被调用时完成指令和结果数据相关信息传输工作,此过程需要访问C-RTab和H-RTab数据表。第三流水线主要用于完成发送开启计算指令,等待硬件进行计算的工作。第二流水线和第三流水线在子线程2中执行,其详细操作如图7所示。第四流水线主要用于完成读回结果数据的工作,此过程需要访问C-RTab和APP-RTab数据表,第四流水线在子线程3中执行,其详细操作如图8所示。
下面结合图5-图8对本发明实施例的主线程和子线程进行详细描述。
图5为本发明实施例中系统主线程流程图,如图5所示,主线程完成数据结构的初始化并建立三个子线程,分别为:发送数据子线程(子线程1),执行第一流水线的任务;发送指令和结果信息子线程(子线程2),执行第二流水线和第三流水线的任务;读取结果数据子线程(子线程3),执行第四流水线的任务。三个子线程用并行的方式执行不同软硬件交互流程的相应流水线。随后,执行编译器调用指令后,主线程并把源数据添加到APP-DTab中,并调用上层系统,由上层系统通过APP-DTab获取所有数据ID并写入数据ID队列,上层系统还对每个数据ID分配对应的结果ID并通过结果ID生成结果ID队列,此外,对每个数据ID生成二进制指令数据及结果ID,写入指令和结果ID队列。写入完毕后,主线程唤醒发送数据子线程(子线程1)。同时,主线程根据结果ID获取结果信息,并在接收完所有结果信息后给子线程发送退出信号,等待子线程退出,并于子线程退出后,释放相关内存。
图6为本发明实施例中发送数据子线程(子线程1)的流程示意图,如图6所示,本子线程在主线程创建完之后进入等待状态,直到被编译器调用指令唤醒,于是开始执行第一流水线的任务。在执行第一流水线任务时,先访问数据ID队列并判断其是否为空,若为空则进一步判断是否退出子线程1:如果此时已收到主线程发送的退出信号,则退出子线程,并向主线程发送退出确认信号,否则回到等待状态,即等待通过被编译器调用而被唤醒;若数据ID队列不为空,则从此数据ID队列中获取数据信息,并判断此数据是否在C-DTab中,若此数据已经在C-DTab中,则继续确定数据ID队列是否为空,并在数据ID队列不为空的情况下从数据ID队列中取出下一个ID进一步确定其数据是否已经在C-DTab中。若数据ID队列中的数据不在C-DTab中,则为数据在硬件中分配内存,若分配失败,则记录错误信息,并把此数据重新加入到数据ID队列中;若分配成功则把数据添加到C-DTab中,并将表中数据发送给硬件,若数据发送成功,则保留发送成功的数据在C-DTab中的项,并生成相关数据记录到H-DTab中;若数据发送失败,则删除C-DTab中的对应项,并将数据ID重新加入到数据ID队列。发送完APP-DTab中所有的数据(即数据ID队列变为空)后,子线程1唤醒子线程2,然后判断是否退出,如果不退出,继续回到等待状态,否则进入退出程序,退出子线程。
图7为本发明实施例中发送指令和结果信息子线程(子线程2)的流程示意图,如图7所示,本子线程2在主线程创建完之后进入等待状态,直到子线程1将其唤醒,执行第二流水线和第三流水线的任务。子线程2被唤醒后访问并判断指令和结果ID队列是否为空,若为空则进一步判断是否退出子线程2:如果此时已收到主线程发送的退出信号,则退出子线程2,并向主线程发送退出确认信号,否则回到等待唤醒状态;若指令和结果ID队列不为空,则获取结果数据的相关信息,并为结果数据在硬件中分配硬件内存,并生成相关的数据记录;若内存分配失败,则记录错误信息,并把数据重新加入到指令和结果ID队列中;内存分配成功则将结果数据信息写入到C-RTab和H-RTab中。然后获取硬件锁,将结果数据相关信息传输给硬件。接下来获取硬件锁,传输指令信息,至此完成第二流水线的任务。之后执行第三流水线的任务,发送给硬件开启计算的指令,并唤醒读取结果数据子线程(子线程3)。然后继续访问并判断指令和结果ID队列是否为空,由此判断本子线程是否需要退出,如果不退出,则进入到等待唤醒状态,否则进入退出子线程。
图8为本发明实施例中读取结果数据子线程(子线程3)的流程示意图,如图8所示,本子线程3在主线程创建完之后进入等待状态,直到发送指令和结果信息子线程(子线程2)将其唤醒,执行第四流水线的任务。子线程3访问并判断结果ID队列是否为空,若为空则进一步判断是否退出子线程:此时已收到主线程发送的退出信号,则退出子线程3,并向主线程发送退出确认信号,否则回到等待唤醒状态;若结果ID队列不为空,则从结果ID队列中取出一结果ID,继续确定该结果ID对应的数据是否在C-RTab中,若此数据已经在C-RTab中,则获取硬件锁并读取结果数据;如果确定结果ID队列中数据不在C-RTab中,则继续确定数据ID队列是否为空,并在数据ID队列不为空的情况下继续取出结果ID队列中下一个结果ID进行判断,确定该下一个结果ID是否在C-RTab中,并在确定在C-RTab中的情况下进一步获取硬件锁并读取结果数据。结果数据读取完毕后,将获取的结果数据添加到APP-RTab中。之后继续访问并确定结果ID队列是否为空,由此确定本子线程是否退出,如果没有退出,则进入到等待唤醒状态,否则进入退出子线程,并向主线程发送退出确认信号。
当主线程收到了所有子线程的退出信号后,会退出主线程,并释放相关内存。
基于上面的各个独立的子线程,在主机跟时间序列专用加速器的交互过程中,通过流水线的方式将数据传输-计算-结果读回操作解耦合,如图4所示,将“数据传输-计算-结果读回操作”这个流程解耦成四条流水线,即“发送数据”、“发送指令和结果信息”、“硬件计算”、“读取结果数据”,分别用于:1)搬运数据给底层硬件;2)搬运指令和结果数据相关信息给底层硬件;3)开启底层硬件计算操作,以及4)从底层硬件读取结果数据。图4中的1、2、3表示3个并行执行的不同任务对应的不同流程,即第一个流程、第二个流程和第三个流程,每个流程均包含“发送数据”、“发送指令和结果信息”、“硬件计算”、“读取结果数据”这四个完整的操作。虽然图4中仅示出了3个流程,但本发明并不限于此,可以并行执行更多的流程。如图4所示,在第一个流程在启动第一任务的“硬件计算”的时候,第二个流程在针对第二任务“发送指令和结果信息”,第三个流程在执行第三任务的“发送数据”,这样将四条流水线以类似并行的方式执行,可以更高效完成数据传输-计算-结果读回操作,从而达到了理想的并行效果。
本发明实施例通过将数据传输-计算-结果读回操作解耦合,提升了任务处理的吞吐率,缩短了任务执行的总时间,不仅减少了系统的等待时间,还提高了硬件资源的利用率,从而提高了专用芯片的性能。
此外,本发明实施例还设计了并发map数据结构,用于保存数据信息,并通过C++11并发API实现基于条件唤醒线程功能实现对流水线的管理,从而实现了系统高并发的需求。
本发明实施例提供的如上方法可以通过计算机软件的形式来实现,其可以安装于CPU侧,通过与加速器硬件的交互来实现数据的高速处理。
相应地,本发明实施例还提供了一种针对硬件加速器的软硬件交互装置,该装置包括处理器和存储器,存储器中存储有计算机指令,处理器用于执行存储器中存储的计算机指令,当计算机指令被处理器执行时该装置实现如前所述方法的步骤。
实现本发明实施例的软件可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的有形存储介质中。
相应地,本公开还涉及如上存储介质,其上可以存储有计算机程序代码,当程序代码被执行时可以实现本发明的方法的各种实施例。
需要明确的是,本发明并不局限于上文所描述并在图中示出的特定配置和处理。为了简明起见,这里省略了对已知方法的详细描述。在上述实施例中,描述和示出了若干具体的步骤作为示例。但是,本发明的方法过程并不限于所描述和示出的具体步骤,本领域的技术人员可以在领会本发明的精神后,作出各种改变、修改和添加,或者改变步骤之间的顺序。
还需要说明的是,本发明中提及的示例性实施例,基于一系列的步骤或者装置描述一些方法或系统。但是,本发明不局限于上述步骤的顺序,也就是说,可以按照实施例中提及的顺序执行步骤,也可以不同于实施例中的顺序,或者若干步骤同时执行。
本发明中,针对一个实施方式描述和/或例示的特征,可以在一个或更多个其它实施方式中以相同方式或以类似方式使用,和/或与其他实施方式的特征相结合或代替其他实施方式的特征。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (11)
1.一种针对硬件加速器的软硬件交互方法,其特征在于,该方法包括以下步骤:
主线程步骤,用于建立多个子线程,生成编译器调用指令,并生成数据ID队列、指令和结果ID队列以及结果ID队列;
按所述多个子线程分别执行基于时间序列加速器的软硬件交互流程分解出的多个流水线的任务,所述多个流水线包括:第一流水线,发送数据至指定硬件;第二流水线,发送指令和结果相关信息给所述指定硬件;第三流水线,发送硬件计算指令;以及第四流水线,从指定硬件读取结果数据;
其中,执行所述第一流水线的子线程由编译器调用指令唤醒,按照所述数据ID队列进行数据向指定硬件的发送,并在发送完毕后唤醒下一子线程;
执行所述第二流水线的子线程基于所述指令和结果ID队列向所述指定硬件发送指令和结果相关信息;
执行所述第三流水线的子线程基于前一子线程的唤醒向指定硬件发送开启计算指令;
执行所述第四流水线的子线程基于前一子线程的唤醒来根据所述结果ID队列读取结果数据。
2.根据权利要求1所述的方法,其特征在于,所述多个子线程包括第一子线程、第二子线程和第三子线程,其中,第一子线程用于执行第一流水线的任务,第二子线程用于执行所述第二流水线和第三流水线的任务,第三子线程用于执行第四流水线的任务。
3.根据权利要求1所述的方法,其特征在于,所述主线程步骤还包括:在建立了多个子线程后初始化多个预建立的数据结构,所述多个数据结构用于保存所述软硬件交互流程中被访问的不同类别的数据。
4.根据权利要求3所述的方法,其特征在于,所述多个数据结构采用基于锁的map并发数据结构。
5.根据权利要求3所述的方法,其特征在于,所述多个数据结构为多个数据表,所述多个数据表包括:应用数据表、应用结果表、编译数据表、编译结果表、硬件数据表和硬件结果表;
所述主线程步骤还包括:在生成编译器调用指令后,添加源数据到所述应用数据表,并调用上层应用访问所述应用数据表,以获取所述应用数据表中的数据ID来生成数据ID队列;以及调用上层应用生成二进制指令数据和结果ID;
所述执行所述第一流水线的子线程由所述编译器调用指令唤醒,按照所述数据ID队列进行数据向指定硬件的发送,并在发送完毕后唤醒下一子线程,包括:执行所述第一流水线的第一子线程由所述编译器调用指令唤醒,访问所述应用数据表和数据ID队列,生成编译信息记录到所述编译数据表中,将所述编译数据表中的数据发送给所述指定硬件,并在发送数据成功的情况下在所述硬件数据表中生成数据记录;
所述执行所述第二流水线的子线程基于所述指令和结果ID队列向所述指定硬件发送指令和结果相关信息,包括:执行所述第二流水线的第二子线程访问指令和结果ID队列,填写编译结果表和硬件结果表,并向所述指定硬件传送指令和结果相关信息;以及执行所述第三流水线,发送硬件计算指令,并唤醒所述多个子线程中的用于执行所述第四流水线的第三子线程;
所述按所述多个子线程分别执行基于时间序列加速器的软硬件交互流程分解出的多个流水线的任务,还包括:执行第三子线程,读取在编译结果表中的结果数据,并将读取的结果数据添加到应用数据结果表。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
在所述第一子线程中发送数据失败的情况下,删除编译数据表中对应的项,并将数据ID重新加入到所述数据ID队列中。
7.根据权利要求5所述的方法,其特征在于,
所述应用数据表和所述应用结果表包括如下信息:名称、ID、行大小、列大小、数据大小、数据内存中的地址;
所述编译数据表和编译结果表包括如下信息:ID、行大小、列大小、数据大小、数据内存中的地址;
所述硬件数据表和硬件结果表包括如下信息:ID、数据内存中的地址。
8.根据权利要求5所述的方法,其特征在于,所述方法还包括:所述多个子线程以并行方式执行不同软硬件交互流程的相应流水线。
9.根据权利要求2所述的方法,其特征在于,所述方法还包括:
所述多个子线程被唤醒之前处于等待状态;
在所述数据ID队列边为空时,退出所述第一子线程;
在所述指令和结果ID队列为空时,退出所述第二子线程;
在所述结果ID队列为空时,退出所述第三子线程。
10.一种针对硬件加速器的软硬件交互装置,包括处理器和存储器,其特征在于,所述存储器中存储有计算机指令,所述处理器用于执行所述存储器中存储的计算机指令,当所述计算机指令被处理器执行时该装置实现如权利要求1至9中任意一项所述方法的步骤。
11.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至9中任意一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010079758.4A CN111309384B (zh) | 2020-02-04 | 2020-02-04 | 针对硬件加速器的软硬件交互方法、装置和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010079758.4A CN111309384B (zh) | 2020-02-04 | 2020-02-04 | 针对硬件加速器的软硬件交互方法、装置和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111309384A true CN111309384A (zh) | 2020-06-19 |
CN111309384B CN111309384B (zh) | 2021-03-02 |
Family
ID=71158189
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010079758.4A Active CN111309384B (zh) | 2020-02-04 | 2020-02-04 | 针对硬件加速器的软硬件交互方法、装置和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111309384B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080005534A1 (en) * | 2006-06-29 | 2008-01-03 | Stephan Jourdan | Method and apparatus for partitioned pipelined fetching of multiple execution threads |
US20080021955A1 (en) * | 2006-07-24 | 2008-01-24 | Raytheon Company | Message oriented middleware server pipeline architecture |
CN101661386A (zh) * | 2009-09-24 | 2010-03-03 | 成都市华为赛门铁克科技有限公司 | 多硬件线程处理器及其业务处理方法 |
US20100332787A1 (en) * | 2009-06-29 | 2010-12-30 | Grohoski Gregory F | System and Method to Manage Address Translation Requests |
CN103823672A (zh) * | 2014-01-08 | 2014-05-28 | 国电南瑞科技股份有限公司 | 综合监控培训系统及其实现方法 |
CN109558211A (zh) * | 2018-11-27 | 2019-04-02 | 上海瓶钵信息科技有限公司 | 保护可信应用与普通应用的交互完整性和保密性的方法 |
-
2020
- 2020-02-04 CN CN202010079758.4A patent/CN111309384B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080005534A1 (en) * | 2006-06-29 | 2008-01-03 | Stephan Jourdan | Method and apparatus for partitioned pipelined fetching of multiple execution threads |
US20080021955A1 (en) * | 2006-07-24 | 2008-01-24 | Raytheon Company | Message oriented middleware server pipeline architecture |
US20100332787A1 (en) * | 2009-06-29 | 2010-12-30 | Grohoski Gregory F | System and Method to Manage Address Translation Requests |
CN101661386A (zh) * | 2009-09-24 | 2010-03-03 | 成都市华为赛门铁克科技有限公司 | 多硬件线程处理器及其业务处理方法 |
CN103823672A (zh) * | 2014-01-08 | 2014-05-28 | 国电南瑞科技股份有限公司 | 综合监控培训系统及其实现方法 |
CN109558211A (zh) * | 2018-11-27 | 2019-04-02 | 上海瓶钵信息科技有限公司 | 保护可信应用与普通应用的交互完整性和保密性的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111309384B (zh) | 2021-03-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7962923B2 (en) | System and method for generating a lock-free dual queue | |
US8145817B2 (en) | Reader/writer lock with reduced cache contention | |
US8458721B2 (en) | System and method for implementing hierarchical queue-based locks using flat combining | |
US7805582B2 (en) | Method of managing memory in multiprocessor system on chip | |
US9123010B2 (en) | Ledger-based resource tracking | |
US20190146847A1 (en) | Dynamic distributed resource management | |
US20100131720A1 (en) | Management of ownership control and data movement in shared-memory systems | |
US20160092265A1 (en) | Systems and Methods for Utilizing Futures for Constructing Scalable Shared Data Structures | |
US10360079B2 (en) | Architecture and services supporting reconfigurable synchronization in a multiprocessing system | |
US11099790B2 (en) | Parallel key value based multithread machine learning leveraging KV-SSDS | |
US8719829B2 (en) | Synchronizing processes in a computing resource by locking a resource for a process at a predicted time slot | |
Peng et al. | FA-Stack: A fast array-based stack with wait-free progress guarantee | |
CN111309384B (zh) | 针对硬件加速器的软硬件交互方法、装置和存储介质 | |
CN109901913A (zh) | 一种可控重复执行次数的多线程事务存储编程模型方法 | |
CN112765088A (zh) | 利用数据标签提高多计算单元平台上数据共享的方法 | |
CN112346879B (zh) | 进程管理方法、装置、计算机设备及存储介质 | |
Troendle et al. | A specialized concurrent queue for scheduling irregular workloads on GPUs | |
WO2019008715A1 (ja) | データロードプログラム、データロード方法およびデータロード装置 | |
US9141310B1 (en) | Methods and apparatuses for shared state information among concurrently running processes or threads | |
Li et al. | A parallel particle swarm optimization framework based on a fork-join thread pool using a work-stealing mechanism | |
Reinhard et al. | Ghost Signals: Verifying Termination of Busy Waiting: Verifying Termination of Busy Waiting | |
US8239865B2 (en) | Waiting and synchronization of parallel task executions based on task groups and task object representations | |
TW201005649A (en) | Operating system fast run command | |
Zhang et al. | Compiler‐driven approach for automating nonblocking synchronization in concurrent data abstractions | |
CN115390921A (zh) | 一种调度方法、装置、系统和计算设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |