CN107291666A - 一种数据处理方法及处理装置 - Google Patents
一种数据处理方法及处理装置 Download PDFInfo
- Publication number
- CN107291666A CN107291666A CN201710500673.7A CN201710500673A CN107291666A CN 107291666 A CN107291666 A CN 107291666A CN 201710500673 A CN201710500673 A CN 201710500673A CN 107291666 A CN107291666 A CN 107291666A
- Authority
- CN
- China
- Prior art keywords
- result
- calculation
- pending
- thread
- vector
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Computational Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Complex Calculations (AREA)
Abstract
本发明公开了一种数据处理方法及处理装置,将待处理矩阵M*N按行划分成M行待处理向量;开启M个线程;并行控制M个线程的第i个线程计算M行待处理向量的第i行待处理向量乘以待计算N维列向量,得到第i个计算结果;获取M个计算结果,得到待处理矩阵M*N和待计算N维列向量相乘的计算结果。从本发明提供的技术方案可见,由于将待处理矩阵M*N划分成了M行待处理向量,然后并行控制M个线程的每个线程计算其中一行待处理向量乘以待计算向量,从而实现了并行计算矩阵中每一行向量乘以待计算向量,大幅度地减少了计算矩阵乘以向量时所耗费的时间,提高了计算效率。
Description
技术领域
本发明涉及数据处理领域,尤指一种数据处理方法及处理装置。
背景技术
在图形图像处理、数字信号滤波计算、数值天气预报、网络路由选择、智能交通系统的路径选择、线性规划、傅里叶变换等众多数值问题中,最常用的基本算法就是矩阵与向量的乘法,因此一个快速高效的数据处理方法对于解决众多数值问题是非常重要的。
相关技术中,在计算待处理矩阵乘以待计算向量时,首先计算矩阵的第一行向量与待计算向量相乘并得到计算结果;再计算矩阵的第二行向量与待向量相乘并得到计算结果,直到计算矩阵的最后一行与待计算向量相乘并得到计算结果,最后将这些计算结果组合起来得到待处理矩阵乘以待计算向量的计算结果。
但是,这种方法是依次计算矩阵中一行向量乘以待计算向量的,也就说说只有当矩阵中一行向量乘以待计算向量计算完成后,才能计算下一行向量乘以待计算向量,因此整个计算过程所耗费的时间过长。
发明内容
为了解决上述技术问题,本发明提供了一种数据处理方法及处理装置,能够并行计算矩阵中每一行向量乘以待计算向量,从而大幅度地减少了计算矩阵乘以向量时所耗费的时间。
为了达到本发明目的,本发明提供了一种数据处理方法,包括:
将待处理矩阵M*N按行划分成M行待处理向量;
开启M个线程;
并行控制所述M个线程的第i个线程计算所述M行待处理向量的第i行待处理向量乘以待计算N维列向量,得到第i个计算结果;其中,i=1、2…M;
获取M个计算结果,得到所述待处理矩阵M*N和所述待计算N维列向量相乘的计算结果。
所述开启M个线程之前,还包括:
采用内存对齐的方式将所述M行待处理向量存储于预设存储空间中;其中,所述预设存储空间为所述M个线程都能够访问的存储空间;
将所述待计算N维列向量存储于所述预设存储空间中;
所述并行控制M个线程的第i个线程计算M行待处理向量的第i行待处理向量乘以待计算N维列向量,得到第i个计算结果之前,还包括:
并行控制所述M个线程的第i个线程从所述预设存储空间中获取所述M行待处理向量的第i行待处理向量和所述待计算N维列向量。
所述并行控制M个线程的第i个线程从预设存储空间中获取M行待处理向量的第i行待处理向量和待计算N维列向量,包括:
在所述M个线程的第i个线程中再开启K个子线程;其中,K≤N;
并行控制所述第i个线程中K个子线程的第j个子线程从所述预设存储空间中获取所述M行待处理向量的第i行待处理向量的Sj个元素和所述待计算N维列向量中对应的Sj个元素;其中j=1、2…K,S1+S2+…+SK=N;
所述并行控制M个线程的第i个线程计算M行待处理向量第i行待处理向量乘以待计算N维列向量,得到第i个计算结果,包括:
并行控制所述第i个线程中K个子线程的第j个子线程计算所述M行待处理向量的第i行待处理向量的Sj个元素和所述待计算N维列向量中对应的Sj个元素的乘积,得到所述第i个计算结果中第j个子计算结果;
获取所述第i个计算结果中K个子计算结果,得到所述第i个计算结果。
所述并行控制第i个线程中K个子线程的第j个子线程计算M行待处理向量的第i行待处理向量的Sj个元素和待计算N维列向量中对应的Sj个元素的乘积,得到第i个计算结果中第j个子计算结果之后,还包括:
将得到的所述第i个计算结果中K个子计算结果存储于寄存器中;
所述获取第i个计算结果中K个子计算结果,得到所述第i个计算结果,包括:
从所述寄存器中获取所述第i个计算结果中K个子计算结果,得到所述第i个计算结果。
所述从寄存器中获取第i个计算结果中K个子计算结果,得到所述第i个计算结果,包括:
从所述寄存器中获取所述第i个计算结果中K个子计算结果;
将所述第i个计算结果中K个子计算结果相加得到所述第i个计算结果。
本发明还提供了一种数据处理装置,包括:
划分模块,用于将待处理矩阵M*N按行划分成M行待处理向量;
预处理模块,用于开启M个线程;
第一控制模块,用于并行控制所述M个线程的第i个线程计算所述M行待处理向量的第i行待处理向量乘以待计算N维列向量,得到第i个计算结果;其中,i=1、2…M;
处理模块,用于获取M个计算结果,得到所述待处理矩阵M*N和所述待计算N维列向量相乘的计算结果。
还包括:
第一存储模块,用于采用内存对齐的方式将所述M行待处理向量存储于预设存储空间中;其中,所述预设存储空间为所述M个线程都能够访问的存储空间;
第二存储模块,用于将所述待计算N维列向量存储于所述预设存储空间中:
第二控制模块,用于并行控制所述M个线程的第i个线程从所述预设存储空间中获取所述M行待处理向量的第i行待处理向量和所述待计算N维列向量。
所述第二控制模块包括:
预处理单元,用于在所述M个线程的第i个线程中再开启K个子线程;其中,K≤N;
第一控制单元,用于并行控制所述第i个线程中K个子线程的第j个子线程从所述预设存储空间中获取所述M行待处理向量的第i行待处理向量的Sj个元素和所述待计算N维列向量中对应的Sj个元素;其中j=1、2…K,S1+S2+…+SK=N;
所述第一控制模块包括:
第二控制单元,用于并行控制所述第i个线程中K个子线程的第j个子线程计算所述M行待处理向量的第i行待处理向量的Sj个元素和所述待计算N维列向量中对应的Sj个元素的乘积,得到所述第i个计算结果中第j个子计算结果;
处理单元,用于获取所述第i个计算结果中K个子计算结果,得到所述第i个计算结果。
所述第一控制模块还包括:
存储单元,用于将得到的所述第i个计算结果中K个子计算结果存储于寄存器中;
所述处理单元,具体用于从所述寄存器中获取所述第i个计算结果中K个子计算结果,得到所述第i个计算结果。
还用于:
从所述寄存器中获取所述第i个计算结果中K个子计算结果;
将所述第i个计算结果中K个子计算结果相加得到所述第i个计算结果。
与现有技术相比,本发明提供的数据处理方法,至少包括将待处理矩阵M*N按行划分成M行待处理向量;开启M个线程;并行控制M个线程的第i个线程计算M行待处理向量的第i行待处理向量乘以待计算N维列向量,得到第i个计算结果;获取M个计算结果,得到待处理矩阵M*N和待计算N维列向量相乘的计算结果。从本发明提供的技术方案可见,由于并不是依次计算待处理矩阵M*N中每一行向量与待计算N维列向量的乘积,而是将待处理矩阵M*N划分成了M行待处理向量,然后并行控制M个线程的每个线程都计算其中一行待处理向量乘以待计算向量,从而实现了并行计算矩阵中每一行向量乘以待计算向量,大幅度地减少了计算矩阵乘以向量时所耗费的时间,提高了计算效率。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
附图说明
附图用来提供对本发明技术方案的进一步理解,并且构成说明书的一部分,与本申请的实施例一起用于解释本发明的技术方案,并不构成对本发明技术方案的限制。
图1为本发明实施例提供的一种数据处理方法的流程示意图;
图2为本发明实施例提供的另一种数据处理方法的流程示意图;
图3为本发明实施例提供的又一种数据处理方法的流程示意图;
图4为本发明实施例提供的M*N矩阵乘以N列向量的计算示意图;
图5为本发明实施例提供的M*N矩阵乘以N列向量的算法示意图;
图6为本发明实施例提供的又一种数据处理方法的流程示意图;
图7为本发明实施例提供的一种数据处理装置的结构示意图;
图8为本发明实施例提供的另一种数据处理装置的结构示意图;
图9为本发明实施例提供的又一种数据处理装置的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
本发明实施例提供一种数据处理方法,如图1所示,该方法包括:
步骤101、将待处理矩阵M*N按行划分成M行待处理向量。
具体的,M行待处理向量中每一行待处理向量都包含N个元素,因此每一行待处理向量都是一个N维行向量。
步骤102、开启M个线程。
步骤103、并行控制M个线程的第i个线程计算M行待处理向量的第i行待处理向量乘以待计算N维列向量,得到第i个计算结果。
其中,i=1、2…M。
需要说明的是,M个线程之间并不存在顺序之分,第i个线程的表述方式只是为了区分M个线程中的一个线程与M个线程中的其他线程。
具体的,并行控制M个线程的第i个线程计算M行待处理向量的第i行待处理向量乘以待计算N维列向量,得到第i个计算结果指的是:并行控制M个线程的第1个线程计算M行待处理向量的第1行待处理向量乘以待计算N维列向量并得到第1个计算结果、M个线程的第2个线程计算M行待处理向量的第2行待处理向量乘以待计算N维列向量并得到第2个计算结果…M个线程的第M个线程计算M行待处理向量的第M行待处理向量乘以待计算N维列向量并得到第M个计算结果。
步骤104、获取M个计算结果,得到待处理矩阵M*N和待计算N维列向量相乘的计算结果。
具体的,由于第1个计算结果、第2个计算结果…第M个计算结果是待处理矩阵M*N的每一行待处理向量与待计算N维列向量相乘的计算结果,因此获取了第1个计算结果、第2个计算结果…第M个计算结果,第1个计算结果、第2个计算结果…第M个计算结果所组成的M维列向量就是待处理矩阵M*N和待计算N维列向量相乘的计算结果。
具体的,本实施例提供的方法可以在统一计算设备架构(Compute UnifiedDevice Architecture,CUDA)中实现。CUDA是一种通用的、开放的并行计算架构,该架构可以同时运行成千上万个线程,通过该架构,图形处理器(Graphics Processing Unit,GPU)可以被用来解决大规模并行计算问题,与中央处理器(Central Processing Unit,CPU)相比,GPU上拥有更多的晶体管用来进行数据处理,而不是进行数据缓存和流程控制,所以GPU在CUDA中承担着具体的高密度并行计算任务。CUDA提供编译器和一些开发工具,让开发人员可以用一种类似C语言的编程语言来开发能够同时运行在CPU上和GPU上的通用计算图形处理器(General Purpose Graphics Processing Unit,GPGPU)程序,并且CUDA还提供一个完整的接口,使得程序员可以通过该接口访问本地GPU的命令集、内存、并行计算的元素。CUDA中将CPU及系统的内存(内存条)称为主机,将GPU及GPU本身的显示内存称为设备,因此针对CUDA解决的大规模并行计算问题的应用程序,也可分为主机端程序和设备端程序两个部分(设备端程序也称为“kernel”)。
本发明实施例所提供的数据处理方法,将待处理矩阵M*N按行划分成M行待处理向量;开启M个线程;并行控制M个线程的第i个线程计算M行待处理向量的第i行待处理向量乘以待计算N维列向量,得到第i个计算结果;获取M个计算结果,得到待处理矩阵M*N和待计算N维列向量相乘的计算结果。从本发明提供的技术方案可见,由于并不是依次计算待处理矩阵M*N中每一行向量与待计算N维列向量的乘积,而是将待处理矩阵M*N划分成了M行待处理向量,并行控制M个线程中每个线程计算其中一行待处理向量乘以待计算向量,从而实现了并行计算矩阵中每一行向量乘以待计算向量,大幅度地减少了计算矩阵乘以向量时所耗费的时间,提高了计算效率。
本发明实施例提供另一种数据处理方法,如图2所示,该方法包括:
步骤201、将待处理矩阵M*N按行划分成M行待处理向量。
步骤202、采用内存对齐的方式将M行待处理向量存储于预设存储空间中。
其中,预设存储空间为M个线程都能够访问的存储空间。
具体的,M行待处理向量首先以内存对齐的方式存储在CPU中,然后CPU会对需要计算的矩阵和向量进行赋值等初始化操作并为这些需要计算的矩阵和向量在GPU中分配存储空间,待存储空间分配完成后,CPU将M行待处理向量复制到GPU中,GPU仍然以内存对齐的方式进行存储。其中,进行内存对齐的方式可以是采用CUDA中提供的函数cudaMallocPitch来进行,函数cudaMallocPitch可以通过增加一些数据来填充所分配的存储器,以确保在地址从一行更新到另一行时,给定行的对应指针依然满足对齐要求,从而能够保证分配的内存是合理对齐的,满足物理上的内存访问,因此可以确保对行访问时具有最优的效率。并且由于M行待处理向量是CPU复制到GPU中的,而CPU向GPU传输数据时,是将数据传输到GPU的全局内存中的,因此M行待处理向量是先被存放在GPU全局内存中的,而如果数据存放在CPU的全局内存中,当需要对这部分数据进行访问时,所花费的时间就会较长,因此需要将M行待处理向量存储于预设存储空间中,预设存储空间相当于一个共享存储空间,M行待处理向量存储于这样一个空间中无疑会使得访问时间缩短。
步骤203、将待计算N维列向量存储于预设存储空间中。
具体的,由于待计算向量是后续步骤中M个线程都需要获取的,因此,将待计算向量存储于预设存储空间中,M个线程都能通过访问一个特定的地址(即待计算向量存储于预设存储空间中的地址)获取待计算向量。因此使用预设存储空间存储待计算向量免掉了在待计算向量比较大时多次数据拷贝和启动内核的开销,而且在实际编程中也无需使用全局变量,因此代码的可扩展性更好。
步骤204、开启M个线程。
其中,i=1、2…P。
步骤205、并行控制M个线程的第i个线程从预设存储空间中获取M行待处理向量的第i行待处理向量和待计算N维列向量。
步骤206、并行控制M个线程的第i个线程计算M行待处理向量的第i行待处理向量乘以待计算N维列向量,得到第i个计算结果。
其中,i=1、2…M。
步骤207、获取M个计算结果,得到待处理矩阵M*N和待计算N维列向量相乘的计算结果。
本发明实施例所提供的数据处理方法,将待处理矩阵M*N按行划分成M行待处理向量;开启M个线程;并行控制M个线程的第i个线程计算M行待处理向量的第i行待处理向量乘以待计算N维列向量,得到第i个计算结果;获取M个计算结果,得到待处理矩阵M*N和待计算N维列向量相乘的计算结果。从本发明提供的技术方案可见,由于并不是依次计算待处理矩阵M*N中每一行向量与待计算N维列向量的乘积,而是将待处理矩阵M*N划分成了M行待处理向量,并行控制M个线程中每个线程计算其中一行待处理向量乘以待计算向量,从而实现了并行计算矩阵中每一行向量乘以待计算向量,大幅度地减少了计算矩阵乘以向量时所耗费的时间,提高了计算效率。
本发明实施例提供又一种数据处理方法,如图3所示,该方法包括:
步骤301、将待处理矩阵M*N按行划分成M行待处理向量。
步骤302、采用内存对齐的方式将M行待处理向量存储于预设存储空间中。
其中,预设存储空间为M个线程都能够访问的存储空间。
步骤303、将待计算N维列向量存储于预设存储空间中。
步骤304、开启M个线程。
步骤305、在M个线程的第i个线程中再开启K个子线程。
其中,i=1、2…M;K≤N。
需要说明的是,由于M行待处理向量中每一行待处理向量的元素个数为N个,因此,就算一个子线程只计算一行待处理向量中一个元素乘以待计算向量中一个元素,也只需要N个子线程,因此,在M个线程的第i个线程中再开启的子线程个数不会超过N个。
具体的,在M个线程的第i个线程中再开启K个子线程指的是在M个线程的第1个线程中再开启K个子线程、在M个线程的第2个线程中再开启K个子线程…在M个线程的第M个线程中再开启K个子线程。
具体的,在CUDA中,相互协作来完成一个共同的任务的许多线程被称作一个Block块,Block块中的线程执行时,满足执行顺序的无关性,即无论其中包含的多个线程,以及是以顺序或乱序或逆序的方式执行,均不影响最终执行结果,从而满足线程并行执行的目的。在本实施例中,在M个线程的第i个线程中再开启的K个子线程所组成的就是一个Block块,共有M个Blcok块,每个Block块计算一行待处理向量乘以待计算向量,M*N矩阵乘以N列向量的计算示意图如图4所示。
具体的,矩阵乘以向量的算法包括在进行数据处理时,CPU首先对需要计算的矩阵和向量进行赋值等初始化操作,并为这些需要计算的矩阵和向量在GPU中分配存储空间,然后将需要GPU所执行计算任务需要用到的数据拷贝到GPU中,由GPU中的Block块具体进行计算,然后进行规约操作(即将一个Block中多个线程共同计算的一行向量乘以向量得到的结果相加),待GPU执行结束后,再将计算结果通过外部部件快速互联(Peripheral ComponentInterconnect express,PCIe)传输给CPU,由CPU执行完相应的逻辑处理后结束,M*N矩阵乘以N列向量的算法示意图如图5所示。
步骤306、并行控制第i个线程中K个子线程的第j个子线程从预设存储空间中获取M行待处理向量的第i行待处理向量的Sj个元素和待计算N维列向量中对应的Sj个元素。
其中j=1、2…K,S1+S2+…+SK=N。
具体的,并行控制第i个线程中K个子线程的第j个子线程从预设存储空间中获取M行待处理向量的第i行待处理向量的Sj个元素和待计算N维列向量中对应的Sj个元素指的是:并行控制第i个线程中K个子线程的第1个子线程从预设存储空间中获取M行待处理向量的第i行待处理向量的S1个元素和待计算N维列向量中对应的S1个元素、第i个线程中K个子线程的第2个子线程从预设存储空间中获取M行待处理向量的第i行待处理向量的S2个元素和待计算N维列向量中对应的S2个元素…第i个线程中K个子线程的第K个子线程从预设存储空间中获取M行待处理向量的第i行待处理向量的SK个元素和待计算N维列向量中对应的SK个元素。
具体的,第j个子线程从预设存储空间中获取的第i行待处理向量的Sj个元素与其他K-1个子线程从预设存储空间中获取的第i行待处理向量的元素不相同,并且第j个子线程从预设存储空间中获取的待计算N维列向量中对应的Sj个元素也与其他K-1个子线程从从预设存储空间中获取的待计算N维列向量中元素不同。举例来说,假设i=2,K=3,N=8,S1=3,S2=3,S3=2,那么第1个子线程从预设存储空间中获取第2行待处理向量的前3个元素和待计算N维列向量中的前3个元素,第2个子线程从预设存储空间中获取第2行待处理向量的中间3个元素(也就是第1个子线程取走3个元素所剩下的5个元素的前3个元素)和待计算N维列向量中的中间3个元素,第3个子线程从预设存储空间中获取第2行待处理向量的最后3个元素和待计算N维列向量中的最后3个元素。
步骤307、并行控制第i个线程中K个子线程的第j个子线程计算M行待处理向量的第i行待处理向量的Sj个元素和待计算N维列向量中对应的Sj个元素的乘积,得到第i个计算结果中第j个子计算结果。
具体的,并行控制第i个线程中K个子线程的第j个子线程计算M行待处理向量的第i行待处理向量的Sj个元素和待计算N维列向量中对应的Sj个元素的乘积,得到第i个计算结果中第j个子计算结果指的是:并行控制第i个线程中K个子线程的第1个子线程计算M行待处理向量的第i行待处理向量的S1个元素和待计算N维列向量中对应的S1个元素的乘积并得到第i个计算结果中第1个子计算结果、第i个线程中K个子线程的第2个子线程计算M行待处理向量的第i行待处理向量的S2个元素和待计算N维列向量中对应的S2个元素的乘积并得到第i个计算结果中第2个子计算结果…第i个线程中K个子线程的第K个子线程计算M行待处理向量的第i行待处理向量的SK个元素和待计算N维列向量中对应的SK个元素的乘积并得到第i个计算结果中第K个子计算结果。
具体的,在进行向量计算时首先要加载向量,因此可以通过GPU提供的向量化加载方式来提高带宽的利用率,具体可以通过向量化加载的指令代替非向量化加载的指令,使用内置的float2,float4将32位数据转化为64位或128位的数据进行加载计算,使用向量化加载会减少总的操作次数,减少延迟,提高带宽利用率。
步骤308、获取第i个计算结果中K个子计算结果,得到第i个计算结果。
步骤309、获取第M个计算结果,得到待处理矩阵M*N和待计算N维列向量相乘的计算结果。
本发明实施例所提供的数据处理方法,将待处理矩阵M*N按行划分成M行待处理向量;开启M个线程;并行控制M个线程的第i个线程计算M行待处理向量的第i行待处理向量乘以待计算N维列向量,得到第i个计算结果;获取M个计算结果,得到待处理矩阵M*N和待计算N维列向量相乘的计算结果。从本发明提供的技术方案可见,由于并不是依次计算待处理矩阵M*N中每一行向量与待计算N维列向量的乘积,而是将待处理矩阵M*N划分成了M行待处理向量,并行控制M个线程中每个线程计算其中一行待处理向量乘以待计算向量,从而实现了并行计算矩阵中每一行向量乘以待计算向量,大幅度地减少了计算矩阵乘以向量时所耗费的时间,提高了计算效率。
本发明实施例提供又一种数据处理方法,如图6所示,该方法包括:
步骤401、将待处理矩阵M*N按行划分成M行待处理向量。
步骤402、采用内存对齐的方式将M行待处理向量存储于预设存储空间中。
其中,预设存储空间为M个线程都能够访问的存储空间。
步骤403、将待计算N维列向量存储于预设存储空间中。
步骤404、开启M个线程。
步骤405、在M个线程的第i个线程中再开启K个子线程。
其中,i=1、2…M;K≤N。
步骤406、并行控制K个子线程的第j个子线程从预设存储空间中获取M行待处理向量的第i行待处理向量的Sj个元素和待计算N维列向量中对应的Sj个元素。
其中j=1、2…K,S1+S2+…+SK=N。
步骤407、并行控制第i个线程中K个子线程的第j个子线程计算M行待处理向量的第i行待处理向量的Sj个元素和待计算N维列向量中对应的Sj个元素的乘积,得到第i个计算结果中第j个子计算结果。
需要说明的是,如果Sj=1,那么第j个子线程只需计算第i行待处理向量的1个元素和待计算N维列向量中对应的1个元素的乘积,就能够得到第i个计算结果中第j个子计算结果;但是如果Sj>1,那么第j个子线程需计算Sj次第i行待处理向量的1个元素和待计算N维列向量中对应的1个元素的乘积,然后将Sj个计算结果相加得到第i个计算结果中第j个子计算结果。
步骤408、将得到的第i个计算结果中K个子计算结果存储于寄存器中。
具体的,由于M行待处理向量和待计算向量是存储在预设存储空间中的,因此计算得到的第i个计算结果中第1个子计算结果,第i个计算结果中第2个子计算结果…第i个计算结果中第K个子计算结果也会存储在预设存储空间中,进行同步操作后,再从预设存储空间获取,而将这些子计算结果存储于寄存器中,使用GPU提供的shuffle指令,能够让一个warp内的线程直接去读另一个warp内线程的寄存器,这使得一个warp内的线程能够快速交流或广播数据,以此不需要经过预设存储空间就可快速进行数据交换,提高访存效率。
步骤409、从寄存器中获取第i个计算结果中K个子计算结果,得到第i个计算结果。
具体的,步骤409可以由步骤409a和409b实现:
步骤409a、从寄存器中获取第i个计算结果中K个子计算结果。
具体的,从寄存器中获取第i个计算结果中K个子计算结果指的是从寄存器中获取第i个计算结果中第1个子计算结果、从寄存器中获取第i个计算结果中第2个子计算结果…从寄存器中获取第i个计算结果中第K个子计算结果。
步骤409b、将第i个计算结果中K个子计算结果相加得到第i个计算结果。
步骤410、获取M个计算结果,得到待处理矩阵M*N和待计算N维列向量相乘的计算结果。
本发明实施例所提供的数据处理方法,将待处理矩阵M*N按行划分成M行待处理向量;开启M个线程;并行控制M个线程的第i个线程计算M行待处理向量的第i行待处理向量乘以待计算N维列向量,得到第i个计算结果;获取M个计算结果,得到待处理矩阵M*N和待计算N维列向量相乘的计算结果。从本发明提供的技术方案可见,由于并不是依次计算待处理矩阵M*N中每一行向量与待计算N维列向量的乘积,而是将待处理矩阵M*N划分成了M行待处理向量,并行控制M个线程的每个线程计算其中一行待处理向量乘以待计算向量,从而实现了并行计算矩阵中每一行向量乘以待计算向量,大幅度地减少了计算矩阵乘以向量时所耗费的时间,提高了计算效率。
本发明实施例提供一种数据处理装置,如图7所示,该处理装置5包括:
划分模块51,用于将待处理矩阵M*N按行划分成M行待处理向量。
预处理模块52,用于开启M个线程。
第一控制模块53,用于并行控制M个线程的第i个线程计算M行待处理向量的第i行待处理向量乘以待计算N维列向量,得到第i个计算结果;其中,i=1、2…M。
处理模块54,用于获取M个计算结果,得到待处理矩阵M*N和待计算N维列向量相乘的计算结果。
进一步,在图7对应实施例的基础上,本发明实施例提供另一种数据处理装置,如图8所示,该处理装置5还包括:
第一存储模块55,用于采用内存对齐的方式将M行待处理向量存储于预设存储空间中。
其中,预设存储空间为M个线程都能够访问的存储空间。
第二存储模块56,用于将待计算N维列向量存储于预设存储空间中。
第二控制模块57,用于并行控制M个线程的第i个线程从预设存储空间中获取M行待处理向量的第i行待处理向量和待计算N维列向量。
进一步,在图8对应实施例的基础上,本发明实施例提供又一种数据处理装置,如图9所示,第二控制模块57包括:
预处理单元571,用于在M个线程的第i个线程中再开启K个子线程。
其中,K≤N。
第一控制单元572,用于并行控制所述第i个线程中K个子线程的第j个子线程从预设存储空间中获取M行待处理向量的第i行待处理向量的Sj个元素和待计算N维列向量中对应的Sj个元素。
其中j=1、2…K,S1+S2+…+SK=N。
第一控制模块53包括:
第二控制单元531,用于并行控制第i个线程中K个子线程的第j个子线程计算M行待处理向量的第i行待处理向量的Sj个元素和待计算N维列向量中对应的Sj个元素的乘积,得到第i个计算结果中第j个子计算结果。
处理单元532,用于获取第i个计算结果中K个子计算结果,得到第i个计算结果。
存储单元533,用于将得到的第i个计算结果中K个子计算结果存储于寄存器中。
进一步,处理单元532,具体用于从寄存器中获取第i个计算结果中K个子计算结果,得到第i个计算结果。
进一步,处理单元532,具体还用于:
从寄存器中获取第i个计算结果中K个子计算结果。
将第i个计算结果中K个子计算结果相加得到第i个计算结果。
本发明实施例所提供的数据处理装置,将待处理矩阵M*N按行划分成M行待处理向量;开启M个线程;并行控制M个线程的第i个线程计算M行待处理向量的第i行待处理向量乘以待计算N维列向量,得到第i个计算结果;获取M个计算结果,得到待处理矩阵M*N和待计算N维列向量相乘的计算结果。从本发明提供的技术方案可见,由于并不是依次计算待处理矩阵M*N中每一行向量与待计算N维列向量的乘积,而是将待处理矩阵M*N划分成了M行待处理向量,然后并行控制M个线程的每个线程都计算其中一行待处理向量乘以待计算向量,从而实现了并行计算矩阵中每一行向量乘以待计算向量,大幅度地减少了计算矩阵乘以向量时所耗费的时间,提高了计算效率。
在实际应用中,划分模块51、预处理模块52、第一控制模块53、第二控制单元531、处理单元532、存储单元533、处理模块54、第一存储模块55、第二存储模块56、第二控制模块57、预处理单元571、第一控制单元572均可由位于数据处理装置中的CPU、微处理器(MicroProcessor Unit,MPU)、数字信号处理器(Digital Signal Processor,DSP)或现场可编程门阵列(Field Programmable Gate Array,FPGA)等实现。
本发明实施例还提供一种数据处理装置,该装置包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现的步骤包括:
将待处理矩阵M*N按行划分成M行待处理向量。
开启M个线程。
并行控制M个线程的第i个线程计算M行待处理向量的第i行待处理向量乘以待计算N维列向量,得到第i个计算结果;其中,i=1、2…M。
获取M个计算结果,得到待处理矩阵M*N和待计算N维列向量相乘的计算结果。
进一步,上述处理器执行计算机程序时实现的步骤还包括:
采用内存对齐的方式将M行待处理向量存储于预设存储空间中;其中,预设存储空间为M个线程都能够访问的存储空间。
将待计算N维列向量存储于预设存储空间中。
并行控制M个线程的第i个线程中从预设存储空间中获取M行待处理向量的第i行待处理向量和待计算N维列向量。
进一步,上述处理器执行计算机程序时实现的步骤具体包括:
M个线程的第i个线程中再开启K个子线程;其中,K≤N。
并行控制第i个线程中K个子线程的第j个子线程从预设存储空间中获取M行待处理向量的第i行待处理向量的Sj个元素和待计算N维列向量中对应的Sj个元素;其中j=1、2…K,S1+S2+…+SK=N。
并行控制第i个线程中K个子线程的第j个子线程计算M行待处理向量的第i行待处理向量的Sj个元素和待计算N维列向量中对应的Sj个元素的乘积,得到第i个计算结果中第j个子计算结果。
获取第i个计算结果中K个子计算结果,得到第i个计算结果。
进一步,上述处理器执行计算机程序时实现的步骤还包括:
将得到的第i个计算结果中K个子计算结果存储于寄存器中。
上述处理器执行计算机程序时实现的步骤具体还包括:
从寄存器中获取第i个计算结果中K个子计算结果,得到第i个计算结果。
进一步,上述处理器执行计算机程序时实现的步骤具体还包括:
从寄存器中获取第i个计算结果中K个子计算结果。
将第i个计算结果中K个子计算结果相加得到第i个计算结果。
虽然本发明所揭露的实施方式如上,但所述的内容仅为便于理解本发明而采用的实施方式,并非用以限定本发明。任何本发明所属领域内的技术人员,在不脱离本发明所揭露的精神和范围的前提下,可以在实施的形式及细节上进行任何的修改与变化,但本发明的专利保护范围,仍须以所附的权利要求书所界定的范围为准。
Claims (10)
1.一种数据处理方法,其特征在于,包括:
将待处理矩阵M*N按行划分成M行待处理向量;
开启M个线程;
并行控制所述M个线程的第i个线程计算所述M行待处理向量的第i行待处理向量乘以待计算N维列向量,得到第i个计算结果;其中,i=1、2…M;
获取M个计算结果,得到所述待处理矩阵M*N和所述待计算N维列向量相乘的计算结果。
2.根据权利要求1所述的处理方法,其特征在于,所述开启M个线程之前,还包括:
采用内存对齐的方式将所述M行待处理向量存储于预设存储空间中;其中,所述预设存储空间为所述M个线程都能够访问的存储空间;
将所述待计算N维列向量存储于所述预设存储空间中;
所述并行控制M个线程的第i个线程计算M行待处理向量的第i行待处理向量乘以待计算N维列向量,得到第i个计算结果之前,还包括:
并行控制所述M个线程的第i个线程从所述预设存储空间中获取所述M行待处理向量的第i行待处理向量和所述待计算N维列向量。
3.根据权利要求2所述的处理方法,其特征在于,所述并行控制M个线程的第i个线程从预设存储空间中获取M行待处理向量的第i行待处理向量和待计算N维列向量,包括:
在所述M个线程的第i个线程中再开启K个子线程;其中,K≤N;
并行控制所述第i个线程中K个子线程的第j个子线程从所述预设存储空间中获取所述M行待处理向量的第i行待处理向量的Sj个元素和所述待计算N维列向量中对应的Sj个元素;其中j=1、2…K,S1+S2+…+SK=N;
所述并行控制M个线程的第i个线程计算M行待处理向量第i行待处理向量乘以待计算N维列向量,得到第i个计算结果,包括:
并行控制所述第i个线程中K个子线程的第j个子线程计算所述M行待处理向量的第i行待处理向量的Sj个元素和所述待计算N维列向量中对应的Sj个元素的乘积,得到所述第i个计算结果中第j个子计算结果;
获取所述第i个计算结果中K个子计算结果,得到所述第i个计算结果。
4.根据权利要求3所述的处理方法,其特征在于,所述并行控制第i个线程中K个子线程的第j个子线程计算M行待处理向量的第i行待处理向量的Sj个元素和待计算N维列向量中对应的Sj个元素的乘积,得到第i个计算结果中第j个子计算结果之后,还包括:
将得到的所述第i个计算结果中K个子计算结果存储于寄存器中;
所述获取第i个计算结果中K个子计算结果,得到所述第i个计算结果,包括:
从所述寄存器中获取所述第i个计算结果中K个子计算结果,得到所述第i个计算结果。
5.根据权利要求4所述的处理方法,其特征在于,所述从寄存器中获取第i个计算结果中K个子计算结果,得到所述第i个计算结果,包括:
从所述寄存器中获取所述第i个计算结果中K个子计算结果;
将所述第i个计算结果中K个子计算结果相加得到所述第i个计算结果。
6.一种数据处理装置,其特征在于,包括:
划分模块,用于将待处理矩阵M*N按行划分成M行待处理向量;
预处理模块,用于开启M个线程;
第一控制模块,用于并行控制所述M个线程的第i个线程计算所述M行待处理向量的第i行待处理向量乘以待计算N维列向量,得到第i个计算结果;其中,i=1、2…M;
处理模块,用于获取M个计算结果,得到所述待处理矩阵M*N和所述待计算N维列向量相乘的计算结果。
7.根据权利要求6所述的处理装置,其特征在于,还包括:
第一存储模块,用于采用内存对齐的方式将所述M行待处理向量存储于预设存储空间中;其中,所述预设存储空间为所述M个线程都能够访问的存储空间;
第二存储模块,用于将所述待计算N维列向量存储于所述预设存储空间中:
第二控制模块,用于并行控制所述M个线程的第i个线程从所述预设存储空间中获取所述M行待处理向量的第i行待处理向量和所述待计算N维列向量。
8.根据权利要求7所述的处理装置,其特征在于,所述第二控制模块包括:
预处理单元,用于在所述M个线程的第i个线程中再开启K个子线程;其中,K≤N;
第一控制单元,用于并行控制所述第i个线程中K个子线程的第j个子线程从所述预设存储空间中获取所述M行待处理向量的第i行待处理向量的Sj个元素和所述待计算N维列向量中对应的Sj个元素;其中j=1、2…K,S1+S2+…+SK=N;
所述第一控制模块包括:
第二控制单元,用于并行控制所述第i个线程中K个子线程的第j个子线程计算所述M行待处理向量的第i行待处理向量的Sj个元素和所述待计算N维列向量中对应的Sj个元素的乘积,得到所述第i个计算结果中第j个子计算结果;
处理单元,用于获取所述第i个计算结果中K个子计算结果,得到所述第i个计算结果。
9.根据权利要求8所述的处理装置,其特征在于,所述第一控制模块还包括:
存储单元,用于将得到的所述第i个计算结果中K个子计算结果存储于寄存器中;
所述处理单元,具体用于从所述寄存器中获取所述第i个计算结果中K个子计算结果,得到所述第i个计算结果。
10.根据权利要求9所述的处理装置,其特征在于,所述处理单元具体还用于:
从所述寄存器中获取所述第i个计算结果中K个子计算结果;
将所述第i个计算结果中K个子计算结果相加得到所述第i个计算结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710500673.7A CN107291666A (zh) | 2017-06-27 | 2017-06-27 | 一种数据处理方法及处理装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710500673.7A CN107291666A (zh) | 2017-06-27 | 2017-06-27 | 一种数据处理方法及处理装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107291666A true CN107291666A (zh) | 2017-10-24 |
Family
ID=60098002
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710500673.7A Pending CN107291666A (zh) | 2017-06-27 | 2017-06-27 | 一种数据处理方法及处理装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107291666A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109490611A (zh) * | 2018-10-29 | 2019-03-19 | 宁波三星智能电气有限公司 | 一种嵌入式设备的时间统计方法 |
CN109726823A (zh) * | 2018-12-19 | 2019-05-07 | 中国地质大学(武汉) | 一种基于并行架构的迭代分割核学习方法 |
CN110790143A (zh) * | 2019-10-30 | 2020-02-14 | 河北工业大学 | 一种自动码头起重机的调度方法 |
WO2020061762A1 (zh) * | 2018-09-25 | 2020-04-02 | 深圳市大疆创新科技有限公司 | 数据处理装置和方法 |
CN114090956A (zh) * | 2021-11-18 | 2022-02-25 | 深圳市比昂芯科技有限公司 | 一种矩阵数据处理方法、装置、设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103106183A (zh) * | 2013-01-29 | 2013-05-15 | 福建天晴数码有限公司 | 基于mapreduce的大规模稀疏矩阵乘法运算的方法 |
US20140046995A1 (en) * | 2011-12-06 | 2014-02-13 | The Mathworks, Inc. | Parallel implementation of maximum a posteriori probability decoder |
CN103631761A (zh) * | 2012-08-29 | 2014-03-12 | 睿励科学仪器(上海)有限公司 | 并行处理架构进行矩阵运算并用于严格波耦合分析的方法 |
CN104461467A (zh) * | 2013-09-25 | 2015-03-25 | 广州中国科学院软件应用技术研究所 | 针对SMP集群系统采用MPI和OpenMP混合并行提高计算速度的方法 |
-
2017
- 2017-06-27 CN CN201710500673.7A patent/CN107291666A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140046995A1 (en) * | 2011-12-06 | 2014-02-13 | The Mathworks, Inc. | Parallel implementation of maximum a posteriori probability decoder |
CN103631761A (zh) * | 2012-08-29 | 2014-03-12 | 睿励科学仪器(上海)有限公司 | 并行处理架构进行矩阵运算并用于严格波耦合分析的方法 |
CN103106183A (zh) * | 2013-01-29 | 2013-05-15 | 福建天晴数码有限公司 | 基于mapreduce的大规模稀疏矩阵乘法运算的方法 |
CN104461467A (zh) * | 2013-09-25 | 2015-03-25 | 广州中国科学院软件应用技术研究所 | 针对SMP集群系统采用MPI和OpenMP混合并行提高计算速度的方法 |
Non-Patent Citations (3)
Title |
---|
WANGSJZ045: "矩阵与向量乘法的CUDA优化", 《HTTP://WWW.DOC88.COM/P-8466091728091.HTML》 * |
刘青昆 等: "基于MPI+CUDA异步模型的并行矩阵乘法", 《计算机应用》 * |
周灿: "基于MPI的矩阵运算并行算法研究", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020061762A1 (zh) * | 2018-09-25 | 2020-04-02 | 深圳市大疆创新科技有限公司 | 数据处理装置和方法 |
CN109490611A (zh) * | 2018-10-29 | 2019-03-19 | 宁波三星智能电气有限公司 | 一种嵌入式设备的时间统计方法 |
CN109490611B (zh) * | 2018-10-29 | 2021-03-05 | 宁波三星智能电气有限公司 | 一种嵌入式设备的时间统计方法 |
CN109726823A (zh) * | 2018-12-19 | 2019-05-07 | 中国地质大学(武汉) | 一种基于并行架构的迭代分割核学习方法 |
CN110790143A (zh) * | 2019-10-30 | 2020-02-14 | 河北工业大学 | 一种自动码头起重机的调度方法 |
CN114090956A (zh) * | 2021-11-18 | 2022-02-25 | 深圳市比昂芯科技有限公司 | 一种矩阵数据处理方法、装置、设备及存储介质 |
CN114090956B (zh) * | 2021-11-18 | 2024-05-10 | 深圳市比昂芯科技有限公司 | 一种矩阵数据处理方法、装置、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107291666A (zh) | 一种数据处理方法及处理装置 | |
Mittal et al. | A survey of techniques for optimizing deep learning on GPUs | |
JP6977239B2 (ja) | 行列乗算器 | |
CN104915322B (zh) | 一种卷积神经网络硬件加速方法 | |
Agullo et al. | LU factorization for accelerator-based systems | |
CN103617150B (zh) | 一种基于gpu的大规模电力系统潮流并行计算的系统及其方法 | |
CN103955446B (zh) | 基于dsp芯片的可变长度fft计算方法 | |
CN107451097B (zh) | 国产申威26010众核处理器上多维fft的高性能实现方法 | |
CN110415157A (zh) | 一种矩阵乘法的计算方法及装置 | |
CN110135569A (zh) | 一种异构平台神经元定位三级流水并行方法、系统及介质 | |
CN108170640A (zh) | 神经网络运算装置及应用其进行运算的方法 | |
US20230305967A1 (en) | Banked memory architecture for multiple parallel datapath channels in an accelerator | |
US20230289292A1 (en) | Method and apparatus for efficient access to multidimensional data structures and/or other large data blocks | |
CN110362780A (zh) | 一种基于申威众核处理器的大数据张量典范分解计算方法 | |
Hoemmen | A communication-avoiding, hybrid-parallel, rank-revealing orthogonalization method | |
CN106933777B (zh) | 基于国产申威26010处理器的基2一维fft的高性能实现方法 | |
Huang et al. | NUMA-aware FFT-based convolution on ARMv8 many-core CPUs | |
US8792786B2 (en) | Photonically-enabled in-flight data reorganization | |
Anzt et al. | Variable-size batched LU for small matrices and its integration into block-Jacobi preconditioning | |
Novakovic | A hierarchically blocked Jacobi SVD algorithm for single and multiple graphics processing units | |
JP2021128752A (ja) | インメモリコンピューティングに対するデータ配置のための方法及びその方法が適用されたメモリモジュール | |
CN105323036A (zh) | 对复矩阵进行奇异值分解的方法、装置及计算设备 | |
Mu et al. | The implementation and optimization of Bitonic sort algorithm based on CUDA | |
US20230289304A1 (en) | Method and apparatus for efficient access to multidimensional data structures and/or other large data blocks | |
Nielsen et al. | Multicore challenges and benefits for high performance scientific computing |
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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20171024 |