CN105335135A - 数据处理方法和中心节点 - Google Patents
数据处理方法和中心节点 Download PDFInfo
- Publication number
- CN105335135A CN105335135A CN201410331030.0A CN201410331030A CN105335135A CN 105335135 A CN105335135 A CN 105335135A CN 201410331030 A CN201410331030 A CN 201410331030A CN 105335135 A CN105335135 A CN 105335135A
- Authority
- CN
- China
- Prior art keywords
- function
- gpu
- data record
- cyclical
- centroid
- 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
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/44—Arrangements for executing specific programs
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Image Processing (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例提供一种数据处理方法和中心节点,中心节点根据用户提供的采用MapReduce计算框架编写的第一循环函数,生成第二循环函数、启动计算函数和第二拷贝函数,其中,第二循环函数用于循环调用第一拷贝函数将计算节点中需要GPU处理的多个数据记录从计算节点的内存拷贝到GPU的显存中,启动计算函数中的Map计算函数用于指示GPU对GPU负责处理的数据记录进行处理,第二拷贝函数用于将GPU对多个数据记录的计算结果从GPU的显存中拷贝至计算节点的内存中,从而实现将适用于在CPU中运行的代码自动生成适用于在GPU中运行的代码,使Hadoop编程框架适用于在混合集群***进行数据处理。
Description
技术领域
本发明实施例涉及计算机技术,尤其涉及一种数据处理方法和中心节点。
背景技术
采用大规模集群进行大数据处理的***中,MapReduce是目前最为流行的编程模型。
在同构的集群***(例如:由多个中央处理器(CentralProcessingUnit,简称CPU)经过网络连接构成的集群***)中,MapReduce目前使用的是Hadoop编程框架,在Hadoop编程框架下,程序员仅需要编写Map函数和Reduce函数,提交给集群***的中心节点上运行的Hadoop程序,当有计算任务需要处理时,Hadoop程序将计算任务分解为多个子数据块(split),并将Map函数和Reduce函数以及子数据块发送给需要进行计算的计算节点,计算节点接到执行任务指令时,调用Map函数对接收到的子数据块进行处理,然后Reduce函数对Map函数的处理结果进行排序、混合等处理后输出最终结果。
然而,现有技术中的Hadoop编程框架仅适用于同构的集群***,而无法适用于混合集群***(例如:CPU和图像处理器(GraphicProcessingUnit,简称GPU)混合的集群***)进行数据处理。
发明内容
本发明实施例提供一种数据处理方法和中心节点,以使Hadoop编程框架适用于混合集群***进行数据处理。
本发明第一方面提供一种数据处理方法,所述方法应用于Hadoop集群***,所述Hadoop集群***中包括计算节点和中心节点,所述中心节点上运行Hadoop程序,所述中心节点对所述计算节点进行MapReduce运算管理,所述计算节点上包含有CPU和具有N个核的GPU,所述方法包括:
所述中心节点接收用户根据所述Hadoop程序所提供的MapReduce计算框架编写的第一循环函数,所述第一循环函数中包括用户提供的Map计算函数,所述第一循环函数用于循环调用所述用户提供的Map计算函数;
所述中心节点利用运行的所述Hadoop程序将所述第一循环函数中的Map计算函数替换为第一拷贝函数以生成第二循环函数,所述第一拷贝函数用于将所述计算节点中需要所述GPU处理的多个数据记录从所述计算节点的内存拷贝到所述GPU的显存中,所述第二循环函数用于对所述第一拷贝函数进行循环执行;
所述中心节点根据所述第一循环函数生成启动计算函数,所述启动计算函数中的Map计算函数用于指示所述GPU对所述GPU负责处理的数据记录进行处理;
所述中心节点生成第二拷贝函数,所述第二拷贝函数用于将所述GPU对所述多个数据记录的计算结果从所述GPU的显存中拷贝至所述计算节点的内存中。
结合本发明第一方面,在本发明第一方面的第一种可能的实现方式中,所述启动计算函数中的Map计算函数包括:输入部分、计算部分、输出部分,其中,所述输入部分用于从所述GPU的显存中读取所述GPU需要处理的数据记录,所述计算部分用于对所述输入部分读取的需要处理的数据记录进行处理,所述输出部分用于将所述计算部分处理后数据记录的计算结果存储到所述GPU的显存中。
结合本发明第一方面以及本发明第一方面的第一种可能的实现方式,在本发明第一方面的第二种可能的实现方式中,所述启动计算函数中的Map计算函数用于对所述GPU负责处理的多个数据记录并行处理,其中,所述GPU的多个核分别处理所述GPU负责处理的多个数据记录中的至少一个数据记录。
结合本发明第一方面的第二种可能的实现方式,在本发明第一方面的第三种可能的实现方式中,当所述启动计算函数中的Map计算函数用于对所述GPU负责的多个数据记录并行处理时,所述输入部分的输入地址包括所述GPU的每个核的输入地址,以使所述GPU的每个核根据自己的输入地址从所述GPU的显存中读取需要处理数据记录,所述输出部分的输出地址包括所述GPU的每个核的输出地址,以使所述GPU的每个核根据自己的输出地址将处理后的数据记录的结果存储到自己的输出地址中。
结合本发明第一方面的第三种可能的实现方式,在本发明第一方面的第四种可能的实现方式中,所述中心节点生成启动计算函数,包括:
所述中心节点将所述用户提供的Map计算函数中的输入地址修改为所述GPU的每个核的输入地址以生成所述输入部分的输入地址;
所述中心节点将所述用户提供的Map计算函数中的输出地址修改所述GPU的每个核的输出地址以生成所述输出部分的输出地址;
所述中心节点将所述用户提供的Map计算函数外层的所述第一循环函数替换为第三循环函数,所述第三循环函数的循环次数为所述GPU负责处理的数据记录的数目M;
所述中心节点将所述第三循环函数中的循环拆分为外层循环和内层循环,以将所述GPU负责处理的M个数据记录划分为个并行执行的数据记录块,其中,所述外层循环的次数为,所述内层循环的次数为B,所述GPU的每个核执行一个数据记录块;
所述中心节点将所述用户提供的Map计算函数的局部变量声明为所述GPU的线程局部变量,其中,所述GPU的每个核对应一个线程局部变量,所述GPU的每个核通过自己对应的线程局部变量从所述GPU的显卡中读取需要处理的数据记录。
结合本发明第一方面以及本发明第一方面的第一种至第四种可能的实现方式,在本发明第一方面的第五种可能的实现方式中,所述方法还包括:所述计算节点将所述启动计算函数的语言转换为所述GPU所能识别的语言。
结合本发明第一方面以及本发明第一方面的第一种至第五种可能的实现方式,在本发明第一方面的第六种可能的实现方式中,所述方法还包括:
所述中心节点将所述第一循环函数、所述第二循环函数、所述第二拷贝函数、所述启动计算函数发送给所述计算节点,以使所述CPU运行所述第一循环函数、所述第二循环函数和所述第二拷贝函数,并使所述GPU运行所述启动计算函数。
本发明第二方面提供一种中心节点,包括:
接收模块,用于接收用户根据Hadoop程序所提供的MapReduce计算框架编写的第一循环函数,所述第一循环函数中包括用户提供的Map计算函数,所述第一循环函数用于循环调用所述用户提供的Map计算函数;
第一生成模块,用于利用运行的所述Hadoop程序将所述第一循环函数中的Map计算函数替换为第一拷贝函数以生成第二循环函数,所述第一拷贝函数用于将所述计算节点中需要所述GPU处理的多个数据记录从所述计算节点的内存拷贝到所述GPU的显存中,所述第二循环函数用于对所述第一拷贝函数进行循环执行;
第二生成模块,用于根据所述第一循环函数生成启动计算函数,所述启动计算函数中的Map计算函数用于指示所述GPU对所述GPU负责处理的数据记录进行处理;
第三生成模块,用于生成第二拷贝函数,所述第二拷贝函数用于将所述GPU对所述多个数据记录的计算结果从所述GPU的显存中拷贝至所述计算节点的内存中。
结合本发明第二方面,在本发明第二方面的第一种可能的实现方式中,所述启动计算函数中的Map计算函数包括:输入部分、计算部分、输出部分,其中,所述输入部分用于从所述GPU的显存中读取所述GPU需要处理的数据记录,所述计算部分用于对所述输入部分读取的需要处理的数据记录进行处理,所述输出部分用于将所述计算部分处理后数据记录的计算结果存储到所述GPU的显存中。
结合本发明第二方面以及本发明第二方面的第一种可能的实现方式,在本发明第二方面的第二种可能的实现方式中,所述启动计算函数中的Map计算函数用于对所述GPU负责处理的多个数据记录并行处理,其中,所述GPU的多个核分别处理所述GPU负责处理的多个数据记录中的至少一个数据记录。
结合本发明第二方面的第二种可能的实现方式,在本发明第二方面的第三种可能的实现方式中,当所述启动计算函数中的Map计算函数用于对所述GPU负责的多个数据记录并行处理时,所述输入部分的输入地址包括所述GPU的每个核的输入地址,以使所述GPU的每个核根据自己的输入地址从所述GPU的显存中读取需要处理数据记录,所述输出部分的输出地址包括所述GPU的每个核的输出地址,以使所述GPU的每个核根据自己的输出地址将处理后的数据记录的结果存储到自己的输出地址中。
结合本发明第二方面的第三种可能的实现方式,在本发明第二方面的第四种可能的实现方式中,所述第二生成模块具体用于:
将所述用户提供的Map计算函数中的输入地址修改为所述GPU的每个核的输入地址以生成所述输入部分的输入地址;
将所述用户提供的Map计算函数中的输出地址修改所述GPU的每个核的输出地址以生成所述输出部分的输出地址;
将所述用户提供的Map计算函数外层的所述第一循环函数替换为第三循环函数,所述第三循环函数的循环次数为所述GPU负责处理的数据记录的数目M;
将所述第三循环函数中的循环拆分为外层循环和内层循环,以将所述GPU负责处理的M个数据记录划分为个并行执行的数据记录块,其中,所述外层循环的次数为,所述内层循环的次数为B,所述GPU的每个核执行一个数据记录块;
将所述用户提供的Map计算函数的局部变量声明为所述GPU的线程局部变量,其中,所述GPU的每个核对应一个线程局部变量,所述GPU的每个核通过自己对应的线程局部变量从所述GPU的显卡中读取需要处理的数据记录。
结合本发明第二方面以及本发明第二方面的第一种至第四种可能的实现方式,在本发明第二方面的第五种可能的实现方式中,所述中心节点还包括:
转换模块,用于将所述启动计算函数的语言转换为所述GPU所能识别的语言。
结合本发明第二方面以及本发明第二方面的第一种至第五种可能的实现方式,在本发明第二方面的第六种可能的实现方式中,所述中心节点还包括:
发送模块,用于将所述第一循环函数、所述第二循环函数、所述第二拷贝函数、所述启动计算函数发送给所述计算节点,以使所述CPU运行所述第一循环函数、所述第二循环函数和所述第二拷贝函数,并使所述GPU运行所述启动计算函数。
本发明实施例的一种数据处理方法和中心节点,中心节点根据用户提供的采用MapReduce计算框架编写的第一循环函数,生成第二循环函数、启动计算函数和第二拷贝函数,其中,第二循环函数用于循环调用第一拷贝函数将计算节点中需要GPU处理的多个数据记录从计算节点的内存拷贝到GPU的显存中,启动计算函数中的Map计算函数用于指示GPU对GPU负责处理的数据记录进行处理,第二拷贝函数用于将GPU对多个数据记录的计算结果从GPU的显存中拷贝至计算节点的内存中,从而实现将适用于在CPU中运行的代码自动生成适用于在GPU中运行的代码,使Hadoop编程框架适用于在混合集群***进行数据处理。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一提供的数据处理方法的流程图;
图2为本发明实施例二提供的数据处理方法的流程图;
图3为本发明实施例三提供的中心节点的结构示意图;
图4为本发明实施例四提供的中心节点的结构示意图;
图5为本发明实施例五提供的中心节点的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供一种数据处理方法,该方法应用于Hadoop集群***,该Hadoop集群***中包括计算节点和中心节点,该中心节点上运行Hadoop程序,中心节点对计算节点进行MapReduce运算管理,计算节点上包含有CPU和具有N个核的GPU,即本发明实施例中的Hadoop集群***为混合集群***,计算节点的CPU和GPU都能够运行MapReduce程序对数据进行处理。图1为本发明实施例一提供的数据处理方法的流程图,如图1所示,本实施例的方法可以包括以下步骤:
步骤101、中心节点接收用户根据Hadoop程序所提供的MapReduce计算框架编写的第一循环函数,第一循环函数中包括用户提供的Map计算函数,第一循环函数用于循环调用用户提供的Map计算函数。
用户提供第一循环函数是采用现有的Hadoop编写方式编写的,该第一循环函数可以直接在计算节点的CPU上运行。在Hadoop机制中将要计算的计算任务划分为多个数据块(Spilt),在Spilt内部数据又被划分为多个数据记录(record),该第一循环函数循环调用用户提供的Map计算函数,用户提供的Map计算函数顺序执行每个数据记录,CPU通过循环调用用户提供的Map计算函数完成计算任务。
步骤102、中心节点利用运行的Hadoop程序将第一循环函数中的Map计算函数替换为第一拷贝函数以生成第二循环函数,第一拷贝函数用于将计算节点中需要GPU处理的多个数据记录从计算节点的内存拷贝到GPU的显存中,第二循环函数用于对第一拷贝函数进行循环执行。
本发明实施例的场景中需要GPU和CPU协同对计算任务进行处理,但是第一循环函数是针对CPU的运行环境编写的,第一循环函数只能运行在CPU上,而无法在GPU上运行,因此,本实施例的方法就是要生成能够在GPU上运行的代码,以下简称GPU代码,GPU代码能够调用Map计算函数对数据记录进行处理。
CPU在执行Map计算函数时,要获取Map计算函数的变量值,Map计算函数的变量值在CPU端通过java语言声明和定义,存储在内存中。Map函数的变量主要包括键值(key)和变量值(value)。CPU端通过变量的声明,从内存中读取数据进行处理。若将用户提供的Map计算函数不做任何修改直接拷贝到GPU上运行,那么当Map计算函数在执行时要用到变量时,GPU上的管理程序会去GPU上的变量列表中查找该变量,由于该变量只在CPU上进行了声明,只有在CPU端执行的java程序才能访问该变量,因此,GPU上的Map计算函数找不到该变量,Map计算函数无法执行。
通过上述的问题可知,GPU不能直接访问计算节点的内存,要在GPU上运行Map计算函数,首先要将内存中的数据拷贝到GPU的显存中,GPU可以直接访问显存中的数据。因此,中心节点将第一循环函数中的Map计算函数替换为第一拷贝函数以生成第二循环函数,第一拷贝函数用于将计算节点中需要GPU处理的多个数据记录从计算节点的内存拷贝到GPU的显存中,第二循环函数用于对第一拷贝函数进行循环执行,该第一循环函数每次拷贝一条数据记录,第二循环函数通过多次调用第一拷贝函数将GPU需要处理的数据记录都拷贝到GPU的显存中。
步骤103、中心节点根据第一循环函数生成启动计算函数,启动计算函数中的Map计算函数用于指示GPU对GPU负责处理的数据记录进行处理。
中心节点根据用户提交的第一循环函数为GPU生成启动计算函数,该启动计算函数包括Map计算函数,GPU通过调用启动计算函数中的Map计算函数对数据记录进行处理。该启动计算函数中的Map计算函数可以包括:启动计算函数中的Map计算函数包括:输入部分、计算部分、输出部分,其中,所述输入部分用于从所述GPU的显存中读取需要处理的数据记录,所述计算部分用于对所述输入部分读取的需要处理的数据记录进行处理,所述输出部分用于将所述计算部分处理后数据记录的计算结果存储到所述GPU的显存中。
计算节点在对数据记录进行处理前,首先要执行第二循环函数,将GPU需要处理的数据记录从计算节点的内存中都拷贝到GPU的显存中。当计算节点执行启动计算函数的Map计算函数时,首先,输入部分访问GPU的显存读取需要处理的数据记录,然后,计算部分通过调用Map计算函数对输入部分读取到的数据记录进行处理,计算部分对数据记录处理完后,输出部分将数据记录的处理结果存储到GPU的显存中。
当GPU需要处理多条数据记录时,计算部分可以对多条数据记录进行并行处理,假设GPU的N个核都空闲,那么GPU的N个核可以并行对多条数据记录进行处理,例如共有2N个数据记录,那么每个核可以处理两条数据记录,N个核可以同时并行处理,并行处理能够处理效率。若需要处理数据记录较少,GPU也可以多次循环调用Map函数进行处理。
步骤104、中心节点生成第二拷贝函数,第二拷贝函数用于将GPU对多个数据记录的计算结果从GPU的显存中拷贝至计算节点的内存中。
在GPU将数据记录处理完后,还需要将数据记录的计算结果从GPU的显存中拷贝至计算节点的内存中,因此,中心节点还要生成第二拷贝函数,该第二拷贝函数用于将GPU对多个数据记录的计算结果从GPU的显存中拷贝至计算节点的内存中。在计算节点将所有数据记录都处理完后,Reduce函数对Map计算函数的计算结果进行排序、混合等处理,因此,中心节点还需要向计算节点发送Reduce函数。
中心节点在生成第二循环函数、启动计算函数以及第二拷贝函数之后,中心节点将第一循环函数、第二循环函数、第二拷贝函数、启动计算函数发送给计算节点,具体的,中心节点将第一循环函数、第二循环函数和第二拷贝函数发送给CPU,以使CPU运行第一循环函数、第二循环函数和第二拷贝函数,中心节点将启动计算函数发送给GPU,以使GPU运行启动计算函数。
当中心节点接收到用户输入的计算任务时,将计算任务分割为多个子数据块,然后,根据预设调度策略为每个子数据块分配对应的计算节点,并将每个子数据块发送给对应的计算节点,计算节点接收到子数据块后将子数据块存储到计算节点的内存中。当计算节点中包含GPU时,计算节点的GPU和CPU可以协同对接收到的子数据块进行处理。当计算节点中不包含GPU时,计算节点的CPU对接收到的子数据块进行处理。
本实施例的方法中,当CPU和GPU使用不同的编程语言时,计算节点还用于将启动计算函数的语言转换为所述GPU所能识别的语言。例如,CPU上运行C++,GPU上运行java,那么计算节点需要将启动计算函数的C++语言转换为java语言。
本实施例中,中心节点根据用户提供的采用MapReduce计算框架编写的第一循环函数,生成第二循环函数、启动计算函数和第二拷贝函数,其中,第二循环函数用于循环调用第一拷贝函数将计算节点中需要GPU处理的多个数据记录从计算节点的内存拷贝到GPU的显存中,启动计算函数中的Map计算函数用于指示GPU对GPU负责处理的数据记录进行处理,第二拷贝函数用于将GPU对多个数据记录的计算结果从GPU的显存中拷贝至计算节点的内存中,从而实现将适用于在CPU中运行的代码自动生成适用于在GPU中运行的代码,使Hadoop编程框架适用于在混合集群***进行数据处理。由于中心节点能够根据用户提供的第一循环函数自动生成适用于在GPU中运行的代码,不需要改变现有的Hadoop编写方式,即不需要重新改写Map和Reduce函数,有利于遗产代码的维护和移植。
现有的Hadoop机制中,将计算任务分解为多个子数据块(split),split之间并行进行Map函数,split一般是64M大小的数据,并行的粒度较粗,不适合GPU的结构特点,GPU通常具有很多个核,各个核之间可以并行运行,因此,可以将split划分为更细粒度,以充分利用GPU的结构特点。具体的,将分配给GPU的split中包括的多个数据记录分配给GPU的多个核同时并行处理,可以进一步提高计算节点的处理速度。
图2为本发明实施例二提供的数据处理方法的流程图,本实施例在实施例一的基础上,详细的说明当GPU对负责处理的多个数据记录并行处理时,计算节点如何生成启动计算函数。本实施例中,启动计算函数中的Map计算函数用于对GPU负责处理的多个数据记录并行处理,其中,GPU的L个核分别处理GPU负责处理的多个数据记录中的至少一个数据记录,其中,L为大于等于2小于等于N的整数,N为GPU包含的核的总数。如图2所示,本实施例的方法可以包括以下步骤:
步骤201、中心节点将用户提供的Map计算函数中的输入地址修改为GPU的每个核的输入地址。
当启动计算函数中的Map计算函数用于对GPU负责的多个数据记录并行处理时,启动计算函数中的Map计算函数的输入部分的输入地址包括GPU的每个核的输入地址,以使GPU的每个核根据自己的输入地址从GPU的显存中读取需要处理数据记录。
用户提供的Map计算函数中输入和输出都只有一个,因此,需要将用户提供的Map计算函数中的输入地址修改为GPU的每个核的输入地址,每个核的输入地址可以表示为:work-buff[index1[i]],i=0,1,……L-1,work-buff表示GPU需要处理的数据在显存中的地址,index1[i]用于指示该数据由第i个核处理。当GPU负责的多个数据记录并行处理时,GPU的每个核上都需要运行启动计算函数,第i个GPU核执行对应的启动计算函数将work-buff[index1[i]]地址中的数据记录读取出来并处理,GPU的每个核对应一个进程。
步骤202、中心节点将用户提供的Map计算函数中的输出地址修改GPU的每个核的输出地址以生成输出部分的输出地址。
当启动计算函数中的Map计算函数用于对GPU负责的多个数据记录并行处理时,输出部分的输出地址包括GPU的每个核的输出地址,以使GPU的每个核根据自己的输出地址将处理后的数据记录的结果存储到自己的输出地址中。每个核的输出地址可以表示为:Result-buff[index2[i]],i=0,1,……L-1。
步骤203、中心节点将用户提供的Map计算函数外层的第一循环函数替换为第三循环函数,第三循环函数的循环次数为GPU负责处理的数据记录的数目M。
步骤204、中心节点将第三循环函数中的循环拆分为外层循环和内层循环,以将GPU负责处理的M个数据记录划分为个并行执行的数据记录块,其中,外层循环的次数为,内层循环的次数为B,GPU的每个核执行一个数据记录块。
步骤205、中心节点将用户提供的Map计算函数的局部变量声明为GPU的线程局部变量,其中,GPU的每个核对应一个线程局部变量,GPU的每个核通过自己对应的线程局部变量从GPU的显卡中读取需要处理的数据记录。
步骤203-205为GPU对负责的多个数据记录并行处理时,中心节点生成启动计算函数的计算部分的具体过程。
第一循环函数在调用用户提供的Map计算函数出来完一条数据记录后,第一循环判断是否还有数据记录要处理,若还有数据要处理,第一循环函数继续调用用户提供的Map计算函数,直至所有的数据记录都处理完,即第一循环函数为一个串行Map计算函数。本实施例中需要将数据记录分配给GPU的多个核进行处理,因此,不能直接使用第一循环函数,需要将串行的Map计算函数转换为并行的OpenCLkernel,OpenCLkernel是OpenCL程序中在GPU上并行执行的代码段,以函数形式包装。具体地,中心节点将用户提供的Map计算函数外层的第一循环函数替换为第三循环函数,第三循环函数的循环次数为GPU负责处理的数据记录的数目M,第一循环函数和第三循环函数的循环条件不一样。
在将Map计算函数外的第一循环函数替换为第三循环函数后,中心节点将第三循环函数中的循环拆分为外层循环和内层循环,以将GPU负责处理的M个数据记录划分为个并行执行的数据记录块,外层循环的循环次数为,内存循环的循环次数为B。将内层循环作为一个OpenCLkernel,那么总共生成了个OpenCLkernel,GPU的每个核运行一个OpenCLkernel,个OpenCLkernel并行执行。
GPU的每个核执行一个数据记录块,共有个核并行执行,内层循环的次数为B,即每个核处理B个数据记录,每个核通过调用B次Map计算函数对B个数据记录进行处理。当M/B为整数时,M个数据记录刚好被划分成了M/B个数据记录块,每个数据记录块中的数据记录的个数都相等,当M/B不为整数时,数据记录块的个数为对M/B的值向上取整,最后一个数据记录块的数据记录的个数与其他数据记录块的个数不相同,最后一个数据记录块的数据记录的个数为M/B的余数,例如,当M等于11,B等于5时,11/5等于2余1,那么数据记录被划分成了5个并行执行的数据记录块,GPU的其中5个核分别执行两个数据记录,最后一个核执行1个数据记录。
用户提供的Map计算函数的变量为局部变量,CPU在执行用户提供的Map计算函数时,该变量可以被所有数据记录共用,而本实施例中每个核的变量只能被该核处理的数据记录共用,而不能被其他核共用,因此,中心节点需要将用户提供的Map计算函数的局部变量声明为GPU的线程局部变量。
现有技术中,Map阶段的并行性仅存在于split之间,并行粒度较粗,而本实施例的方法中,通过将现有的Hadoop机制中Map函数串行执行模式改变为并行执行模式。保留了原有的split之间的并行性,同时增加了split之内数据记录之间的并行性,即将GPU上运行的一个split进一步划分为多个并行执行的数据记录块,使计算节点的并行性增强、计算速率得到提高。
图3为本发明实施例三提供的中心节点的结构示意图,如图3所示,本实施例的中心节点包括:接收模块11、第一生成模块12、第二生成模块13和第三生成模块14。
其中,接收模块11,用于接收用户根据Hadoop程序所提供的MapReduce计算框架编写的第一循环函数,所述第一循环函数中包括用户提供的Map计算函数,所述第一循环函数用于循环调用所述用户提供的Map计算函数;
第一生成模块12,用于利用运行的所述Hadoop程序将所述第一循环函数中的Map计算函数替换为第一拷贝函数以生成第二循环函数,所述第一拷贝函数用于将所述计算节点中需要所述GPU处理的多个数据记录从所述计算节点的内存拷贝到所述GPU的显存中,所述第二循环函数用于对所述第一拷贝函数进行循环执行;
第二生成模块13,用于根据所述第一循环函数生成启动计算函数,所述启动计算函数中的Map计算函数用于指示所述GPU对所述GPU负责处理的数据记录进行处理;
第三生成模块14,用于生成第二拷贝函数,所述第二拷贝函数用于将所述GPU对所述多个数据记录的计算结果从所述GPU的显存中拷贝至所述计算节点的内存中。
其中,启动计算函数中的Map计算函数可以包括:输入部分、计算部分、输出部分,其中,所述输入部分用于从所述GPU的显存中读取所述GPU需要处理的数据记录,所述计算部分用于对所述输入部分读取的需要处理的数据记录进行处理,所述输出部分用于将所述计算部分处理后数据记录的计算结果存储到所述GPU的显存中。
本实施例的中心节点可用于执行图1所示方法实施例的技术方案,具体实现方式和技术效果类似,这里不再赘述。
图4为本发明实施例四提供的中心节点的结构示意图,如图4所示,本实施例的中心节点在图3所示中心节点的基础上还包括:转换模块15和发送模块16,转换模块15,用于将所述启动计算函数的语言转换为所述GPU所能识别的语言。发送模块,用于将所述第一循环函数、所述第二循环函数、所述第二拷贝函数、所述启动计算函数发送给所述计算节点,以使所述CPU运行所述第一循环函数、所述第二循环函数和所述第二拷贝函数,并使所述GPU运行所述启动计算函数。
本实施例中,启动计算函数中的Map计算函数用于对所述GPU负责处理的多个数据记录并行处理,其中,所述GPU的多个核分别处理所述GPU负责处理的多个数据记录中的至少一个数据记录。
当所述启动计算函数中的Map计算函数用于对所述GPU负责的多个数据记录并行处理时,所述输入部分的输入地址包括所述GPU的每个核的输入地址,以使所述GPU的每个核根据自己的输入地址从所述GPU的显存中读取需要处理数据记录,所述输出部分的输出地址包括所述GPU的每个核的输出地址,以使所述GPU的每个核根据自己的输出地址将处理后的数据记录的结果存储到自己的输出地址中。
当所述启动计算函数中的Map计算函数用于对所述GPU负责的多个数据记录并行处理时,所述第二生成模块具体用于执行以下操作:
将所述用户提供的Map计算函数中的输入地址修改为所述GPU的每个核的输入地址以生成所述输入部分的输入地址;将所述用户提供的Map计算函数中的输出地址修改所述GPU的每个核的输出地址以生成所述输出部分的输出地址;
将所述用户提供的Map计算函数外层的所述第一循环函数替换为第三循环函数,所述第三循环函数的循环次数为所述GPU负责处理的数据记录的数目M;将所述第三循环函数中的循环拆分为外层循环和内层循环,以将所述GPU负责处理的M个数据记录划分为个并行执行的数据记录块,其中,所述外层循环的次数为,所述内层循环的次数为B,所述GPU的每个核执行一个数据记录块;
将所述用户提供的Map计算函数的局部变量声明为所述GPU的线程局部变量,其中,所述GPU的每个核对应一个线程局部变量,所述GPU的每个核通过自己对应的线程局部变量从所述GPU的显卡中读取需要处理的数据记录。
本实施例的中心节点,可用于执行图1和图2所示方法实施例的技术方案,具体实现方式和技术效果类似,这里不再赘述。
图5为本发明实施例五提供的中心节点的结构示意图,如图5所示,本实施例的中心节点200包括:处理器21、存储器22、通信接口23以及***总线24,存储器22和通信接口23通过***总线24与处理器21连接并通信,通信接口23用于和其他设备进行通信,存储器22中存储有计算机执行指令221;所述处理器21,用于运行所述计算机执行指令221,执行如下所述的方法:
接收用户根据所述Hadoop程序所提供的MapReduce计算框架编写的第一循环函数,所述第一循环函数中包括用户提供的Map计算函数,所述第一循环函数用于循环调用所述用户提供的Map计算函数;
利用运行的所述Hadoop程序将所述第一循环函数中的Map计算函数替换为第一拷贝函数以生成第二循环函数,所述第一拷贝函数用于将所述计算节点中需要所述GPU处理的多个数据记录从所述计算节点的内存拷贝到所述GPU的显存中,所述第二循环函数用于对所述第一拷贝函数进行循环执行;
根据所述第一循环函数生成启动计算函数,所述启动计算函数中的Map计算函数用于指示所述GPU对所述GPU负责处理的数据记录进行处理;
生成第二拷贝函数,所述第二拷贝函数用于将所述GPU对所述多个数据记录的计算结果从所述GPU的显存中拷贝至所述计算节点的内存中。
其中,所述启动计算函数中的Map计算函数具体可以包括:输入部分、计算部分、输出部分,其中,所述输入部分用于从所述GPU的显存中读取所述GPU需要处理的数据记录,所述计算部分用于对所述输入部分读取的需要处理的数据记录进行处理,所述输出部分用于将所述计算部分处理后数据记录的计算结果存储到所述GPU的显存中。
可选地,所述启动计算函数中的Map计算函数可以用于对所述GPU负责处理的多个数据记录并行处理,其中,所述GPU的多个核分别处理所述GPU负责处理的多个数据记录中的至少一个数据记录。当所述启动计算函数中的Map计算函数用于对所述GPU负责的多个数据记录并行处理时,所述输入部分的输入地址包括所述GPU的每个核的输入地址,以使所述GPU的每个核根据自己的输入地址从所述GPU的显存中读取需要处理数据记录,所述输出部分的输出地址包括所述GPU的每个核的输出地址,以使所述GPU的每个核根据自己的输出地址将处理后的数据记录的结果存储到自己的输出地址中。
当所述启动计算函数中的Map计算函数用于对所述GPU负责的多个数据记录并行处理时,处理器21生成启动计算函数,具体包括以下步骤:
所述中心节点将所述用户提供的Map计算函数中的输入地址修改为所述GPU的每个核的输入地址以生成所述输入部分的输入地址;
所述中心节点将所述用户提供的Map计算函数中的输出地址修改所述GPU的每个核的输出地址以生成所述输出部分的输出地址;
所述中心节点将所述用户提供的Map计算函数外层的所述第一循环函数替换为第三循环函数,所述第三循环函数的循环次数为所述GPU负责处理的数据记录的数目M;
所述中心节点将所述第三循环函数中的循环拆分为外层循环和内层循环,以将所述GPU负责处理的M个数据记录划分为个并行执行的数据记录块,其中,所述外层循环的次数为,所述内层循环的次数为B,所述GPU的每个核执行一个数据记录块;
所述中心节点将所述用户提供的Map计算函数的局部变量声明为所述GPU的线程局部变量,其中,所述GPU的每个核对应一个线程局部变量,所述GPU的每个核通过自己对应的线程局部变量从所述GPU的显卡中读取需要处理的数据记录。
可选地,处理器21还用于将所述启动计算函数的语言转换为所述GPU所能识别的语言。
本实施例中,通信接口23具体可以用于将所述第一循环函数、所述第二循环函数、所述第二拷贝函数、所述启动计算函数发送给所述计算节点,以使所述CPU运行所述第一循环函数、所述第二循环函数和所述第二拷贝函数,并使所述GPU运行所述启动计算函数。
本实施例的中心节点,可用于执行图1和图2所示方法实施例的技术方案,具体实现方式和技术效果类似,这里不再赘述。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (14)
1.一种数据处理方法,所述方法应用于Hadoop集群***,所述Hadoop集群***中包括计算节点和中心节点,所述中心节点上运行Hadoop程序,所述中心节点对所述计算节点进行MapReduce运算管理,所述计算节点上包含有CPU和具有N个核的GPU,其特征在于,所述方法包括:
所述中心节点接收用户根据所述Hadoop程序所提供的MapReduce计算框架编写的第一循环函数,所述第一循环函数中包括用户提供的Map计算函数,所述第一循环函数用于循环调用所述用户提供的Map计算函数;
所述中心节点利用运行的所述Hadoop程序将所述第一循环函数中的Map计算函数替换为第一拷贝函数以生成第二循环函数,所述第一拷贝函数用于将所述计算节点中需要所述GPU处理的多个数据记录从所述计算节点的内存拷贝到所述GPU的显存中,所述第二循环函数用于对所述第一拷贝函数进行循环执行;
所述中心节点根据所述第一循环函数生成启动计算函数,所述启动计算函数中的Map计算函数用于指示所述GPU对所述GPU负责处理的数据记录进行处理;
所述中心节点生成第二拷贝函数,所述第二拷贝函数用于将所述GPU对所述多个数据记录的计算结果从所述GPU的显存中拷贝至所述计算节点的内存中。
2.根据权利要求1所述的方法,其特征在于,所述启动计算函数中的Map计算函数包括:输入部分、计算部分、输出部分,其中,所述输入部分用于从所述GPU的显存中读取所述GPU需要处理的数据记录,所述计算部分用于对所述输入部分读取的需要处理的数据记录进行处理,所述输出部分用于将所述计算部分处理后数据记录的计算结果存储到所述GPU的显存中。
3.根据权利要求1或2所述的方法,其特征在于,所述启动计算函数中的Map计算函数用于对所述GPU负责处理的多个数据记录并行处理,其中,所述GPU的多个核分别处理所述GPU负责处理的多个数据记录中的至少一个数据记录。
4.根据权利要求3所述的方法,其特征在于,当所述启动计算函数中的Map计算函数用于对所述GPU负责的多个数据记录并行处理时,所述输入部分的输入地址包括所述GPU的每个核的输入地址,以使所述GPU的每个核根据自己的输入地址从所述GPU的显存中读取需要处理数据记录,所述输出部分的输出地址包括所述GPU的每个核的输出地址,以使所述GPU的每个核根据自己的输出地址将处理后的数据记录的结果存储到自己的输出地址中。
5.根据权利要求4所述的方法,其特征在于,所述中心节点生成启动计算函数,包括:
所述中心节点将所述用户提供的Map计算函数中的输入地址修改为所述GPU的每个核的输入地址以生成所述输入部分的输入地址;
所述中心节点将所述用户提供的Map计算函数中的输出地址修改所述GPU的每个核的输出地址以生成所述输出部分的输出地址;
所述中心节点将所述用户提供的Map计算函数外层的所述第一循环函数替换为第三循环函数,所述第三循环函数的循环次数为所述GPU负责处理的数据记录的数目M;
所述中心节点将所述第三循环函数中的循环拆分为外层循环和内层循环,以将所述GPU负责处理的M个数据记录划分为个并行执行的数据记录块,其中,所述外层循环的次数为,所述内层循环的次数为B,所述GPU的每个核执行一个数据记录块;
所述中心节点将所述用户提供的Map计算函数的局部变量声明为所述GPU的线程局部变量,其中,所述GPU的每个核对应一个线程局部变量,所述GPU的每个核通过自己对应的线程局部变量从所述GPU的显卡中读取需要处理的数据记录。
6.根据权利要求1-5中任一项所述的方法,其特征在于,所述方法还包括:所述计算节点将所述启动计算函数的语言转换为所述GPU所能识别的语言。
7.根据权利要求1-6中任一项所述的方法,其特征在于,所述方法还包括:
所述中心节点将所述第一循环函数、所述第二循环函数、所述第二拷贝函数、所述启动计算函数发送给所述计算节点,以使所述CPU运行所述第一循环函数、所述第二循环函数和所述第二拷贝函数,并使所述GPU运行所述启动计算函数。
8.一种中心节点,其特征在于,包括:
接收模块,用于接收用户根据Hadoop程序所提供的MapReduce计算框架编写的第一循环函数,所述第一循环函数中包括用户提供的Map计算函数,所述第一循环函数用于循环调用所述用户提供的Map计算函数;
第一生成模块,用于利用运行的所述Hadoop程序将所述第一循环函数中的Map计算函数替换为第一拷贝函数以生成第二循环函数,所述第一拷贝函数用于将所述计算节点中需要所述GPU处理的多个数据记录从所述计算节点的内存拷贝到所述GPU的显存中,所述第二循环函数用于对所述第一拷贝函数进行循环执行;
第二生成模块,用于根据所述第一循环函数生成启动计算函数,所述启动计算函数中的Map计算函数用于指示所述GPU对所述GPU负责处理的数据记录进行处理;
第三生成模块,用于生成第二拷贝函数,所述第二拷贝函数用于将所述GPU对所述多个数据记录的计算结果从所述GPU的显存中拷贝至所述计算节点的内存中。
9.根据权利要求8所述的中心节点,其特征在于,所述启动计算函数中的Map计算函数包括:输入部分、计算部分、输出部分,其中,所述输入部分用于从所述GPU的显存中读取所述GPU需要处理的数据记录,所述计算部分用于对所述输入部分读取的需要处理的数据记录进行处理,所述输出部分用于将所述计算部分处理后数据记录的计算结果存储到所述GPU的显存中。
10.根据权利要求8或9所述的中心节点,其特征在于,所述启动计算函数中的Map计算函数用于对所述GPU负责处理的多个数据记录并行处理,其中,所述GPU的多个核分别处理所述GPU负责处理的多个数据记录中的至少一个数据记录。
11.根据权利要求10所述的中心节点,其特征在于,当所述启动计算函数中的Map计算函数用于对所述GPU负责的多个数据记录并行处理时,所述输入部分的输入地址包括所述GPU的每个核的输入地址,以使所述GPU的每个核根据自己的输入地址从所述GPU的显存中读取需要处理数据记录,所述输出部分的输出地址包括所述GPU的每个核的输出地址,以使所述GPU的每个核根据自己的输出地址将处理后的数据记录的结果存储到自己的输出地址中。
12.根据权利要求11所述的中心节点,其特征在于,所述第二生成模块具体用于:
将所述用户提供的Map计算函数中的输入地址修改为所述GPU的每个核的输入地址以生成所述输入部分的输入地址;
将所述用户提供的Map计算函数中的输出地址修改所述GPU的每个核的输出地址以生成所述输出部分的输出地址;
将所述用户提供的Map计算函数外层的所述第一循环函数替换为第三循环函数,所述第三循环函数的循环次数为所述GPU负责处理的数据记录的数目M;
将所述第三循环函数中的循环拆分为外层循环和内层循环,以将所述GPU负责处理的M个数据记录划分为个并行执行的数据记录块,其中,所述外层循环的次数为,所述内层循环的次数为B,所述GPU的每个核执行一个数据记录块;
将所述用户提供的Map计算函数的局部变量声明为所述GPU的线程局部变量,其中,所述GPU的每个核对应一个线程局部变量,所述GPU的每个核通过自己对应的线程局部变量从所述GPU的显卡中读取需要处理的数据记录。
13.根据权利要求8-12中任一项所述的中心节点,其特征在于,所述中心节点还包括:
转换模块,用于将所述启动计算函数的语言转换为所述GPU所能识别的语言。
14.根据权利要求8-13中任一项所述的中心节点,其特征在于,所述中心节点还包括:
发送模块,用于将所述第一循环函数、所述第二循环函数、所述第二拷贝函数、所述启动计算函数发送给所述计算节点,以使所述CPU运行所述第一循环函数、所述第二循环函数和所述第二拷贝函数,并使所述GPU运行所述启动计算函数。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410331030.0A CN105335135B (zh) | 2014-07-14 | 2014-07-14 | 数据处理方法和中心节点 |
PCT/CN2015/075703 WO2016008317A1 (zh) | 2014-07-14 | 2015-04-01 | 数据处理方法和中心节点 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410331030.0A CN105335135B (zh) | 2014-07-14 | 2014-07-14 | 数据处理方法和中心节点 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105335135A true CN105335135A (zh) | 2016-02-17 |
CN105335135B CN105335135B (zh) | 2019-01-08 |
Family
ID=55077886
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410331030.0A Active CN105335135B (zh) | 2014-07-14 | 2014-07-14 | 数据处理方法和中心节点 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN105335135B (zh) |
WO (1) | WO2016008317A1 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106506266A (zh) * | 2016-11-01 | 2017-03-15 | 中国人民解放军91655部队 | 基于GPU、Hadoop/Spark混合计算框架的网络流量分析方法 |
WO2018045753A1 (zh) * | 2016-09-12 | 2018-03-15 | 星环信息科技(上海)有限公司 | 用于分布式图计算的方法与设备 |
CN108304177A (zh) * | 2017-01-13 | 2018-07-20 | 辉达公司 | 计算图的执行 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110187970A (zh) * | 2019-05-30 | 2019-08-30 | 北京理工大学 | 一种基于Hadoop MapReduce的分布式大数据并行计算方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102169505A (zh) * | 2011-05-16 | 2011-08-31 | 苏州两江科技有限公司 | 基于云计算的推荐***构建方法 |
US20120182981A1 (en) * | 2011-01-13 | 2012-07-19 | Pantech Co., Ltd. | Terminal and method for synchronization |
CN103279328A (zh) * | 2013-04-08 | 2013-09-04 | 河海大学 | 基于Haloop的BlogRank算法并行化处理的构建方法 |
-
2014
- 2014-07-14 CN CN201410331030.0A patent/CN105335135B/zh active Active
-
2015
- 2015-04-01 WO PCT/CN2015/075703 patent/WO2016008317A1/zh active Application Filing
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120182981A1 (en) * | 2011-01-13 | 2012-07-19 | Pantech Co., Ltd. | Terminal and method for synchronization |
CN102169505A (zh) * | 2011-05-16 | 2011-08-31 | 苏州两江科技有限公司 | 基于云计算的推荐***构建方法 |
CN103279328A (zh) * | 2013-04-08 | 2013-09-04 | 河海大学 | 基于Haloop的BlogRank算法并行化处理的构建方法 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018045753A1 (zh) * | 2016-09-12 | 2018-03-15 | 星环信息科技(上海)有限公司 | 用于分布式图计算的方法与设备 |
CN106506266A (zh) * | 2016-11-01 | 2017-03-15 | 中国人民解放军91655部队 | 基于GPU、Hadoop/Spark混合计算框架的网络流量分析方法 |
CN106506266B (zh) * | 2016-11-01 | 2019-05-14 | 中国人民解放军91655部队 | 基于GPU、Hadoop/Spark混合计算框架的网络流量分析方法 |
CN108304177A (zh) * | 2017-01-13 | 2018-07-20 | 辉达公司 | 计算图的执行 |
Also Published As
Publication number | Publication date |
---|---|
CN105335135B (zh) | 2019-01-08 |
WO2016008317A1 (zh) | 2016-01-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108268278A (zh) | 具有可配置空间加速器的处理器、方法和*** | |
CN111708641B (zh) | 一种内存管理方法、装置、设备及计算机可读存储介质 | |
CN111768006A (zh) | 一种人工智能模型的训练方法、装置、设备及存储介质 | |
JP2014525640A (ja) | 並列処理開発環境の拡張 | |
CN110717584A (zh) | 神经网络编译方法、编译器、计算机设备及可读存储介质 | |
CN105335135A (zh) | 数据处理方法和中心节点 | |
CN111399911B (zh) | 一种基于多核异构计算的人工智能开发方法及装置 | |
CN115828831B (zh) | 基于深度强化学习的多芯粒芯片算子放置策略生成方法 | |
CN113313247B (zh) | 基于数据流架构的稀疏神经网络的运算方法 | |
CN105183698A (zh) | 一种基于多核dsp的控制处理***和方法 | |
CN116991560B (zh) | 针对语言模型的并行调度方法、装置、设备及存储介质 | |
CN114035916A (zh) | 计算图的编译、调度方法及相关产品 | |
CN106462585A (zh) | 用于特定列物化调度的***和方法 | |
CN116644804A (zh) | 分布式训练***、神经网络模型训练方法、设备和介质 | |
CN116011562A (zh) | 算子处理方法及算子处理装置、电子设备和可读存储介质 | |
CN113031954A (zh) | 代码编译方法、装置、电子设备、存储介质及异构*** | |
CN117032807A (zh) | 基于risc-v指令集的ai加速处理器架构 | |
CN104794095A (zh) | 分布式计算处理方法及装置 | |
CN110442753A (zh) | 一种基于opc ua的图数据库自动建立方法及装置 | |
CN103049326A (zh) | 在作业管理与调度***中管理作业程序的方法和*** | |
CN111125996B (zh) | 一种伪随机激励生成器的基于双向约束树指令集实现方法 | |
CN113190345A (zh) | 一种面向软件定义卫星的神经网络模型部署的方法以及装置 | |
Daily et al. | Using the Global Arrays Toolkit to Reimplement NumPy for Distributed Computation. | |
CN110018831A (zh) | 程序处理方法、装置及相关产品 | |
CN111400013B (zh) | 一种多核处理器的数据流的处理方法及*** |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |