CN111158874A - 数据处理方法和装置、电子设备及存储介质 - Google Patents

数据处理方法和装置、电子设备及存储介质 Download PDF

Info

Publication number
CN111158874A
CN111158874A CN201911326645.3A CN201911326645A CN111158874A CN 111158874 A CN111158874 A CN 111158874A CN 201911326645 A CN201911326645 A CN 201911326645A CN 111158874 A CN111158874 A CN 111158874A
Authority
CN
China
Prior art keywords
multiplication
matrix
sub
parameter
task
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
Application number
CN201911326645.3A
Other languages
English (en)
Inventor
刘宇玺
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Sensetime Technology Co Ltd
Original Assignee
Shenzhen Sensetime Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shenzhen Sensetime Technology Co Ltd filed Critical Shenzhen Sensetime Technology Co Ltd
Priority to CN201911326645.3A priority Critical patent/CN111158874A/zh
Publication of CN111158874A publication Critical patent/CN111158874A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix 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)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Mathematical Physics (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • General Engineering & Computer Science (AREA)
  • Pure & Applied Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Complex Calculations (AREA)

Abstract

本公开实施例公开了一种数据处理方法和装置、电子设备及存储介质,其中方法包括:获取用于表示第一矩阵规模的第一参数,以及用于表示第二矩阵规模的第二参数;根据第一参数和第二参数确定乘法任务的调度方式,所述乘法任务用于指示将所述第一矩阵与所述第二矩阵相乘,所述乘法任务包括多个子乘法任务,每个子乘法任务用于指示将所述第一矩阵的一个子矩阵与所述第二矩阵的一个子矩阵相乘。

Description

数据处理方法和装置、电子设备及存储介质
技术领域
本公开涉及计算机技术领域,具体涉及一种数据处理方法和装置、电子设备及存储介质。
背景技术
矩阵乘法在高性能计算领域中占有重要地位,其广泛应用于深度学习、图像处理和数字信号处理等应用中。矩阵乘法属于计算密集型任务,它的性能对应用的整体性能有着至关重要的影响。对于数据量庞大的矩阵乘法计算过程而言,给设备带来的性能影响会更大,因此,目前亟需一种数据处理方法,以降低计算大规模密集型任务对设备性能的影响。
发明内容
本公开实施例提供了一种数据处理方法和装置、电子设备及存储介质。
本公开实施例第一方面提供一种数据处理方法,包括:
获取用于表示第一矩阵规模的第一参数,以及用于表示第二矩阵规模的第二参数;
根据所述第一参数以及所述第二参数,确定乘法任务的调度方式,所述乘法任务用于指示将所述第一矩阵与所述第二矩阵相乘,所述乘法任务包括多个子乘法任务,每个子乘法任务用于指示将所述第一矩阵的一个子矩阵与所述第二矩阵的一个子矩阵相乘;
按照所述乘法任务的调度方式,在每次调度过程中,将存在资源共享的多个子乘法任务分配至多个并行执行的线程块进行处理,以经过多次调度过程,得到所述乘法任务对应的处理结果。
在一种可选的实施方式中,所述根据所述第一参数以及所述第二参数,确定乘法任务的调度方式之前,所述方法还包括:
获取资源参数,所述资源参数用于表示并行执行所述乘法任务的进程块数量上限;
根据所述资源参数、所述第一参数以及所述第二参数,判断所述乘法任务所需的进程块数量是否超过并行执行所述乘法任务的进程块数量上限;
若否,执行所述根据所述第一参数以及所述第二参数,确定乘法任务的调度方式的步骤。
通过上述判断能够确保可使用的硬件资源能够支持当前分块方式对应的计算任务。
在一种可选的实施方式中,所述乘法任务的调度方式用于指示在每次调度过程中,存在多个子乘法任务所对应的所述第一矩阵的子矩阵和所述第二矩阵的子矩阵各自对应的数据分别被多次访问。
通过线程并行处理方式对子乘法任务进行数据处理,可以提高内存访问效率和计算速率。
在一种可选的实施方式中,所述乘法任务的调度方式用于指示在每次调度过程中,所有子乘法任务所对应的所述第一矩阵的子矩阵和所述第二矩阵的子矩阵对应的数据量最小。
通过上述调度方式,使两个矩阵中的子矩阵数据被线程块共享的次数更均衡,即矩阵的数据局部性得到了更好的利用,程序性能得到提升。
在一种可选的实施方式中,所述将存在资源共享的多个子乘法任务分配至多个并行执行的线程块进行处理包括:
按照目标映射方式,将存在资源共享的多个子乘法任务分配至多个并行执行的线程块进行处理,其中,每个线程块用于处理所述存在资源共享的多个子乘法任务中的一个乘法任务。
通过预设的映射方式进行子乘法任务和线程块的映射调度,可以确保矩阵规模较大情况下,也能够使缓存和内存系统资源的尽可能均衡访问,确保程序的性能。
在一种可选的实施方式中,所述按照目标映射方式,将存在资源共享的多个子乘法任务对应分配至多个并行执行的线程块进行处理,包括:
在所述多个并行执行的线程块中,根据行优先规则或列优先规则为所述多个并行执行的线程块依次分配所述存在资源共享的多个子乘法任务,以使所述多个并行执行的线程块处理所述多个子乘法任务。
在一种可选的实施方式中,所述行优先规则包括单个线程块执行子乘法任务过程中,所述单个线程块中奇数行与偶数行的线程排序方向为异向,或是所述单个线程块中每行的线程排序方向为同向;
所述列优先规则包括单个线程块执行子乘法任务过程中,所述单个线程块中奇数列与偶数列的线程排序方向为异向,或是所述单个线程块中每列的线程排序方向为同向。
本公开实施例第二方面提供了一种数据处理装置,包括:
获取模块,用于获取用于表示第一矩阵规模的第一参数,以及用于表示第二矩阵规模的第二参数;
确定模块,用于根据所述第一参数以及所述第二参数,确定乘法任务的调度方式,所述乘法任务用于指示将所述第一矩阵与所述第二矩阵相乘,所述乘法任务包括多个子乘法任务,每个子乘法任务用于指示将所述第一矩阵的一个子矩阵与所述第二矩阵的一个子矩阵相乘;
处理模块,用于按照所述乘法任务的调度方式,在每次调度过程中,将存在资源共享的多个子乘法任务分配至多个并行执行的线程块进行处理,以经过多次调度过程,得到所述乘法任务对应的处理结果。
可选的,还包括判断模块,其中:
所述获取模块还用于,在所述根据所述第一参数以及所述第二参数,确定乘法任务的调度方式之前,获取资源参数,所述资源参数用于表示并行执行所述乘法任务的进程块数量上限;
所述判断模块用于,根据所述资源参数、所述第一参数以及所述第二参数,判断所述乘法任务所需的进程块数量是否超过并行执行所述乘法任务的进程块数量上限;
所述确定模块具体用于,若所述判断模块判断所述乘法任务所需的进程块数量未超过并行执行所述乘法任务的进程块数量上限,根据所述第一参数以及所述第二参数,确定乘法任务的调度方式。
可选的,所述乘法任务的调度方式用于指示在每次调度过程中,存在多个子乘法任务所对应的所述第一矩阵的子矩阵和所述第二矩阵的子矩阵各自对应的数据分别被多次访问。
可选的,所述乘法任务的调度方式用于指示在每次调度过程中,所有子乘法任务所对应的所述第一矩阵的子矩阵和所述第二矩阵的子矩阵对应的数据量最小。
可选的,所述处理模块具体用于:
按照目标映射方式,将存在资源共享的多个子乘法任务分配至多个并行执行的线程块进行处理,其中,每个线程块用于处理所述存在资源共享的多个子乘法任务中的一个乘法任务。
可选的,所述处理模块还具体用于:
在所述多个并行执行的线程块中,根据行优先规则或列优先规则为所述多个并行执行的线程块依次分配所述存在资源共享的多个子乘法任务,以使所述多个并行执行的线程块处理所述多个子乘法任务。
可选的,所述行优先规则包括单个线程块执行子乘法任务过程中,所述单个线程块中奇数行与偶数行的线程排序方向为异向,或是所述单个线程块中每行的线程排序方向为同向;
所述列优先规则包括单个线程块执行子乘法任务过程中,所述单个线程块中奇数列与偶数列的线程排序方向为异向,或是所述单个线程块中每列的线程排序方向为同向。
本公开实施例第三方面提供一种电子设备,包括处理器以及存储器,所述存储器用于存储计算机程序,所述计算机程序被配置成由所述处理器执行,所述处理器用于执行如本公开实施例第一方面任一方法中所描述的部分或全部步骤。
本公开实施例第四方面提供一种计算机可读存储介质,所述计算机可读存储介质用于存储计算机程序,其中,所述计算机程序使得计算机执行如本公开实施例第一方面任一方法中所描述的部分或全部步骤。
本公开实施例通过获取用于表示第一矩阵规模的第一参数,以及用于表示第二矩阵规模的第二参数,根据所述第一参数以及所述第二参数,确定乘法任务的调度方式,所述乘法任务用于指示将所述第一矩阵与所述第二矩阵相乘,所述乘法任务包括多个子乘法任务,每个子乘法任务用于指示将所述第一矩阵的一个子矩阵与所述第二矩阵的一个子矩阵相乘,再按照所述乘法任务的调度方式,在每次调度过程中,将存在资源共享的多个子乘法任务分配至多个并行执行的线程块进行处理,以经过多次调度过程,得到所述乘法任务对应的处理结果,通过按照上述分块方式将子矩阵合理映射到线程块中调度和执行,使两个矩阵中的子矩阵数据被线程块共享的次数更均衡,矩阵的数据局部性得到了更好的利用,即两个矩阵中的各部分子矩阵数据都能更多地被共享,使缓存和内存系统资源的访问更均衡,结合并行处理方式提高内存访问效率,减少了由于矩阵规模过大和硬件资源不平衡带来的访存冲突,可以降低计算大规模密集型任务对设备性能的影响。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。
图1是本公开实施例公开的一种数据处理方法的流程示意图;
图2是本公开实施例公开的一种小矩阵乘法的分块示意图;
图3是本公开实施例公开的另一种数据处理方法的流程示意图;
图4A是本公开实施例公开的一种大矩阵乘法的分块示意图;
图4B是本公开实施例公开的四种基于分块的映射方式示意图;
图4C是本公开实施例公开的一种大矩阵的分块式线程块映射示意图;
图5是本公开实施例公开的一种数据处理装置的结构示意图;
图6是本公开实施例公开的一种电子设备的结构示意图。
具体实施方式
下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
本公开中的术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中术语“至少一种”表示多种中的任意一种或多种中的至少两种的任意组合,例如,包括A、B、C中的至少一种,可以表示包括从A、B和C构成的集合中选择的任意一个或多个元素。本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其他步骤或单元。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本公开的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
本公开实施例所涉及到的数据处理装置可以为电子设备,上述电子设备包括终端设备,具体实现中,上述终端设备包括但不限于诸如具有触摸敏感表面(例如,触摸屏显示器和/或触摸板)的移动电话、膝上型计算机或平板计算机之类的其它便携式设备。还应当理解的是,在某些实施例中,所述设备并非便携式通信设备,而是具有触摸敏感表面(例如,触摸屏显示器和/或触摸板)的台式计算机。
下面对本公开实施例进行详细介绍。
请参阅图1,图1是本公开实施例公开的一种数据处理方法的流程示意图,如图1所示,该数据处理方法包括如下步骤:
101、获取用于表示第一矩阵规模的第一参数,以及用于表示第二矩阵规模的第二参数。
本公开实施例中的数据处理方法的执行主体以是上述数据处理装置,例如,上述数据处理方法可以由终端设备或其它处理设备执行。其中,终端设备可以为用户设备(UserEquipment,UE)、移动设备、用户终端、终端、蜂窝电话、无绳电话、个人数字处理(PersonalDigital Assistant,PDA)、手持设备、计算设备、车载设备、可穿戴设备等。其它处理设备,例如可以为本地或云端服务器等。本公开对数据处理装置的形式并不限定。在一些可能的实现方式中,该数据处理方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
其中,上述第一矩阵和上述第二矩阵可以是待进行矩阵乘法运算的两个矩阵,本公开实施例中的数据处理方法可以实现对第一矩阵和第二矩阵的乘法计算任务。
矩阵乘法在高性能计算领域中占有重要地位,其广泛应用于深度学习、图像处理和数字信号处理等应用中。矩阵乘法的计算形式可以表述为,两个大小分别为M×K的矩阵A和K×N的矩阵B相乘,A中每一行的K个元素都与B中对应列的K个元素对应相乘,得到M×N的矩阵C的过程。矩阵乘法属于计算密集型任务,它的性能对应用的整体性能有着至关重要的影响。
本公开实施例中的第一矩阵或第二矩阵可以为图像处理中的特征参数矩阵,比如图像处理中的各种像素点概率矩阵,或者是基于神经网络的图像处理中,需要神经网络进行乘法计算的矩阵。
在矩阵运算中,矩阵规模影响着计算量,同时影响在计算机中的资源调度和处理。本申请实施例中的第一矩阵和第二矩阵的规模可以不同,数据处理装置可以通过矩阵的参数确定矩阵规模,比如表示矩阵规模的参数可以为矩阵的行数和列数。
具体的,上述第一参数可表示第一矩阵规模,而上述第二参数可表示第二矩阵规模。
在获取上述第一参数和上述第二参数之后,可以执行步骤102。
102、根据上述第一参数以及上述第二参数,确定乘法任务的调度方式,上述乘法任务用于指示将上述第一矩阵与上述第二矩阵相乘,上述乘法任务包括多个子乘法任务,每个子乘法任务用于指示将上述第一矩阵的一个子矩阵与上述第二矩阵的一个子矩阵相乘。
具体的,对于上述第一矩阵与上述第二矩阵相乘的乘法任务,数据处理装置首先根据获取到的第一参数以及第二参数,可以确定与矩阵规模适配的该乘法任务的调度方式。在一种实施方式中,在上述第一参数和第二参数分别表示第一矩阵的行数和列数、第二矩阵的行数和列数的情况下,可以根据上述第一矩阵的行数和列数、第二矩阵的行数和列数分别对第一矩阵和第二矩阵进行子矩阵划分操作,获得第一矩阵的多个子矩阵和第二矩阵的多个子矩阵。
对于矩阵乘法,可以将矩阵划分为多个子矩阵进行计算,其划分方式可以不同,但执行乘法任务得到的结果一致。而本申请实施例中的矩阵乘法任务可以是通过划分子矩阵的方式进行的,即将第一矩阵划分为多个子矩阵,第二矩阵划分为多个子矩阵,将上述第一矩阵的一个子矩阵与上述第二矩阵的一个子矩阵相乘作为一个子乘法任务。
在一种可选的实施方式中,上述乘法任务的调度方式用于指示在每次调度过程中,存在多个子乘法任务所对应的上述第一矩阵的子矩阵和上述第二矩阵的子矩阵各自对应的数据分别被多次访问。
本申请实施例中乘法任务的调度方式可以理解为执行该乘法任务的线程(块)的调度方式。一般而言,计算机通常只有一个中央处理器(central processing unit,CPU),在同一时刻只能执行一条机器指令,每个线程只有获得CPU的使用权才能执行指令。所谓多线程的并发运行,其实是指从宏观上看,各个线程轮流获得CPU的使用权,分别执行各自的任务。在运行池中,会有多个处于就绪状态的线程在等待CPU的使用权。JAVA虚拟机的一项任务就是负责线程的调度,线程调度是指按照预设机制为多个线程分配CPU的使用权。
本公开实施例中涉及的图形处理器(Graphics Processing Unit,GPU)又称显示核心、视觉处理器、显示芯片,是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上做图像和图形相关运算工作的微处理器,GPU使显卡减少了对CPU的依赖,并进行部分原本CPU的工作。
本公开实施例中涉及的线程是程序执行流的最小单元,是进程中的一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程可以并行执行不同的任务。本公开实施例中,线程块属于线程的调度单位,从逻辑角度来看,上述线程块是线程的集合,它们可以被组织为一维、二维或三维布局;从硬件角度来看,线程块是一维线程束的集合,在线程块中线程被组织成一维布局。
GPU因其强大的计算能力也在通用计算领域得到了越来越广泛的应用。本申请的数据处理方法可以实现GPU上的矩阵乘法,其原理是通过分块技术,将整个矩阵乘法任务划分成多个小矩阵的子乘法任务,然后根据确定的调度方式将每一子乘法任务分配给不同的线程块来执行。具体的,每次调度过程中,子矩阵的数据可被多次访问,即多个线程块可共享一组子矩阵的数据,该组子矩阵属于一个子乘法任务。
本申请实施例中根据矩阵规模确定乘法任务的调度方式之后,进而可以执行103。
103、按照上述乘法任务的调度方式,在每次调度过程中,将存在资源共享的多个子乘法任务分配至多个并行执行的线程块进行处理,以经过多次调度过程,得到上述乘法任务对应的处理结果。
在确定了乘法任务的调度方式之后,则可以按照上述乘法任务的调度方式进行数据处理,以实现矩阵的乘法运算。具体的,在每一次调度过程中,按照前述所述,将存在资源共享的多个子乘法任务分配至多个并行执行的线程块进行处理,每个线程块可以执行一个子乘法任务,经过多次调度过程,可以得到该乘法任务对应的处理结果。
为了更清楚地说明本申请实施例中的数据处理方法以及线程块的分块,请参见图2,为一种小矩阵乘法的分块示意图。
一般GPU的硬件资源是有限的,这里假设硬件资源允许8个线程块并行执行。如图2所示,第一矩阵为矩阵A,第二矩阵为矩阵B,使用分块技术,矩阵A的子矩阵A-0被四个线程块TB-0、TB-1、TB-2和TB-3共享,子矩阵A-1则被TB-4、TB-5、TB-6和TB-7共享;同理,矩阵B的子矩阵B-0被TB-0和TB-4共享,子矩阵B-1被TB-1和TB-5共享,依此类推。矩阵A的两个子矩阵被共享了4次,矩阵B的4个矩阵被共享了2次,即对应前述所说的,存在多个子乘法任务所对应的第一矩阵的子矩阵和第二矩阵的子矩阵各自对应的数据分别被多次访问。
参考图2,资源共享,指的是在多个线程块中可共同使用同一资源,即多个线程块共享同一子矩阵中的数据,比如上述A的子矩阵A-0被四个线程块TB-0、TB-1、TB-2和TB-3共享。存在资源共享的多个子乘法任务,指的是相乘的子矩阵数据被线程块共享的子乘法任务。
基于上述分块方式执行调度,在每次调度过程中,将存在资源共享的多个子乘法任务分配至多个并行执行的线程块进行处理,可以以经过多次调度过程,得到矩阵A与矩阵B相乘的乘法任务所对应的处理结果。对于某些特定大小的矩阵,合理的分块技术可以更充分发挥GPU的计算能力。通过拆分子矩阵执行子乘法任务的方式,可以便于多线程并行处理子乘法任务,提高矩阵计算效率。
矩阵乘法属于计算密集型任务,它的性能对应用的整体性能有着至关重要的影响,对于数据量庞大的矩阵乘法计算过程而言,给设备带来的性能影响会更大。本公开实施例通过获取用于表示第一矩阵规模的第一参数,以及用于表示第二矩阵规模的第二参数,根据上述第一参数以及上述第二参数,确定乘法任务的调度方式,上述乘法任务用于指示将上述第一矩阵与上述第二矩阵相乘,上述乘法任务包括多个子乘法任务,每个子乘法任务用于指示将上述第一矩阵的一个子矩阵与上述第二矩阵的一个子矩阵相乘,再按照上述乘法任务的调度方式,在每次调度过程中,将存在资源共享的多个子乘法任务分配至多个并行执行的线程块进行处理,以经过多次调度过程,得到上述乘法任务对应的处理结果,通过划分子矩阵的运算方式,矩阵的数据局部性得到了更好的利用,通过按照上述分块方式将子矩阵合理映射到线程块中调度和执行,使缓存和内存系统资源的访问更均衡,结合并行处理方式提高内存访问效率,减少了由于矩阵规模过大和硬件资源不平衡带来的访存冲突,可以降低计算大规模密集型任务对设备性能的影响。
请参阅图3,图3是本公开实施例公开的另一种数据处理方法的流程示意图,如图3所示,该数据处理方法包括如下步骤:
301、获取用于表示第一矩阵规模的第一参数,以及用于表示第二矩阵规模的第二参数。
其中,上述步骤301可以参考图1所示实施例的步骤101中的具体描述,此处不再赘述。
302、获取资源参数,上述资源参数用于表示并行执行上述乘法任务的进程块数量上限。
一般GPU的硬件资源是有限的,其中,上述资源参数可以表示可并行处理的进程块数量上限,在数据处理中任务所需的线程块数量不会超过该资源参数的限制,以维持硬件正常的工作状态。具体的,可以确定根据硬件资源所允许的并行线程块数目上限为阈值N,其中N为大于1的整数。
其中,上述步骤301和步骤302的执行顺序不限于图中例举的情况。即步骤301与步骤302可以同时执行,或是按照一定先后顺序执行,比如,在执行步骤301后执行步骤302,或是在执行步骤302后执行步骤301。
303、根据上述资源参数、上述第一参数以及上述第二参数,判断上述乘法任务所需的进程块数量是否超过并行执行上述乘法任务的进程块数量上限。
由于上述第一参数和上述第二参数可以分别表示第一矩阵和第二矩阵的规模,而上述资源参数可表示并行执行所述乘法任务的进程块数量上限。进而可以根据上述资源参数、上述第一参数以及上述第二参数,判断上述乘法任务所需的进程块数量是否超过并行执行上述乘法任务的进程块数量上限。
本公开实施例中涉及工作集(Working Set)。在Windows操作系统中,物理上驻留在内存中的那一部分子集称为工作集,可以理解为专用(私有)工作集(当前进程独占)中的物理内存数量与进程正在使用且可以和其他进程共享的物理内存数量的总和,因此可以这么理解,该值就是该进程所占用的总的物理内存,但是这个值是由两部分组成,即“专用工作集”和“共享工作集”。
而矩阵相乘过程中访问的第一矩阵和第二矩阵工作集,可以理解为在每次调度过程中,所有子乘法任务所对应的所述第一矩阵的子矩阵和所述第二矩阵的子矩阵对应的数据量。
通过分块的方式可以提高GPU程序执行所依赖的并行度,并行度的发挥还取决于GPU的任务调度方式。在一种实现方式中,线程块可以由X、Y和Z三个维度构成,GPU的任务调度可以使用轮询方式来调度上述线程块,即先调度X维度的线程块,再调度Y维度的线程块,最后调度Z维度的线程块。
本申请实施例中,乘法任务所需的进程块总数量可以表示为x*y*z,其中,x、y和z分别表示X、Y和Z三个维度的线程块数量,x、y、z为正整数。需要注意的是,对于矩阵乘法通常使用到的线程块是二维的(可以理解为行和列),若是三维“矩阵”的乘法计算,其实是三维的立方体数组计算,则可以对应三维的线程块。本公开实施例中提到的三维包括二维,即z=0的情况。
具体的,上述资源参数(阈值)N可以是根据装置的硬件资源条件预先设定的,作为线程块数目的限制条件,可以根据实际情况进行修改。在获取预设的阈值N之后,将N作为限制条件,分块获得的乘法任务所需的进程块数量需要不超过并行执行所述乘法任务的进程块数量上限,即x*y*z≤N。
通过上述方式,可以判断乘法任务所需的进程块数量是否超过并行执行所述乘法任务的进程块数量上限,若不超过,硬件资源能够支持当前分块方式对应的计算任务,可以执行步骤102(即在执行完步骤303之后,可以执行步骤304);若超过,可以重新确定分块方式,以使矩阵规模与硬件资源相匹配,执行硬件能够支持的数据处理。
304、若上述乘法任务所需的进程块数量不超过并行执行上述乘法任务的进程块数量上限,根据上述第一参数以及上述第二参数,确定乘法任务的调度方式,上述乘法任务用于指示将上述第一矩阵与上述第二矩阵相乘,上述乘法任务包括多个子乘法任务,每个子乘法任务用于指示将上述第一矩阵的一个子矩阵与上述第二矩阵的一个子矩阵相乘。
其中,上述步骤304可以参考图1所示实施例的步骤102中的具体描述,此处不再赘述。
在一种可选的实施方式中,上述乘法任务的调度方式用于指示在每次调度过程中,所有子乘法任务所对应的上述第一矩阵的子矩阵和上述第二矩阵的子矩阵对应的数据量最小。
在上述乘法任务所需的进程块数量不超过并行执行所述乘法任务的进程块数量上限的基础上,可以进行乘法任务的调度方式的确定。对于分块方式,本公开实施例设置了一种搜索机制来确定相对更优的分块规模。具体的,可以通过遍历已有线程块的三个维度(x,y,z)使得矩阵相乘时访问的矩阵A和矩阵B的工作集最小,即保证并行运行的线程块访问的数据规模最小。
具体的,可以选择在每次调度过程中,使所有子乘法任务所对应的上述第一矩阵的子矩阵和上述第二矩阵的子矩阵对应的数据量最小的调度方式,作为该乘法任务的调度方式。
进一步具体的,即在满足x*y*z≤N的前提下,优选的方式为使得矩阵相乘时访问的矩阵A和矩阵B的工作集最小,即保证并行运行的线程块访问的数据规模最小。
具体的,可以通过遍历已有线程块的三个维度(x,y,z)使得矩阵相乘时访问的矩阵A和矩阵B的工作集最小。
举例来讲,如图4A所示的一种大矩阵乘法的分块示意图,在图2的基础上在矩阵A和矩阵B的矩阵规模变大的情况下,如图4A所示,由于矩阵A和矩阵B数据量的增加,矩阵A的每个子矩阵数据量增加,矩阵B所划分的子矩阵个数增加一倍。子矩阵A-0将被所有的8个线程块都共享,但是矩阵B的子矩阵却分别只被一个线程块使用,如线程块TB-0使用B-0,线程块TB-1使用B-1等。矩阵A的一个子矩阵被共享了8次,矩阵B的8个子矩阵却只使用了1次。
由上述图2和图4A的对比可以看出,矩阵乘法虽然使用了同样的分块方法,但是在待相乘的矩阵的矩阵规模不同的情况下,子矩阵被线程块共享的比例不同,由于缓存空间有限,缓存和内存系统的数据局部性也会随之变化,造成不同矩阵规模性的缓存和内存系统性能不同,程序的性能因而发生变化。
进一步举例来讲,当线程块数量为16时,线程块的分块方式可以为1×16、2×8、4×4。对于待相乘的矩阵C和矩阵D,对应的子矩阵数量分别划分为:1个和16个、2个和8个,也可以各自被分为4个子矩阵,以映射到上述16个线程块进行调度。优选的,在该种情况下,为了使在每次调度过程中,使所有子乘法任务所对应的矩阵C的子矩阵和矩阵D的子矩阵对应的数据量最小,可以选择使矩阵C的子矩阵和矩阵D的子矩阵的数据被共享更均衡的方式,即4×4的线程块分块方式,每个矩阵中的子矩阵可以被共享4次。具体的计算方式分别可以是:1+16=17;2+8=10;4+4=8,选择其中数据量最小(为8)的分块方式。
为了确保矩阵规模较大情况下,也能够使缓存和内存系统资源的尽可能均衡访问,确保程序的性能,在一种可能的实现方式中,在确定上述乘法任务的调度方式时可以同时选择合适的映射方式将多个子乘法任务对应分配到线程块执行,具体参见步骤305。
305、按照目标映射方式,将存在资源共享的多个子乘法任务分配至多个并行执行的线程块进行处理,以经过多次调度过程,得到上述乘法任务对应的处理结果,其中,每个线程块用于处理所述存在资源共享的多个子乘法任务中的一个乘法任务。
为了确保矩阵规模较大情况下,也能够使缓存和内存系统资源的尽可能均衡访问,确保程序的性能,在一种可能的实现方式中,可以按照目标映射方式,将存在资源共享的多个子乘法任务分配至多个并行执行的线程块进行处理,其中,每个线程块用于处理所述存在资源共享的多个子乘法任务中的一个乘法任务。
可选的,上述目标映射方式可以根据不同的矩阵规模进行不同的设置或选择。
在所述多个并行执行的线程块中,根据行优先规则或列优先规则为所述多个并行执行的线程块依次分配所述存在资源共享的多个子乘法任务,以使所述多个并行执行的线程块处理所述多个子乘法任务。
在一种可选的实施方式中,所述行优先规则包括单个线程块执行子乘法任务过程中,所述单个线程块中奇数行与偶数行的线程排序方向为异向,或是所述单个线程块中每行的线程排序方向为同向。
可选的,所述列优先规则包括单个线程块执行子乘法任务过程中,所述单个线程块中奇数列与偶数列的线程排序方向为异向,或是所述单个线程块中每列的线程排序方向为同向。
首先可以参见图4B,图4B为四种基于分块的映射方式示意图。如图4B(a)所示,为一种行优先规则的映射方式,它与GPU任务调度器的原理一致,按照轮询的方式先X维度再Y维度依次调度线程块;如图4B(c)所示,为一种列优先规则的映射方式,列优先则是先在Y维度上调度线程块,再在X维度上调度。图4B(b)所示,为一种行优先牛耕式规则的映射方式,图4B(d)所示,为一种列优先牛耕式规则的映射方式,牛耕式的调度方式与古希腊文的书写方式类似,在X维度或Y维度的边缘时,从相反的方向上调度线程块。
通俗地讲,上述四种线程块重映射机制即行优先、列优先、行牛耕式和列牛耕式等映射方式,对不同的矩阵乘法规模有不同的性能。可选的,在确定分块方式之后的各个线程块内还可以有其他不同的映射方式,本公开实施例对此不作限制。
由于矩阵被划分成若干个小矩阵,小矩阵之间存在数据共享,使缓存和内存系统资源的访问更均衡,因此分块式的线程块映射可以将存在共享数据的线程块集中调度,提高内存访问效率,减少了由于矩阵规模和硬件资源不平衡带来的访存冲突,可以降低计算大规模密集型任务对设备性能的影响。
进一步举例来讲,图4C为本公开提供的一种大矩阵的分块式线程块映射示意图。具体的,针对图4A中的大矩阵使用上述行优先规则的映射机制后,其映射示意图如图4C所示。子矩阵A-0被四个线程块TB-0、TB-1、TB-2和TB-3共享,子矩阵A-1则被TB-4、TB-5、TB-6和TB-7共享。而子矩阵B-0被TB-0和TB-4共享,子矩阵B-1被TB-1和TB-5共享,依此类推。A-0和A-1被共享了4次,B-0、B-1、B-2和B-3则共享了2次。可以见得,与图4A中的方式相比,使用分块式的线程块映射后,两个矩阵的子矩阵数据被共享的次数更平均,矩阵的数据局部性得到了更好的利用,即两个矩阵中的各部分子矩阵数据都能更多地被共享,程序性能因而可以得到提升。
在确定了分块方式之后,再对线程块进行基于分块的线程块重映射,将有数据共享的线程块调度到同一个处理器核上,然后可以在各个线程块中进行运算。即将矩阵乘法任务划分成多个小矩阵的乘法任务,然后将每一块小任务分配给不同的线程块来执行,其中各个上述线程块的子矩阵的计算任务可以并行处理,快速获得矩阵乘法的计算结果,提高了缓存的利用率。对于某些特定大小的矩阵,合理的分块技术更充分发挥了GPU的计算能力。在不增加缓存和内存系统负载的情况下,也可以保证GPU程序有足够的线程级和指令集并行性。
本公开实施例中的方法可以应用于使用了矩阵相乘方法的神经网络加速库中。
本公开实施例通过获取用于表示第一矩阵规模的第一参数,以及用于表示第二矩阵规模的第二参数,获取资源参数,上述资源参数用于表示并行执行上述乘法任务的进程块数量上限,根据上述资源参数、上述第一参数以及上述第二参数,判断上述乘法任务所需的进程块数量是否超过并行执行上述乘法任务的进程块数量上限。若否,根据上述第一参数以及上述第二参数,确定乘法任务的调度方式,上述乘法任务用于指示将上述第一矩阵与上述第二矩阵相乘,上述乘法任务包括多个子乘法任务,每个子乘法任务用于指示将上述第一矩阵的一个子矩阵与上述第二矩阵的一个子矩阵相乘,再按照目标映射方式,将存在资源共享的多个子乘法任务分配至多个并行执行的线程块进行处理,以经过多次调度过程,得到上述乘法任务对应的处理结果,其中,每个线程块用于处理所述存在资源共享的多个子乘法任务中的一个乘法任务。通过划分子矩阵的运算方式,矩阵的数据局部性得到了更好的利用,通过目标映射方式将子矩阵合理映射到线程块中调度和执行,使缓存和内存系统资源的访问更均衡,结合并行处理方式提高内存访问效率,减少了由于矩阵规模和硬件资源不平衡带来的访存冲突,可以降低计算大规模密集型任务对设备性能的影响。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
上述主要从方法侧执行过程的角度对本公开实施例的方案进行了介绍。可以理解的是,数据处理装置为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,本公开能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对特定的应用使用不同方法来实现所描述的功能,但是这种实现不应认为超出本公开的范围。
本公开实施例可以根据上述方法示例对数据处理装置进行功能单元(模块)的划分,例如,可以对应各个功能划分各个功能单元,也可以将两个或两个以上的功能集成在一个处理单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。需要说明的是,本公开实施例中对单元的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
请参阅图5,图5是本公开实施例公开的一种数据处理装置的结构示意图。如图5所示,该数据处理装置500包括:
获取模块510,用于获取用于表示第一矩阵规模的第一参数,以及用于表示第二矩阵规模的第二参数;
确定模块520,用于根据所述第一参数以及所述第二参数,确定乘法任务的调度方式,所述乘法任务用于指示将所述第一矩阵与所述第二矩阵相乘,所述乘法任务包括多个子乘法任务,每个子乘法任务用于指示将所述第一矩阵的一个子矩阵与所述第二矩阵的一个子矩阵相乘;
处理模块530,用于按照所述乘法任务的调度方式,在每次调度过程中,将存在资源共享的多个子乘法任务分配至多个并行执行的线程块进行处理,以经过多次调度过程,得到所述乘法任务对应的处理结果。
可选的,所述数据处理装置500还包括判断模块540,其中:
所述获取模块510还用于,在所述根据所述第一参数以及所述第二参数,确定乘法任务的调度方式之前,获取资源参数,所述资源参数用于表示并行执行所述乘法任务的进程块数量上限;
所述判断模块540用于,根据所述资源参数、所述第一参数以及所述第二参数,判断所述乘法任务所需的进程块数量是否超过并行执行所述乘法任务的进程块数量上限;
所述确定模块520具体用于,若所述判断模块判断所述乘法任务所需的进程块数量未超过并行执行所述乘法任务的进程块数量上限,根据所述第一参数以及所述第二参数,确定乘法任务的调度方式。
可选的,所述乘法任务的调度方式用于指示在每次调度过程中,存在多个子乘法任务所对应的所述第一矩阵的子矩阵和所述第二矩阵的子矩阵各自对应的数据分别被多次访问。
可选的,所述乘法任务的调度方式用于指示在每次调度过程中,所有子乘法任务所对应的所述第一矩阵的子矩阵和所述第二矩阵的子矩阵对应的数据量最小。
可选的,所述处理模块530具体用于:
按照目标映射方式,将存在资源共享的多个子乘法任务分配至多个并行执行的线程块进行处理,其中,每个线程块用于处理所述存在资源共享的多个子乘法任务中的一个乘法任务。
可选的,所述处理模块530还具体用于:
在所述多个并行执行的线程块中,根据行优先规则或列优先规则为所述多个并行执行的线程块依次分配所述存在资源共享的多个子乘法任务,以使所述多个并行执行的线程块处理所述多个子乘法任务。
可选的,所述行优先规则包括单个线程块执行子乘法任务过程中,所述单个线程块中奇数行与偶数行的线程排序方向为异向,或是所述单个线程块中每行的线程排序方向为同向;
所述列优先规则包括单个线程块执行子乘法任务过程中,所述单个线程块中奇数列与偶数列的线程排序方向为异向,或是所述单个线程块中每列的线程排序方向为同向。
使用本公开实施例中的数据处理装置500,可以实现前述图1和/或图3实施例中的数据处理方法。
实施图5所示的数据处理装置500,数据处理装置500可以获取用于表示第一矩阵规模的第一参数,以及用于表示第二矩阵规模的第二参数,根据所述第一参数以及所述第二参数,确定乘法任务的调度方式,所述乘法任务用于指示将所述第一矩阵与所述第二矩阵相乘,所述乘法任务包括多个子乘法任务,每个子乘法任务用于指示将所述第一矩阵的一个子矩阵与所述第二矩阵的一个子矩阵相乘,再按照所述乘法任务的调度方式,在每次调度过程中,将存在资源共享的多个子乘法任务分配至多个并行执行的线程块进行处理,以经过多次调度过程,得到所述乘法任务对应的处理结果,通过划分子矩阵的运算方式,矩阵的数据局部性得到了更好的利用,通过按照上述分块方式将子矩阵合理映射到线程块中调度和执行,使缓存和内存系统资源的访问更均衡,结合并行处理方式提高内存访问效率,减少了由于矩阵规模和硬件资源不平衡带来的访存冲突,可以降低计算大规模密集型任务对设备性能的影响。
请参阅图6,图6是本公开实施例公开的一种电子设备的结构示意图。如图6所示,该电子设备600包括处理器601和存储器602,其中,电子设备600还可以包括总线603,处理器601和存储器602可以通过总线603相互连接,总线603可以是外设部件互连标准(Peripheral Component Interconnect,PCI)总线或扩展工业标准结构(ExtendedIndustry Standard Architecture,EISA)总线等。总线603可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。其中,电子设备600还可以包括输入输出设备604,输入输出设备604可以包括显示屏,例如液晶显示屏。存储器602用于存储计算机程序;处理器601用于调用存储在存储器602中的计算机程序执行上述图1和/或图3实施例中提到的部分或全部方法步骤。
实施图6所示的电子设备600,电子设备600可以获取用于表示第一矩阵规模的第一参数,以及用于表示第二矩阵规模的第二参数,根据所述第一参数以及所述第二参数,确定乘法任务的调度方式,所述乘法任务用于指示将所述第一矩阵与所述第二矩阵相乘,所述乘法任务包括多个子乘法任务,每个子乘法任务用于指示将所述第一矩阵的一个子矩阵与所述第二矩阵的一个子矩阵相乘,再按照所述乘法任务的调度方式,在每次调度过程中,将存在资源共享的多个子乘法任务分配至多个并行执行的线程块进行处理,以经过多次调度过程,得到所述乘法任务对应的处理结果,通过划分子矩阵的运算方式,矩阵的数据局部性得到了更好的利用,通过按照上述分块方式将子矩阵合理映射到线程块中调度和执行,使缓存和内存系统资源的访问更均衡,结合并行处理方式提高内存访问效率,减少了由于矩阵规模和硬件资源不平衡带来的访存冲突,可以降低计算大规模密集型任务对设备性能的影响。
本公开实施例还提供一种计算机存储介质,其中,该计算机存储介质用于存储计算机程序,该计算机程序使得计算机执行如上述方法实施例中记载的任何一种数据处理方法的部分或全部步骤。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本公开并不受所描述的动作顺序的限制,因为依据本公开,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本公开所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本公开所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元(模块)可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储器包括:U盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储器中,存储器可以包括:闪存盘、只读存储器、随机存取器、磁盘或光盘等。
以上对本公开实施例进行了详细介绍,本文中应用了具体个例对本公开的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本公开的方法及其核心思想;同时,对于本领域的一般技术人员,依据本公开的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本公开的限制。

Claims (16)

1.一种数据处理方法,其特征在于,所述方法包括:
获取用于表示第一矩阵规模的第一参数,以及用于表示第二矩阵规模的第二参数;
根据所述第一参数以及所述第二参数,确定乘法任务的调度方式,所述乘法任务用于指示将所述第一矩阵与所述第二矩阵相乘,所述乘法任务包括多个子乘法任务,每个子乘法任务用于指示将所述第一矩阵的一个子矩阵与所述第二矩阵的一个子矩阵相乘;
按照所述乘法任务的调度方式,在每次调度过程中,将存在资源共享的多个子乘法任务分配至多个并行执行的线程块进行处理,以经过多次调度过程,得到所述乘法任务对应的处理结果。
2.根据权利要求1所述的方法,其特征在于,所述根据所述第一参数以及所述第二参数,确定乘法任务的调度方式之前,所述方法还包括:
获取资源参数,所述资源参数用于表示并行执行所述乘法任务的进程块数量上限;
根据所述资源参数、所述第一参数以及所述第二参数,判断所述乘法任务所需的进程块数量是否超过并行执行所述乘法任务的进程块数量上限;
若否,执行所述根据所述第一参数以及所述第二参数,确定乘法任务的调度方式的步骤。
3.根据权利要求1或2所述的方法,其特征在于,所述乘法任务的调度方式用于指示在每次调度过程中,存在多个子乘法任务所对应的所述第一矩阵的子矩阵和所述第二矩阵的子矩阵各自对应的数据分别被多次访问。
4.根据权利要求1至3中任意一项所述的方法,其特征在于,所述乘法任务的调度方式用于指示在每次调度过程中,所有子乘法任务所对应的所述第一矩阵的子矩阵和所述第二矩阵的子矩阵对应的数据量最小。
5.根据权利要求1-4任一所述的方法,其特征在于,所述将存在资源共享的多个子乘法任务分配至多个并行执行的线程块进行处理包括:
按照目标映射方式,将存在资源共享的多个子乘法任务分配至多个并行执行的线程块进行处理,其中,每个线程块用于处理所述存在资源共享的多个子乘法任务中的一个乘法任务。
6.根据权利要求5所述的方法,其特征在于,所述按照目标映射方式,将存在资源共享的多个子乘法任务对应分配至多个并行执行的线程块进行处理,包括:
在所述多个并行执行的线程块中,根据行优先规则或列优先规则为所述多个并行执行的线程块依次分配所述存在资源共享的多个子乘法任务,以使所述多个并行执行的线程块处理所述多个子乘法任务。
7.根据权利要求6所述的方法,其特征在于,所述行优先规则包括单个线程块执行子乘法任务过程中,所述单个线程块中奇数行与偶数行的线程排序方向为异向,或是所述单个线程块中每行的线程排序方向为同向;
所述列优先规则包括单个线程块执行子乘法任务过程中,所述单个线程块中奇数列与偶数列的线程排序方向为异向,或是所述单个线程块中每列的线程排序方向为同向。
8.一种数据处理装置,其特征在于,包括:
获取模块,用于获取用于表示第一矩阵规模的第一参数,以及用于表示第二矩阵规模的第二参数;
确定模块,用于根据所述第一参数以及所述第二参数,确定乘法任务的调度方式,所述乘法任务用于指示将所述第一矩阵与所述第二矩阵相乘,所述乘法任务包括多个子乘法任务,每个子乘法任务用于指示将所述第一矩阵的一个子矩阵与所述第二矩阵的一个子矩阵相乘;
处理模块,用于按照所述乘法任务的调度方式,在每次调度过程中,将存在资源共享的多个子乘法任务分配至多个并行执行的线程块进行处理,以经过多次调度过程,得到所述乘法任务对应的处理结果。
9.根据权利要求8所述的装置,其特征在于,还包括判断模块,其中:
所述获取模块还用于,在所述根据所述第一参数以及所述第二参数,确定乘法任务的调度方式之前,获取资源参数,所述资源参数用于表示并行执行所述乘法任务的进程块数量上限;
所述判断模块用于,根据所述资源参数、所述第一参数以及所述第二参数,判断所述乘法任务所需的进程块数量是否超过并行执行所述乘法任务的进程块数量上限;
所述确定模块具体用于,若所述判断模块判断所述乘法任务所需的进程块数量未超过并行执行所述乘法任务的进程块数量上限,根据所述第一参数以及所述第二参数,确定乘法任务的调度方式。
10.根据权利要求8或9所述的装置,其特征在于,所述乘法任务的调度方式用于指示在每次调度过程中,存在多个子乘法任务所对应的所述第一矩阵的子矩阵和所述第二矩阵的子矩阵各自对应的数据分别被多次访问。
11.根据权利要求8-10任一所述的装置,其特征在于,所述乘法任务的调度方式用于指示在每次调度过程中,所有子乘法任务所对应的所述第一矩阵的子矩阵和所述第二矩阵的子矩阵对应的数据量最小。
12.根据权利要求8-11任一所述的装置,其特征在于,所述处理模块具体用于:
按照目标映射方式,将存在资源共享的多个子乘法任务分配至多个并行执行的线程块进行处理,其中,每个线程块用于处理所述存在资源共享的多个子乘法任务中的一个乘法任务。
13.根据权利要求12所述的装置,其特征在于,所述处理模块还具体用于:
在所述多个并行执行的线程块中,根据行优先规则或列优先规则为所述多个并行执行的线程块依次分配所述存在资源共享的多个子乘法任务,以使所述多个并行执行的线程块处理所述多个子乘法任务。
14.根据权利要求13所述的装置,其特征在于,所述行优先规则包括单个线程块执行子乘法任务过程中,所述单个线程块中奇数行与偶数行的线程排序方向为异向,或是所述单个线程块中每行的线程排序方向为同向;
所述列优先规则包括单个线程块执行子乘法任务过程中,所述单个线程块中奇数列与偶数列的线程排序方向为异向,或是所述单个线程块中每列的线程排序方向为同向。
15.一种电子设备,其特征在于,包括处理器以及存储器,所述存储器用于存储计算机程序,所述计算机程序被配置成由所述处理器执行,所述处理器用于执行如权利要求1-7任一项所述的方法。
16.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质用于存储计算机程序,其中,所述计算机程序使得计算机执行如权利要求1-7任一项所述的方法。
CN201911326645.3A 2019-12-20 2019-12-20 数据处理方法和装置、电子设备及存储介质 Pending CN111158874A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911326645.3A CN111158874A (zh) 2019-12-20 2019-12-20 数据处理方法和装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911326645.3A CN111158874A (zh) 2019-12-20 2019-12-20 数据处理方法和装置、电子设备及存储介质

Publications (1)

Publication Number Publication Date
CN111158874A true CN111158874A (zh) 2020-05-15

Family

ID=70557499

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911326645.3A Pending CN111158874A (zh) 2019-12-20 2019-12-20 数据处理方法和装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN111158874A (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112069460A (zh) * 2020-09-18 2020-12-11 Oppo广东移动通信有限公司 数据处理方法、装置以及电子设备
CN112148437A (zh) * 2020-10-21 2020-12-29 深圳致星科技有限公司 用于联邦学习的计算任务加速处理方法、装置及设备
CN112433760A (zh) * 2020-11-27 2021-03-02 海光信息技术股份有限公司 数据排序方法和数据排序电路
CN112948758A (zh) * 2021-02-24 2021-06-11 上海商汤智能科技有限公司 数据处理方法、装置以及芯片
CN113010269A (zh) * 2021-03-29 2021-06-22 深信服科技股份有限公司 一种虚拟机调度方法、装置、电子设备及可读存储介质
WO2023077436A1 (en) * 2021-11-05 2023-05-11 Nvidia Corporation Thread specialization for collaborative data transfer and computation
CN117724856A (zh) * 2024-02-08 2024-03-19 腾讯科技(深圳)有限公司 数据处理方法、装置、电子设备及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102012803A (zh) * 2010-11-25 2011-04-13 中国人民解放军国防科学技术大学 支持多宽度simd和多粒度simt的可配置矩阵寄存器单元
CN104572587A (zh) * 2014-12-23 2015-04-29 中国电子科技集团公司第三十八研究所 数据矩阵相乘的加速运算方法和装置
CN106791859A (zh) * 2015-11-24 2017-05-31 龙芯中科技术有限公司 视频编码方法和视频编码器
CN109726357A (zh) * 2017-10-27 2019-05-07 阿里巴巴集团控股有限公司 矩阵乘法计算方法和计算设备

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102012803A (zh) * 2010-11-25 2011-04-13 中国人民解放军国防科学技术大学 支持多宽度simd和多粒度simt的可配置矩阵寄存器单元
CN104572587A (zh) * 2014-12-23 2015-04-29 中国电子科技集团公司第三十八研究所 数据矩阵相乘的加速运算方法和装置
CN106791859A (zh) * 2015-11-24 2017-05-31 龙芯中科技术有限公司 视频编码方法和视频编码器
CN109726357A (zh) * 2017-10-27 2019-05-07 阿里巴巴集团控股有限公司 矩阵乘法计算方法和计算设备

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112069460A (zh) * 2020-09-18 2020-12-11 Oppo广东移动通信有限公司 数据处理方法、装置以及电子设备
CN112148437A (zh) * 2020-10-21 2020-12-29 深圳致星科技有限公司 用于联邦学习的计算任务加速处理方法、装置及设备
CN112433760A (zh) * 2020-11-27 2021-03-02 海光信息技术股份有限公司 数据排序方法和数据排序电路
CN112948758A (zh) * 2021-02-24 2021-06-11 上海商汤智能科技有限公司 数据处理方法、装置以及芯片
CN113010269A (zh) * 2021-03-29 2021-06-22 深信服科技股份有限公司 一种虚拟机调度方法、装置、电子设备及可读存储介质
CN113010269B (zh) * 2021-03-29 2024-02-23 深信服科技股份有限公司 一种虚拟机调度方法、装置、电子设备及可读存储介质
WO2023077436A1 (en) * 2021-11-05 2023-05-11 Nvidia Corporation Thread specialization for collaborative data transfer and computation
CN117724856A (zh) * 2024-02-08 2024-03-19 腾讯科技(深圳)有限公司 数据处理方法、装置、电子设备及存储介质
CN117724856B (zh) * 2024-02-08 2024-04-19 腾讯科技(深圳)有限公司 数据处理方法、装置、电子设备及存储介质

Similar Documents

Publication Publication Date Title
CN111158874A (zh) 数据处理方法和装置、电子设备及存储介质
CN107437110B (zh) 卷积神经网络的分块卷积优化方法及装置
CN108874744A (zh) 矩阵乘积累加运算的广义加速
EP2513860B1 (en) A graphics pipeline scheduling architecture utilizing performance counters
KR101136850B1 (ko) 중앙 처리 장치, 그것의 gpu 시뮬레이션 방법 그리고 그것을 포함하는 컴퓨팅 시스템
EP3295300B1 (en) System and method for determining concurrency factors for dispatch size of parallel processor kernels
CN112686379B (zh) 集成电路装置、电子设备、板卡和计算方法
US11494326B1 (en) Programmable computations in direct memory access engine
US11500962B1 (en) Emulating fine-grained sparsity in a systolic array
CN116302363B (zh) 一种虚拟机创建方法、系统、计算机设备及存储介质
CN117271136A (zh) 数据处理方法、装置、设备和存储介质
US20120154410A1 (en) Apparatus and method for processing a frame in consideration of the processing capability and power consumption of each core in a multicore environment
CN111767243A (zh) 数据处理方法、相关设备及计算机可读介质
CN110837419A (zh) 基于弹性批处理的推理引擎系统、方法及电子设备
US20160147532A1 (en) Method for handling interrupts
US11500802B1 (en) Data replication for accelerator
CN105957131A (zh) 图形处理系统及其方法
US11803736B1 (en) Fine-grained sparsity computations in systolic array
CN111767246A (zh) 数据处理方法、相关设备及计算机可读介质
US20230376562A1 (en) Integrated circuit apparatus for matrix multiplication operation, computing device, system, and method
Ramalakshmi et al. Multi-threading image processing in single-core and multi-core CPU using R language
US11625453B1 (en) Using shared data bus to support systolic array tiling
CN111858036B (zh) 基于FPGA设备的TensorFlow系统加速方法、装置、设备及存储介质
CN117851742B (zh) 数据存储方法、数据处理方法、数据存储器、数据处理器
WO2022174395A1 (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