本申请涉及计算机体系结构的编程方法和计算机体系结构设计,更具体地涉及一种支持专用计算核的加速器体系结构的编程方法和系统。
背景技术:
在大数据时代下,随着物联网、云计算和互联网等技术的发展,在各类应用场景下产生的大量数据,正在以惊人的规模持续增长和积累。根据国际数据公司(idc:internationaldatacooperation)的报告显示,到2020年,全球的数据总量将超过35zb。大数据背后所蕴含的信息,能够极大地支持人类的科学研究和行业发展。以数据为中心的应用,如何快速从海量数据中挖掘有效信息,成为大数据应用的一大挑战。
随着晶体管工艺的提升,量子隧穿效应将成为无法避免的限制,近年来,学界和产业界开始意识到“摩尔定律“即将失效。为解决面向大数据计算的算力问题,高性能计算的研究开始逐渐的转向更为高效的专用并行计算架构,例如半定制的现场可编程门阵列(field-programmablegatearray,fpga);专为执行复杂的数学和几何计算的图形处理器(graphicsprocessingunit,gpu);为加速机器学习算法的谷歌的张量处理器tpu(tensorprocessingunit,tpu),高通的神经网络处理器(neuralnetworkprocessor,nnu);为加速数据库操作的ibm的blu加速器等专用集成电路(asic)。这一类专用计算架构与cpu结合,构成了异构系统,其基本架构包括cpu主机和加速器设备(如gpu,fpga,或asic等)。
应用程序在异构系统上的执行效率不仅依赖于这些支持专用计算的硬件资源,同时也受限于异构系统的编程模式。一种高效的、灵活的编程模型,能够有效提升对硬件资源的利用效率,从而提高计算任务的执行效率。面向异构系统的编程模型主要包括以下几类:开放运算语言(opencl:opencomputinglanguage),统一计算设备架构(cuda:computeunifieddevicearchitectur)和开放加速器(openacc:openaccelerators)等。opencl是第一个面向异构系统通用目的并行编程的开放式、免费标准,也是一个统一的编程环境,广泛适用于cpu、gpu、fpga以及数字信号处理器等其他专用加速器设备。cuda是一种面向gpu的通用的并行计算平台和编程模型,在c语言基础上扩展。openacc提出旨在使代码可跨越通用并行处理器,包括异构的cpu-gpu系统,同时还可支持多核的cpu系统。
上述异构编程模型为异构加速器的使用提供了一种有效的平台,在编程时,可以有效地利用丰富的硬件计算和存储资源。然而这些编程模型在实际应用中依然存在问题。
cuda揭示了gpu的内存层次结构并明确了线程的层次抽象。但是为了达到高效利用硬件资源的目的,需要gpu内存结构和线程管理的强相关知识,使得优化和应用存在一定困难;且只支持单一加速器设备,即英伟达系列的gpu,使用的范围有限。
openacc是一种更简单的cpu-gpu异构系统编程模型,它隐藏了芯片与芯片之间通信以及对处理器计算资源和存储资源的低层操作,代码几乎无需改动即可实现跨平台重用;但openacc需要一个通用性强的复杂编译器;此外,即使通过这一复杂的编译器,openacc的编程模型也仅支持英伟达和amd系列的gpu加速器设备,无法支持定制的专用加速器的使用。
opencl支持任务并行和数据并行,可以面向不同种类的加速器硬件设备;但是这种编程模型相对底层,需要程序员对目标处理器的内部结构有一定了解,且对源代码进行优化和重用时的改动代价很大。因此,使用opencl对于扩展计算应用来说有很大的困难。
如何能够更高效地利用专用加速器的硬件资源,提升运算任务的执行效率,是一个有待进一步解决的问题。
技术实现要素:
有鉴于此,本发明提出了一种数据驱动的编程方法和系统,以克服上述现有编程模式存在的一个或更多个问题。
本发明的一方面,提供了一种加速器体系结构的编程方法,该方法包括以下步骤:
将结构化数据对象输入到输入数据通道;
将输入数据通道内的结构化数据对象拆分为计算核可执行的多个输入原子数据元素,并基于加速器设备内可执行计算任务的计算核对应的计算元素数形成包含第一数目的输入原子数据元素的工作组;
由可执行所述计算任务的计算核针对所述工作组内所有输入原子数据元素执行运算,得到一组输出原子数据元素;
基于所述输出原子数据元素得到输出结构化数据对象,经与计算核连接的输出数据通道输出。
可选地,所述结构化数据对象是能够被加速器直接操作的基本数据单元;所述输入原子数据元素为计算核执行的计算任务的最小数据单元。
可选地,所述方法采用流水线操作,不同计算任务对应工作组内的不同输入原子数据元素,由计算核并行执行。
可选地,在加速器设备内可执行计算任务的计算核之间不存在数据依赖的情况下,所述第一数目等于所述加速器设备内可执行计算任务的计算核的数目。
可选地,所述加速器设备内可执行计算任务的计算核中,彼此存在数据依赖的多个计算核对应一个计算元素,每一不存在数据依赖的计算核对应一个计算元素,所述第一数目与加速器设备内可执行计算任务的计算核对应的计算元素数相同。
可选地,所述第一数目为1,所述加速器设备内可执行计算任务的各个计算核串行执行计算任务。
可选地,所述基于所述输出原子数据元素得到输出结构化数据对象,经与计算核连接的输出数据通道输出,包括:将得到的输出结构化数据对象先进行缓存,然后打包后获得输出结构化数据对象,经与计算核连接的输出数据通道输出。
可选地,所述输入数据通道和所述输出数据通道的数据维度相同或不同。
本发明的另一方面还提供一种编程系统,所述系统包括处理器和存储器,所述存储器中存储有计算机指令,所述处理器用于执行所述存储器中存储的计算机指令,当所述计算机指令被处理器执行时该系统实现如前所述方法的步骤。
本发明另一方面还提供一种计算机存储介质,其上存储有计算机程序,该程序被处理器执行时实现如前所述方法的步骤。
本发明实施例所所提供的编程方法和系统,隐藏了底层硬件架构的操作,用更直观的计算任务和计算数据驱动异构系统的编程,大大提高了编程效率,简化编程人员的对专用加速器的使用方式。由于采用数据驱动的执行方式,程序执行时无需考虑复杂的控制成本,本发明实施例提供的编程方法能够更高效地利用专用加速器的硬件资源,提升运算任务的执行效率。
本领域技术人员将会理解的是,能够用本发明实现的目的和优点不限于以上具体所述,并且根据以下详细说明将更清楚地理解本发明能够实现的上述和其他目的。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1示出了本发明的编程方法对应的程序接口示意图。
图2示出了本发明实施例中程序执行所支持的数据结构示意图。
图3示出了本发明实施例中编程方法的执行过程示意图。
图4示出了本发明实施例中编程方法的流程示意图。
图5示出了本发明一实施例中未采用流水线操作的任务执行过程示例。
图6示出了本发明一实施例中采用流水线操作的任务执行过程示例。
图7示出了本发明实施例的视频解码过程中输入通道和输出通道的数据结构示意图。
图8示出了本发明实施例的视频解码过程中输入原子数据元素和输出原子数据元素的数据结构示意图。
图9示出了本发明一实施例中视频解码过程的编码流程示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
在此,还需要说明的是,为了避免因不必要的细节而模糊了本发明,在附图中仅仅示出了与根据本发明的方案密切相关的结构和/或处理步骤,而省略了与本发明关系不大的其他细节。
应该强调,术语“包括/包含”在本文使用时指特征、要素、步骤或组件的存在,但并不排除一个或更多个其它特征、要素、步骤或组件的存在或附加。术语“第一”、“第二”用来修饰特征、要素、步骤或组件时,仅用于将这些特征、要素、步骤或组件相区别,而非暗示他们的次序或顺序,除非上下文有明确表示。
在此,还需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互结合。
发明人在进行专用加速器体系结构设计的研究时发现,现有的编程模型存在的问题要么是由于编程模型中的算法描述语言、程序接口设计和程序执行方式等设计过于底层所导致,要么是由于程序接口设计和编译器复杂导致。虽然更底层的编程方法为有经验的编程人员提供了更为灵活的操作和更广阔的优化空间,但却给更多应用和欠缺体系结构知识经验的编程人员的使用造成一定困难。事实上,对程序执行和存储的管理等底层体系结构的优化,可以通过编译器或其他更底层的接口实现,无需完全开放给编程人员,但复杂的编译程序接口又使得编程变得复杂。
发明人经过对专用加速器的实际使用过程研究发现,上述问题可以通过本发明设计的一种面向加速器的数据驱动的编程方法来解决。其中,数据驱动是指,对于一个计算任务,其计算执行的顺序由输入数据的有效性决定。数据驱动是一种不同于传统冯诺依曼架构的计算结构,不需要程序指针和进程调度机制。数据驱动的执行顺序取决于数据间的互相依赖关系和输入数据(指令操作数)的有效性,只要数据到达就可以进行计算。本发明实施例使用这种非传统的计算结构来提高系统的处理能力。本发明提供的基于数据驱动的编程方法提供了简洁的程序接口,可以大大简化了编程过程。从应用和数据计算出发,直接考虑一个程序需要完成的计算任务,可有效的利用加速器硬件资源,优化计算任务的执行效率,且支持不同架构的专用加速器,可以大大提高对硬件计算资源的利用效率。
为了实现本发明的编程方法,本发明实施例提供了如图1所示的程序接口。该程序接口包括:输入数据通道(简称输入通道(inputchannel))101、输出数据通道(简称输出通道(outputchannel))102以及计算核(kernel)103,输入数据通道101和输出数据通道102内为用户在编程时需要被加速器计算执行的输入和输出数据,输入数据通道101和输出数据通道102与计算核103相连。也即,编程的用于输入数据的数据结构是输入通道,用户通过编程调用特定的计算核后,输入数据输入至当前调用的计算核,由计算核执行具体运算操作,用于输出结果的数据结构是输出通道。本发明实施例中程序接口的形式可以面向c语言、c 语言,python语言和java语言等,但并不限于此。实现的形式通过面向不同的编程语言实现的库函数链接到文件。
本发明实施例中,提供的程序接口中输入通道和输出通道内的数据结构为结构化数据对象(sdo,structuraldataobject),该结构化数据对象支持更细粒度的数据结构的划分:输入原子数据元素(ade,atomicdataelement)和输出原子数据元素,ade是sdo中更细粒度的数据,如图2中的阴影部分所示。sdo是指能够被加速器直接操作的基本数据单元。在本发明实施例中,sdo可以是数据库的一列或几列或一列的一部分,还可以是视频流的一帧或几帧,还可以是物联网中的传感器采集到的某一个数据流或某几个数据流。ade是启动一个计算核执行计算任务的最小数据单元,每输入一个ade到计算核中,计算核将通过运算更新数据输出结果,ade通过在专用加速器内的存储器管理单元控制。在本发明实施例中,ade可以是数据库的一列中的一个或几个元素,还可以是视频流一帧中的一个或几个图像块(block),还可以是物联网中的传感器采集到的某一个时间窗内的一段数据流。输出原子数据元素ade是一个计算核执行完某一特定的计算任务后的输出结果,在本发明实施例中,它可以是数据库中满足查询条件的一列或几列中的几个元素或几条记录,还可以是视频流一帧中的一个或几个编码后或解码后的图像块,还可以是物联网中的传感器采集到的某一个时间窗内满条件的某一特定的数据集合,或经过复杂计算后的一个特定的数值结果。其中,输入原子数据元素和输出原子数据元素可以具有不同维度。例如,输入的原子数据元素ade可能是一个矩阵形式的数据块,而输出的原子数据元素ade可能是一个数值解或者一个向量解。或者,输入的原子数据元素ade可能是一个高维的数据向量,而输出的原子数据元素ade可能是一个低维的向量解或者一个数值解。
基于如上的程序接口,本发明实施例提供了基于上述编程接口和数据结构进行编程的执行过程示意,如图3所示,输入数据通道101和输出数据通道102与计算核105相连,分别用于在编程时向计算核输入数据和从计算核输出数据;输入数据通道101内的数据包括结构化数据对象,结构化数据对象可拆分为多个输入原子数据元素103。输入原子数据元素103是驱动加速器设备中的计算核105执行运算操作的最小数据组成单元,图3中的计算核105是专用加速器的硬件计算资源,工作组106中包括当前计算核在执行一个运算任务时所处理的一个或多个数据结构,各数据结构是一个原子数据元素ade。通常,计算核之间不存在数据依赖的情况下,一个计算核处理工作组中的一个ade,多个计算核可并行处理工作组中的多个ade。当然,各个计算核也可以串行执行计算任务,此时,工作组内可以只有1个ade。在有的计算核之间存在数据依赖关系的情况下,可以基于计算核之间的数据依赖关系确定工作组内ade的数目,这将在后面进行描述。经过计算核105执行运算操作后的输出结果的最小数据组成单元为输出原子数据元素104,其通过输出通道102输出。
基于如上的程序接口和示意的编程执行过程,如图4所示,本发明实施例的数据驱动的加速器体系结构的编程方法包括以下步骤:
步骤s110,将结构化数据对象输入到输入数据通道。
步骤s120,将输入数据通道内的结构化数据对象拆分为计算核可执行的多个输入原子数据元素,并基于加速器设备内可执行计算任务的计算核对应的计算元素数形成包含第一数目的输入原子数据元素的工作组。
更具体地,本步骤中,会按照加速器中可执行计算任务的计算核可处理数据的大小规模,将数据通道内的sdo拆分为计算核自身可执行的多个ade,全部或部分ade将会构成一个工作组,全部的可执行计算核将会并行执行当前工作组内的全部ade的计算。全部ade可能是一次执行即结束,也有可能是几次计算结束。
在本发明一实施例中,工作组内ade的数目可由加速器设备内计算核的数目和计算核之间的数据依赖关系来确定。其中,计算核的数目是在硬件设计时决定的。例如一个加速器可以包含可同时执行6个计算任务的计算核,这些计算任务可能是同类型的,也可能是不同类型的,取决于加速器的硬件设计。另,计算核之间有可能是具有数据依赖关系的,即后一个计算核的启动需要依赖于前一个计算核的输出,也有可能不存在数据依赖关系。若有数据依赖,则几个相互依赖的计算核可以视为1个计算元素,而不存在数据依赖的计算核,则每个计算核可看成一个计算元素,可以按照实际计算元素的数目确定工作组内ade的数目。
假设计算核之间不存在数据依赖,则工作组内ade的数量取决于加速器硬件的计算核的数目。如果一个加速器设备中包含可执行运算的6个计算核,那么sdo经过拆分得到ade后,就可以由拆分出的ade中的6个ade组成为一个工作组,输入到全部的计算核资源中。也即,在加速器设备内可执行计算任务的计算核之间不存在数据依赖的情况下,所述加速器设备内可执行计算任务的计算核的数目等于工作组中ade的数目,每一个没有依赖关系的计算核可看成是一个计算元素。多个互相之间不存在计算冲突和资源冲突的计算任务,将会由这些计算核批量的一次性执行完成。全部的可执行计算核将会一次性并行执行当前工作组内的全部ade的计算。
如果有的计算核之间存在依赖关系,那么工作组的大小(工作组内ade的数量)将取决于程序本身的需求,可以理解为,相互依赖的计算核需要的ade的输入数量可以为1,而对于没有依赖关系可以并行执行的计算核,硬件上存在几个这样的计算核就需要几个ade的输入。或者说,也可以将彼此存在依赖关系的多个计算核看成1个计算元素,每一不存在数据依赖的计算核看成1个计算元素,从而将计算核对应到计算元素,基于计算元素的数目确定工作组中ade的数目。全部的可执行计算核将会依次并行执行当前工作组的ade的计算,直到全部ade计算执行结束。sdo拆分为ade时,ade的拆分原则是取决于计算核本身的设计,即ade为启动一个计算核执行计算任务的最小数据单元。
步骤s130,由可执行计算任务的计算核针对工作组内所有输入原子数据元素执行运算,得到一组输出原子数据元素。
每个工作组是加速器从设备内的计算核可以一次性执行的全部数据。
随着sdo的数据规模不同,需要计算核执行的运算次数也会相应的不同,即整体计算需要的工作组数会不同。即,一个sdo可以被拆分为多个ade,其中几个ade会构成一个工作组。则,一个sdo可包含几个工作组,每个计算核就可以执行几次运算操作。在针对多个工作组执行运算时,每次计算输入的工作组(由不同的ade组成)会得到不同的输出结果。
步骤s140,基于输出原子数据元素得到输出结构化数据对象,经与计算核连接的输出数据通道输出。
更具体地,可将工作组得到的输出结果ade放入输出数据的缓存中,经打包后得到结果sdo输出到输出数据通道,返回到cpu或暂存在加速器设备中。
如上实施例提供的支持专用计算核的基于数据驱动的编程方法,隐藏了底层硬件架构的操作,用更直观的计算任务和计算数据驱动异构系统的编程,大大提高了编程效率,简化编程人员的对专用加速器的使用方式。由于采用数据驱动的执行方式,程序执行时无需考虑复杂的控制成本,本发明实施例提供的编程方法能够更高效地利用专用加速器的硬件资源,提升运算任务的执行效率。
在本发明的实施例中,在每一工作组内,数据的执行是严格同步的,若存在没有执行完当前指令的工作组,则任何其他工作组都不会开始下一条指令的执行。然而,计算核之间可以是异步的,即在不同计算任务可同时由不同的计算核执行,任务间的执行可以直接并行。为此,本发明实施例还提出了一种按照流水线操作的编程优化方式,将不同计算任务作为不同流水线,不同流水线的工作任务对应工作组内不同的ade,由计算核并行执行这些工作任务,该方式消除了任务间不必要的等待时间,实现计算核之间的并行。
如图5所示为本发明一实施例中未采用流水线操作的任务执行过程示例。图6所示为本发明一实施例中采用流水线操作的任务执行过程示例。由图5和图6可看出在没有采用流水线优化和采用流水线优化前后,三个任务执行过程的区别。
参照图5,假设给定3个计算任务,每个计算任务包含4个不同的具体计算步骤,即需要4个硬件的计算核执行,且这4个计算核之间存在顺序的依赖关系,即计算核2必须等待计算核1计算结束后才可以进行,以此类推。这样在不采用流水线操作时,三个计算任务的执行是顺序的,即只有当第一个计算任务执行结束后,第二个计算任务才可以开始执行。在这种情况下,每一任务中各个计算核顺序对一个ade进行计算操作,也即,对于每一任务,工作组内含有一个ade。
但是,由于三个计算任务之间是独立的,不存在数据冲突和资源冲突,因此可以采用流水线作业方式。即当第一个计算任务的第一个计算核执行完毕后,第二个计算任务的第一个计算核就可以开始启动,以此类推。在此情况下,各个计算核可以并行执行不同任务,针对这些任务,工作组内含有与计算核数对应的ade。如图6所示。利用流水线作业方式可以显著提高计算任务的执行效率。
实施例1
本实施例提供了支持专用计算核的数据驱动的编程方法的一个示例,该实施例可应用于视频解码任务。其中,计算核处理的计算任务包括但不限于:算数解码,运动补偿/预测,反向离散余弦变换,反量化和块拼接等,如图9中的步骤2中的各子步骤。本实施例中,输入和输出的数据结构的组织形式,根据应用的实际需求为:输入数据通道和输出数据通道内的sdo可以是一帧或几帧图像,图7所示既可能是输入数据通道内的数据结构,也可能是输出数据通道内的数据结构。输入通道和输出通道内sdo数据的结构的大小和数据的组织形式,通常是由算法本身的输入输出决定。
每次处理的一个输入ade可以是一个或几个划分的图像块,相应地输出ade也可以是一个或几个图像块,图8所示既可能是输入ade的数据结构,也可能是输出ade的数据结构,图8中的阴影部分可表示不同的ade。但在此要说明的是,每一次工作组处理的输入和输出数据可能是维度相同或不同的。例如在一个示例中,输入的一个ade是当前输入的一帧图像中的某一行,而输出的一个ade是经过运算后的缺失一些像素的一行,此时输出ade维度相较输入ade下降。
参照图9,本实施例提供的应用于视频解码任务的执行包括以下步骤:
步骤1,调用专用加速器的函数语句将准备好的sdo传输到输入数据通道。
步骤2,进行视频解码的具体操作,该步骤又包括几个子步骤:算数解码,运动补偿/预测,反向离散余弦变换/反量化和块拼接。
首先,将输入的sdo基于计算资源进行拆分,可根据算法本身的输入要求,可根据一次性处理的数据量的不同而拆分。
在执行上述几个子步骤的过程中,在没有才有流水线操作方式的情况下,一个工作组内包含一个ade,数据的执行是严格同步的,若存在没有执行完当前指令的工作组,则任何其他工作组都不会开始下一条指令的执行。
但是,由于这几个子步骤之间不存在数据依赖和冲突,顺序的执行计算核可以按照前述流水线操作方式执行,通过计算核的调度来实现各个子步骤的并行计算。
根据图9,一个视频解码计算任务包含4个计算子任务,即算数解码,运动补偿/预测,反向离散余弦变换,反量化和块拼接,此时可需要4个计算核。这四个子任务之间是串行关系,即完成子任务1后,其输出结果要作为输入传递给子任务2,以此类推。每一个子任务可以由一个计算核完成。
针对图9的示例,若无流水线操作优化,则输入每次仅包含一个ade。假设加速器上设计了4个不同计算核,那么一次可以启动4个计算核,这4个计算核之间是串行的关系。即,第2个计算核等待第1个计算核执行完计算任务后,才可以将得到的输出结果作为输入,执行计算。以此类推。在这种情况下,每个计算核所需的工作组的数目为1。
若采用流水线优化方式,则同一时刻可以同时执行4个计算任务(除任务开始和任务结束的最后几个时刻),相当于同时输入4个ade作为一个工作组。一次输入的ade的数目为4。
步骤3,输出数据通道,即通过计算核的工作组完成对ade的计算后,将得到的输出ade数据重新打包为sdo,发送到输出数据通道。
如图9所示的编程方法,隐藏了底层硬件架构的操作,用更直观的计算任务和计算数据驱动异构系统的编程,大大提高了编程效率,简化编程人员的对专用加速器的使用方式。由于采用数据驱动的执行方式,程序执行时无需考虑复杂的控制成本,本发明提供的编程方法能够更高效地利用专用加速器的硬件资源,提升运算任务的执行效率。
相应地,本发明还提供一种编程系统,该编程系统可在cpu或gpu中实现,该系统包括处理器和存储器,该存储器用于存储计算机指令,该处理器用于执行存储器中存储的计算机指令,当计算机指令被处理器执行时该装置实现如前所述各个方法步骤。
本公开还涉及存储介质,其上可以存储有计算机程序代码,当程序代码被执行时可以实现本发明的方法的各种实施例,该存储介质可以是有形存储介质,诸如光盘、u盘、软盘、硬盘等。
本领域内的技术人员应明白,本申请的实施例可提供方法、计算机程序产品和计算机存储介质。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质上实施的计算机程序产品的形式。
虽然本申请提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的劳动可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或客户端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境)。
上述实施例阐明的装置或模块,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。为了描述的方便,描述以上装置时以功能分为各种模块分别描述。在实施本申请时可以把各模块的功能在同一个或多个软件和/或硬件中实现。当然,也可以将实现某功能的模块由多个子模块或子单元组合实现。
本申请中所述的方法、装置或模块可以以计算机可读程序代码方式实现控制器按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(applicationspecificintegratedcircuit,asic)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:arc625d、atmelat91sam、microchippic18f26k20以及siliconelabsc8051f320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内部包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所付权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
1.一种加速器体系结构的编程方法,其特征在于,该方法包括以下步骤:
将结构化数据对象输入到输入数据通道;
将输入数据通道内的结构化数据对象拆分为计算核可执行的多个输入原子数据元素,并基于加速器设备内可执行计算任务的计算核数目和计算核之间的数据依赖关系形成包含第一数目的输入原子数据元素的工作组;
由可执行所述计算任务的计算核针对所述工作组内所有输入原子数据元素执行运算,得到一组输出原子数据元素;
基于所述输出原子数据元素得到输出结构化数据对象,经与计算核连接的输出数据通道输出。
2.根据权利要求1所述的方法,其特征在于,
所述结构化数据对象是能够被加速器直接操作的基本数据单元;
所述输入原子数据元素为计算核执行的计算任务的最小数据单元。
3.根据权利要求1所述的方法,其特征在于,所述方法采用流水线操作,不同计算任务对应工作组内的不同输入原子数据元素,由计算核并行执行。
4.根据权利要求3所述的方法,其特征在于,
在加速器设备内可执行计算任务的计算核之间不存在数据依赖的情况下,所述第一数目等于所述加速器设备内可执行计算任务的计算核的数目。
5.根据权利要求3所述的方法,其特征在于,
所述加速器设备内可执行计算任务的计算核中,彼此存在数据依赖的多个计算核对应一个计算元素,每一不存在数据依赖的计算核对应一个计算元素,所述第一数目与加速器设备内可执行计算任务的计算核对应的计算元素数相同。
6.根据权利要求1所述的方法,其特征在于,所述第一数目为1,所述加速器设备内可执行计算任务的各个计算核串行执行计算任务。
7.根据权利要求1所述的方法,其特征在于,所述基于所述输出原子数据元素得到输出结构化数据对象,经与计算核连接的输出数据通道输出,包括:
将得到的输出结构化数据对象先进行缓存,然后打包后获得输出结构化数据对象,经与计算核连接的输出数据通道输出。
8.根据权利要求1所述的方法,其特征在于,所述输入数据通道和所述输出数据通道的数据维度相同或不同。
9.一种编程系统,所述系统包括处理器和存储器,其特征在于,所述存储器中存储有计算机指令,所述处理器用于执行所述存储器中存储的计算机指令,当所述计算机指令被处理器执行时该系统实现权利要求1-8中任意一项所述方法的步骤。
10.一种计算机存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至8中任一项所述方法的步骤。
技术总结