数据传输方法及装置与流程

文档序号:17078920发布日期:2019-03-09 00:01阅读:230来源:国知局
数据传输方法及装置与流程

本发明涉及计算机技术领域,尤其涉及一种数据传输方法及装置。



背景技术:

随着摩尔定律的终结,专用芯片作为协处理器迎来了“黄金”时代。专用芯片基本上都是采用类似于单指令多数据流(simd)的设计架构处理数据,例如,一些图形处理器(gpu)、张量处理器(tpu)等。这些专用芯片在处理数据时,数据搬运是影响其性能的关键,包括从主机端搬运到协处理器端,以及从协处理器端读取结果数据。为了提高数据传输效率,各界提出了多种优化方法,例如,采用新型的存储器gddr5x将gpu的带宽提高到12gbps,通过数据压缩减少数据传输时间等。通过这些技术,用户在调用协处理器加速应用时的等待时间减少了,系统的流畅度提升了。同时,用户对传输效率的要求也不断提高。因此,主机端和协处理器端之间的数据传输效率仍需进一步提高。



技术实现要素:

有鉴于此,本发明提供了一种数据传输方法及装置,以提高主机端系统的响应速度,从而进一步提高主机端和协处理器端之间的数据传输效率。

为了实现上述目的,本发明采用以下方案:

在本发明一个实施例中,数据传输方法,包括:

在内存中建立用于保存应用层数据、编译相关数据及硬件层数据的并发数据结构,建立多个线程,以及获取待处理数据所对应的应用层数据并保存至所述并发数据结构;

利用所述多个线程并发访问所述并发数据结构,并按设定功能分工执行操作,以将所述待处理数据所对应的应用层数据转换成所述待处理数据所对应的硬件层数据;

将所述待处理数据所对应的硬件层数据发送至协处理器进行处理。

在本发明一个实施例中,数据传输装置,包括:

构建单元,用于在内存中建立用于保存应用层数据、编译相关数据及硬件层数据的并发数据结构,建立多个线程,以及获取待处理数据所对应的应用层数据并保存至所述并发数据结构;

处理单元,用于利用所述多个线程并发访问所述并发数据结构,并按设定功能分工执行操作,以将所述待处理数据所对应的应用层数据转换成所述待处理数据所对应的硬件层数据;

发送单元,用于将所述待处理数据所对应的硬件层数据发送至协处理器进行处理。

在本发明一个实施例中,计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述实施例所述方法的步骤。

在本发明一个实施例中,计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述实施例所述方法的步骤。

本发明的数据传输方法、数据传输装置、计算机设备及计算机可读存储介质,通过在内存中建立并发数据结构,建立多个线程,利用所述多个线程并发访问所述并发数据结构,并按设定功能分工执行操作,将待处理数据由应用层数据转换成相应的硬件层数据,能够实现主机端在对协处理器进行数据响应时不同操作的并发执行,减少主机端系统的响应时间和计算资源的最大化利用,从而提高主机端和协处理器端之间的数据传输效率。

附图说明

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

图1是本发明一实施例的数据传输方法的流程示意图;

图2是本发明一实施例中在内存中建立用于保存应用层数据、编译相关数据及硬件层数据的并发数据结构的方法流程示意图;

图3是本发明一实施例中利用多个线程并发访问并发数据结构并按设定功能分工执行操作生成硬件层数据的方法流程示意图;

图4是本发明另一实施例中利用多个线程并发访问并发数据结构并按设定功能分工执行操作生成硬件层数据的方法流程示意图;

图5是本发明另一实施例的数据传输方法的流程示意图;

图6是本发明一实施例中数据结构的示意图;

图7是本发明一实施例中多线程的示意图;

图8是本发明一实施例的主机端的系统运行流程示意图;

图9是本发明一实施例的数据传输的交互示意图;

图10是本发明一实施例的数据传输装置的结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例做进一步详细说明。在此,本发明的示意性实施例及其说明用于解释本发明,但并不作为对本发明的限定。

图1是本发明一实施例的数据传输方法的流程示意图。如图1所示,一些实施例的数据传输方法,可包括:

步骤s110:在内存中建立用于保存应用层数据、编译相关数据及硬件层数据的并发数据结构,建立多个线程,以及获取待处理数据所对应的应用层数据并保存至所述并发数据结构;

步骤s120:利用所述多个线程并发访问所述并发数据结构,并按设定功能分工执行操作,以将所述待处理数据所对应的应用层数据转换成所述待处理数据所对应的硬件层数据;

步骤s130:将所述待处理数据所对应的硬件层数据发送至协处理器进行处理。

上述步骤s110~步骤s130可以由主机端执行。该主机端可以是各种通用处理器,例如,个人计算机、平板电脑、手机、服务器等。上述协处理器可以是各种能够协助主机端完成某种或某些处理任务以提高处理速度的处理器、加速器,例如,各种专用芯片,更具体地,例如,时间序列专用加速器或芯片。该主机端与该协处理器连接,能够将待处理数据传输给协处理器进行处理,并获取相应的处理结果。

在上述步骤s110中,该并发数据结构可以用于保存相关的数据并能够提供并发访问,可以是基于锁的或者不基于锁的并发数据结构,可以被多个线程并发访问。其中的应用层数据可以包括协处理器处理前后的数据所对应的应用层数据;编译相关数据可以包括协处理器处理前的数据所对应的应用层数据经过编译器编译的数据,还可包括协处理器处理前的数据所对应的应用层数据中待编译器编译的数据;硬件层数据可以包括协处理器处理前后的数据所对应的硬件层数据。保存应用层数据、编译相关数据及硬件层数据可以保存在一个或多个数据表中。在内存中建立并发数据结构,可以便于上述多个线程的快速、并发访问,提高数据读写速度。

该待处理数据可以是从硬盘读取得到,或者实时接收得到。硬盘或实时接收的数据可以包含很多属性(例如,名称、标识号、数据大小、地址等)的信息,可以从中选取或新增所需的属性的信息构成该待处理数据所对应的应用层数据。该待处理数据可以以数据流、数据段等形式获取至线程,该数据段可以是由主机端进行分段得到。该待处理数据可以是各种类型、种类或领域的数据,例如,时间序列数据。该待处理数据是指待协处理器处理的数据。

在上述步骤s120中,该设定功能分工,例如,可以是将并发数据结构初始化、与编译器进行交互、内存释放、数据编译、与协处理器进行交互、数据的内存地址映射等操作,该些操作可以根据实际情况分配给上述多个线程执行。具体分配方式可根据线程配合简便程度、线程处理流程等确定。

不同线程可以同时执行相同或不同的操作,各线程在执行其各自的操作时可以同时访问上述并发数据结构,以读取其所需的数据,或写入其处理后的数据。各线程的操作可以按设定流程执行,例如,实现获取待处理数据所对应的应用层数据,生成所述待处理数据所对应的编译相关数据,并最终生成所述待处理数据所对应的硬件层数据,该硬件层数据能够直接被协处理器处理。

在上述步骤s130中,主机端可以由多线程分工操作快速、不断地准备好不同的待处理数据所对应的硬件层数据,并依次发送至该协处理器进行处理。

本实施例中,通过在内存中建立并发数据结构,建立多个线程,利用所述多个线程并发访问所述并发数据结构,并按设定功能分工执行操作,将待处理数据由应用层数据转换成相应的硬件层数据,能够实现主机端在对协处理器进行数据响应时不同操作的并发执行,减少主机端系统的响应时间和计算资源的最大化利用,从而提高主机端和协处理器端之间的数据传输效率。

图2是本发明一实施例中在内存中建立用于保存应用层数据、编译相关数据及硬件层数据的并发数据结构的方法流程示意图。如图2所示,上述步骤s110,在内存中建立用于保存应用层数据、编译相关数据及硬件层数据的并发数据结构,可包括:

步骤s111:利用c++的map数据结构在内存中建立用于保存应用层数据、编译相关数据及硬件层数据的至少一个数据表;

步骤s112:根据所述至少一个数据表生成并发数据结构。

在上述步骤s111中,所述至少一个数据表的个数可以是多个,例如,可以包括:用于保存应用层数据的至少一个表、用于保存编译相关数据的至少一个表及用于保存硬件层数据的至少一个表。利用多个数据表保存相关数据,进行数据解耦合,能够减少并发时产生的冲突。

其中,所述用于保存应用层数据的至少一个表可以包括:用于保存待处理数据所对应的应用层数据的应用数据表和用于保存处理结果所对应的应用层数据的应用结果表;所述用于保存编译相关数据的至少一个表可包括:用于保存待处理数据所对应的应用层数据中待编译的数据的编译数据表和用于保存待处理数据所对应的待编译数据的编译结果表;所述用于保存硬件层数据的至少一个表可包括:用于保存待处理数据所对应的硬件层数据的硬件数据表和用于保存处理结果所对应的硬件层数据的硬件结果表。通过这些表保存应用层数据、编译相关数据及硬件层数据,分类清晰,便于快速访问。

上述至少一个数据表可以主要利用c++的map数据结构实现。c++的map是一个键值对容器,适于一对一数据的处理。c++的map内部自建一颗红黑树,具有对数据自动排序的功能,map内的数据都是按key的值排好序的,这适于保存时间序列数据。因此,利用c++的map数据结构实现相关数据表,能够加快数据查询速度。

在上述步骤s112中,在使用多个数据表保存相关数据的情况下,可以利用多种不同方式将该多个数据表进行关联,生成并发数据结构。例如,可以利用c++11的并发api(应用程序接口)根据所述至少一个数据表生成基于锁的并发数据结构,以此可以便于控制多线程并发访问该并发数据结构,具体地,例如,通过c++11并发api实现基于条件唤醒线程功能实现对多线程的管理,从而实现系统高并发的需求。在其他实施例中,可以利用其他方式生成基于锁的并发数据结构,或者可以生成不基于锁的并发数据结构,具体实现方式可以视需要进行选择。

本实施例中,利用多个数据表保存相关数据,能够减少并发时产生的冲突。利用c++的map数据结构实现相关数据表,能够加快数据查询速度。

在一些实施例中,建立多个线程,可包括:建立主线程,所述主线程的功能包括初始化所述并发数据结构和调用编译器;利用所述主线程建立第一子线程和第二子线程,所述第一子线程的功能包括利用所述主线程所调用的编译器编译数据,所述第二子线程的功能包括利用所述第一子线程编译的数据生成硬件层数据,所述多个线程包括所述主线程、所述第一子线程和所述第二子线程。

图3是本发明一实施例中利用多个线程并发访问并发数据结构并按设定功能分工执行操作生成硬件层数据的方法流程示意图。如图3所示,上述步骤s120,即,利用所述多个线程并发访问所述并发数据结构,并按设定功能分工执行操作,以将所述待处理数据所对应的应用层数据转换成所述待处理数据所对应的硬件层数据,可包括:

步骤s121:利用主线程调用编译器;

步骤s122:利用第一子线程访问所述并发数据结构,获取所述待处理数据所对应的应用层数据,并利用调用的所述编译器对所述待处理数据所对应的应用层数据中的至少部分属性的数据进行编译,生成所述待处理数据所对应的编译结果数据并将其保存至所述并发数据结构;

步骤s123:利用第二子线程访问所述并发数据结构,获取所述待处理数据所对应的编译结果数据,并根据所述待处理数据所对应的编译结果数据进行地址映射,生成所述待处理数据所对应的硬件层数据并将其保存至所述并发数据结构;所述多个线程包括所述主线程、所述第一子线程及所述第二子线程。

在上述步骤s121中,该主线程可以主要负责编译器的调用,实现与编译器的交互。在其他实施例中,该主线程还可以负责初始化并发数据结构、建立子线程、调用应用程序接口、系统退出之后的内存释放等一个或多个操作。例如,该主线程初始化该并发数据结构并建立两个子线程后,可以生成相关指令调用编译器,之后可以进入等待处理结果的数的状态。在其他实施例中,可以利用其他方式建立子线程,还可以建议两个以上子线程,各线程的功能可以根据设计流程进行分配。

在上述步骤s122中,根据协处理器等的不同,可以利用不同的编译器参数进行编译。该第一子线程可以访问该并发数据结构中与该应用层数据相关的数据表并读取所需的数据。应用层数据可以包含多个属性,例如,名称、标识号、行大小、列大小、数据大小、地址等。该第一子线程可以对应用层数据中全部属性的数据进行编译,或者仅对应用层数据中部分属性的数据进行编译,例如,仅对应用层数据中的标识号进行编译,以此可以节省主机端的计算资源。

编译得到的待处理数据所对应的编译结果数据,可以是二进制形式,可以将其与待编译数据的属性相同的数据进行保存,或者同时还可以从应用层数据中读取其他属性的数据一同保存,例如,可以同时保存标识号的编译结果数据和名称。在其他实施例中,还可以保存待处理数据所对应的待编译数据,编译结果数据和待编译数据可以保存在相同的表中,或者分别保存在各自的表中,在分别保存的情况下,可以先访问保存待编译数据的表并读取待编译数据,再进行编译生成编译结果数据并保存至相应的表中。

在上述步骤s123中,该地址是指数据内存中的地址。该第二子线程可以访问并发数据结构中,与编译结果数据相关的表来获取待处理数据所对应的编译结果数据。可以通过在编译结果数据的基础上增加相应的地址属性的数据,或者同时增加其他属性的数据,例如行大小、列大小、数据大小等属性的应用层数据,实现地址映射,生成相应的硬件层数据。待处理数据所对应的硬件层数据可以保存至单独一个表中,或者与其他层的数据一同保存。

本实施例中,可以利用一个主线程和两个子线程将待处理数据由应用层数据转换成硬件层数据。利用第一子线程可以实现数据从应用层到硬件层搬运的主要工作,利用第二子线程可以进一步完善数据从应用层到硬件层的搬运。随着依次接收多个待处理数据,主线程和该两个子线程可以并发进行其各自的操作,与利用单线程依次进行数据读取、编译、映射等操作相比,具有更快的数据响应速度。

图4是本发明另一实施例中利用多个线程并发访问并发数据结构并按设定功能分工执行操作生成硬件层数据的方法流程示意图。如图4所示,上述步骤s122,即,利用第一子线程访问所述并发数据结构,获取所述待处理数据所对应的应用层数据,并利用调用的所述编译器对所述待处理数据所对应的应用层数据中的至少部分属性的数据进行编译,生成所述待处理数据所对应的编译结果数据并将其保存至所述并发数据结构,具体地,可包括:

步骤s1221:利用第一子线程访问所述并发数据结构中用于保存所述待处理数据所对应的应用层数据的应用数据表,读取所述待处理数据所对应的应用层数据中的部分属性的数据并将其保存至所述并发数据结构中的编译数据表;

步骤s1222:利用调用的所述编译器对保存至所述编译数据表中的所述部分属性的数据进行编译,生成所述待处理数据所对应的编译结果数据并将其保存至所述并发数据结构中的编译结果表。

在上述步骤s1221~步骤s1222中,所述部分属性的数据例如可以是应用层数据(例如,包括名称、标识号、行大小、列大小、数据大小、地址等属性)中的标识号,通过对部分属性数据进行编译,可以减少计算开销。待处理数据所对应的应用层数据、所述待处理数据所对应的待编译数据、所述待处理数据所对应的编译结果数据分别保存在应用数据表(例如,包括名称、标识号、行大小、列大小、数据大小、地址等属性)、编译数据表(例如,包括标识号等属性)、编译结果表(例如,包括名称、标识号等属性)中,通过利用各自的表单独保存数据,能够简化多线程的并发访问设计架构。

再如图4所示,上述步骤s123,即,利用第二子线程访问所述并发数据结构,获取所述待处理数据所对应的编译结果数据,并根据所述待处理数据所对应的编译结果数据进行地址映射,生成所述待处理数据所对应的硬件层数据并将其保存至所述并发数据结构,具体地,可包括:

步骤s1231:利用第二子线程访问所述应用数据表并读取所述待处理数据所对应的地址数据,访问所述编译结果表并读取所述待处理数据所对应的编译结果数据;

步骤s1232:根据所述地址数据和所述待处理数据所对应的编译结果数据进行地址映射,生成所述待处理数据所对应的硬件层数据并将其保存至所述并发数据结构中的硬件数据表,并清空所述编译数据表。

在上述步骤s1231~步骤s1232中,与上述并发数据结构中的其他表相比,应用数据表可以包括最多属性种类的数据。该编译结果表可以不包括地址属性的数据,所以可以从应用数据表中获取地址属性的数据。该硬件数据表例如可以包括标识号、行大小、列大小、数据大小、地址等属性。在待处理数据所对应的硬件层数据保存至硬件数据表之后,清空所述编译数据表,可以便于,将新的待处理数据所对应的待编译数据保存至该编译数据表。在其他实施例中,可以不需清空,而是在下次保存数据时进行数据覆盖。

在一些实施例中,当上述第一子线程完成数据编译后,可以唤醒第二子线程以使进行数据映射。当上述第二子线程完成数据映射后,可以唤醒第一子线程,以准备接收主线程的退出指令,同时退出主程序。

图5是本发明另一实施例的数据传输方法的流程示意图。如图5所示,上述步骤s130,即,将所述待处理数据所对应的硬件层数据发送至协处理器进行处理,可包括:

步骤s131:利用所述第二子线程将所述待处理数据所对应的硬件层数据和所述并发数据结构中用于保存所述待处理数据的处理结果所对应的硬件层数据的硬件结果表的表信息发送至协处理器,以使所述协处理器对所述待处理数据所对应的硬件层数据进行处理,并根据所述硬件结果表的表信息返回处理结果所对应的硬件层数据。

在上述步骤s131中,该硬件结果表例如可以包括标识号、行大小、列大小、数据大小、地址等属性。将待处理数据所对应的硬件层数据发送至协处理器,可以对该待处理数据进行处理。将硬件结果表的表信息(例如,各属性信息、结构信息等)发送至协处理器,可以便于协处理器处理待处理处理后,将处理结果的数据按硬件结果表的表信息的形式或格式返回至主机端,从而便于保存至该硬件结果表。

其他实施例中,在第二子线程发送硬件层数据和硬件结果表的表信息发送至协处理器之后,还可以发送开启处理的指令给协处理器以控制其开始处理数据。

再如图5所示,上述实施例的数据传输方法,还可包括:

步骤s140:利用所述第二子线程接收所述处理结果所对应的硬件层数据并将其保存至所述硬件结果表,并根据所述处理结果所对应的硬件层数据、所述编译结果表及所述编译数据表获取所述处理结果所对应的应用层数据并将其保存至所述并发数据结构中的应用结果表;

步骤s150:利用所述主线程从所述应用结果表中读取并发送所述处理结果所对应的应用层数据。

在上述步骤s140中,上述硬件数据表和上述硬件结果表可以具有相同的属性,上述应用数据表和上述应用结果表可以具有相同的属性。该应用结果表例如可以包括名称、标识号、行大小、列大小、数据大小、地址等属性。该协处理器处理完数据后,可以通知主机端读取处理结果,或者将处理结果发送至主机端,由第二子线程接收,接收到处理结果后,可以将处理结果的数据填写到硬件结果表和应用结果表中。

根据所述处理结果所对应的硬件层数据、所述编译结果表及所述编译数据表获取所述处理结果所对应的应用层数据的具体方式可以包括:根据所述处理结果所对应的硬件层数据中的标识号查询所述编译结果表得到所述处理结果所对应的数据的名称,并根据所述处理结果所对应的数据的名称将所述编译数据表中的标识号填写至应用结果表。在其他实施例中,可以根据所述处理结果所对应的数据的名称将所述编译数据表中的标识号填写至应用数据表。具体地,例如,如果所述处理结果所对应的数据的名称的第一个字符是下划线,将所述编译数据表中的标识号填写至应用数据表,否则,将所述编译数据表中的标识号填写至应用结果表。填写至应用数据表的数据可以继续由上述线程转换后传输至协处理器进行处理。

在上述步骤s150中,主线程读取从所述应用结果表中读取处理结果所对应的应用层数据后,可以返回给上层应用,或者可以进一步发送至硬盘进行存储或实时输出给其他装置。

在一些实施例中,上述实施例的数据传输方法,还可包括:所述主线程在超过设定时间段没有获取到待处理数据的情况下将第一退出指令和第二退出指令分别发送至所述第一子线程和所述第二子线程,并在接收到来自所述第一子线程的退出信号和来自所述第二子线程的退出信号后释放内存。以此可以在没有数据需要处理时释放内存,结束主机端的资源占用。

为了使本领域技术人员更好地了解本发明,下面将以具体实施例说明本发明的实施方式。

协处理器端可以为时间序列专用加速器。为了进一步减少主机端系统的响应时间和实现最大化资源利用,提高主机端与时间序列专用加速器之间的数据交互能力,一实施例的数据传输方法通过多线程的方式解耦合数据传输-数据计算-结果读回的操作实现多线程的内存数据管理,其中,这里的解耦合就是要将数据传输与计算分开来,达到协处理器在进行计算的时候还能进行数据传输操作,从而最大化的将数据传输开销摊销掉。由于涉及到专用加速器,该主机端系统需要与编译器及上层应用进行交互通信。概括而言,该数据传输方法,可包括:

(1)在内存中建立基于锁的并发数据结构,用于保存数据信息,并用于后续并发访问;该并发数据结构中的数据表可以通过map数据结构实现;

(2)建立三个线程,一个主线程和两个子线程,主线程负责系统初始化、与编译器进行数据交互、以及最后内存释放等相关操作,子线程1用于搬运数据给底层硬件(专用加速器),子线程2用于从底层硬件读取结果数据;可以通过c++11并发api实现基于条件唤醒线程功能,实现对多线程的管理。

具体地,首先设计一些数据结构用于保存相关的数据并提供并发访问。图6是本发明一实施例中数据结构的示意图。如图6所示,需要保存的数据信息可包括name、id、row、col、len、addr分别对应数据的名称、标识号、行大小、列大小、数据大小、数据内存中地址。为了能够加快数据查询速度,本实施例主要采用c++的map数据结构来实现相关的表。此外,为了减少并发时产生的冲突,本实施例根据系统功能将数据信息分成多个数据表进行存储,如图6所示,分别为应用数据表(app-dtab)、应用结果表(app-rtab),编译数据表(c-dtab),编译结果表(c-rtab),硬件数据表(h-dtab)和硬件结果表(h-rtab)。同时采用c++11的并发api实现基于锁的map并发数据结构。

图7是本发明一实施例中多线程的示意图,该图描绘了本实施例整个系统中多线程详细设计以及每个线程需要操作的数据结构。本系统主要包括三个线程,一个主线程和两个子线程。主线程0主要负责初始化数据结构、调用应用程序接口和系统退出之后的内存释放等工作,因此需要访问所有的数据表。子线程1,主要完成编译器调用时,系统需要完成的相关工作,需要访问app-dtab、c-dtab和c-rtab。子线程2主要完成将主机端数据和结果信息搬运到硬件上以及读回结果数据,需要访问c-dtab、c-rtab、h-dtab和h-rtab数据表。

图8是本发明一实施例的主机端的系统运行流程示意图。图9是本发明一实施例的数据传输的交互示意图。图8详细描绘了整个系统运行时的流程。如图8和图9所示,首先,主线程0完成数据结构的初始化并建立两个子线程。随后,生成相关指令调用编译器,进入等待结果数据阶段,直到收到子线程2的唤醒信号。然后,开始读取结果数据(应用层数据)。至此,当前指令执行完毕,如果还要执行其他的指令,则继续返回,否则,给子线程1和子线程2发送退出指令,等待子线程1和子线程2的退出信号,最后退出主程序,并释放相关内存。

子线程1在创建完之后就进入等待状态,直到编译器被调用,然后根据编译器调用传递的参数(可以视专用加速器的不同而不同),访问应用数据表,完成编译数据表和编译结果表的填写。如果编译调用结束,则唤醒子线程2,然后判断是否退出,如果没有退出,则继续回到等待编译器调用阶段,否则发送退出信号给子线程2,随后进入退出程序。

子线程2在创建完之后就进入等待状态,直到子线程1将其唤醒。然后访问应用数据表,并根据编译结果表,填写硬件数据表。接着唤醒子线程1,并且清空编译数据表。然后将硬件数据表中的数据和硬件结果表的相关信息传输给硬件(专用加速器),并发送开启计算指令,进入等待结果数据的阶段。从硬件读取结果数据直接写到硬件结果表中,并根据该结果数据中的标识号查询编译结果表得到数据名称,并根据该数据名称将编译数据表中相应的标识号填写至应用结果表,然后唤醒主线程0。然后判断子线程1是否退出,如果没有退出,则进入到等待子线程1唤醒状态,否则进去退出程序。

本实施例中,提供了一种多线程的面向时间序列加速器的内存数据管理方法,设计并发map数据结构,设计数据管理多线程,通过c++11并发api实现基于条件唤醒线程功能实现对多线程的管理,从而实现系统高并发的需求。解决了从主机端搬运数据到加速器,然后等待加速器计算,最后从加速器读取结果解耦合实现,通过多线程技术,有效减少了系统的响应时间,提高了资源的利用率。

基于与图1所示的数据传输方法相同的发明构思,本发明实施例还提供了一种数据传输装置,如下面实施例所述。由于该数据传输装置解决问题的原理与数据传输方法相似,因此该数据传输装置的实施可以参见数据传输方法的实施,重复之处不再赘述。

图10是本发明一实施例的数据传输装置的结构示意图。如图10所示,一些实施例的数据传输装置,包括:构建单元210、处理单元220及发送单元230,上述各单元顺序连接。

构建单元210,用于在内存中建立用于保存应用层数据、编译相关数据及硬件层数据的并发数据结构,建立多个线程,以及获取待处理数据所对应的应用层数据并保存至所述并发数据结构;

处理单元220,用于利用所述多个线程并发访问所述并发数据结构,并按设定功能分工执行操作,以将所述待处理数据所对应的应用层数据转换成所述待处理数据所对应的硬件层数据;

发送单元230,用于将所述待处理数据所对应的硬件层数据发送至协处理器进行处理。

在一些实施例中,构建单元210,可包括:数据表建立模块和数据结构生成模块,二者相互连接。

数据表建立模块,用于利用c++的map数据结构在内存中建立用于保存应用层数据、编译相关数据及硬件层数据的至少一个数据表;

数据结构生成模块,用于根据所述至少一个数据表生成并发数据结构。

在一些实施例中,数据结构生成模块,可包括:基于锁的并发数据结构生成模块。

基于锁的并发数据结构生成模块,用于利用c++11的并发api根据所述至少一个数据表生成基于锁的并发数据结构。

在一些实施例中,所述至少一个数据表包括:用于保存应用层数据的至少一个表、用于保存编译相关数据的至少一个表及用于保存硬件层数据的至少一个表。

在一些实施例中,处理单元220,可包括:编译器调用模块、编译结果数据生成模块及硬件层数据生成模块,上述各模块顺序连接。

编译器调用模块,用于利用主线程调用编译器;

编译结果数据生成模块,用于利用第一子线程访问所述并发数据结构,获取所述待处理数据所对应的应用层数据,并利用调用的所述编译器对所述待处理数据所对应的应用层数据中的至少部分属性的数据进行编译,生成所述待处理数据所对应的编译结果数据并将其保存至所述并发数据结构;

硬件层数据生成模块,用于利用第二子线程访问所述并发数据结构,获取所述待处理数据所对应的编译结果数据,并根据所述待处理数据所对应的编译结果数据进行地址映射,生成所述待处理数据所对应的硬件层数据并将其保存至所述并发数据结构;所述多个线程包括所述主线程、所述第一子线程及所述第二子线程。

在一些实施例中,编译结果数据生成模块,可包括:编译数据生成及保存模块和编译结果生成及保存模块,二者相互连接。

编译数据生成及保存模块,用于利用第一子线程访问所述并发数据结构中用于保存所述待处理数据所对应的应用层数据的应用数据表,读取所述待处理数据所对应的应用层数据中的部分属性的数据并将其保存至所述并发数据结构中的编译数据表;

编译结果生成及保存模块,用于利用调用的所述编译器对保存至所述编译数据表中的所述部分属性的数据进行编译,生成所述待处理数据所对应的编译结果数据并将其保存至所述并发数据结构中的编译结果表。

在一些实施例中,硬件层数据生成模块,可包括:编译结果数据读取模块和硬件层数据生成模块,二者相互连接。

编译结果数据读取模块,用于利用第二子线程访问所述应用数据表并读取所述待处理数据所对应的地址数据,访问所述编译结果表并读取所述待处理数据所对应的编译结果数据;

硬件层数据生成模块,用于根据所述地址数据和所述待处理数据所对应的编译结果数据进行地址映射,生成所述待处理数据所对应的硬件层数据并将其保存至所述并发数据结构中的硬件数据表,并清空所述编译数据表。

在一些实施例中,发送单元230,可包括:发送模块。

发送模块,用于利用所述第二子线程将所述待处理数据所对应的硬件层数据和所述并发数据结构中用于保存所述待处理数据的处理结果所对应的硬件层数据的硬件结果表的表信息发送至协处理器,以使所述协处理器对所述待处理数据所对应的硬件层数据进行处理,并根据所述硬件结果表的表信息返回处理结果所对应的硬件层数据。

在一些实施例中,所述数据传输装置,还可包括:处理结果接收单元和处理结果读取单元,二者相互连接,处理结果接收单元与发送单元230连接。

处理结果接收单元,用于利用所述第二子线程接收所述处理结果所对应的硬件层数据并将其保存至所述硬件结果表,根据所述硬件结果表中的所述处理结果所对应的硬件层数据生成所述处理结果所对应的应用层数据并将其保存至所述并发数据结构中的应用结果表;

处理结果读取单元,用于利用所述主线程从所述应用结果表中读取并发送所述处理结果所对应的应用层数据。

本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述实施例所述方法的步骤。

本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述实施例所述方法的步骤。

综上所述,本发明实施例的数据传输方法、数据传输装置、计算机设备及计算机可读存储介质,通过在内存中建立并发数据结构,建立多个线程,利用所述多个线程并发访问所述并发数据结构,并按设定功能分工执行操作,将待处理数据由应用层数据转换成相应的硬件层数据,能够实现主机端在对协处理器进行数据响应时不同操作的并发执行,减少主机端系统的响应时间和计算资源的最大化利用,从而提高主机端和协处理器端之间的数据传输效率。

在本说明书的描述中,参考术语“一个实施例”、“一个具体实施例”、“一些实施例”、“例如”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。各实施例中涉及的步骤顺序用于示意性说明本发明的实施,其中的步骤顺序不作限定,可根据需要作适当调整。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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