CN115034950A - 线程构造方法及其装置 - Google Patents
线程构造方法及其装置 Download PDFInfo
- Publication number
- CN115034950A CN115034950A CN202210756644.8A CN202210756644A CN115034950A CN 115034950 A CN115034950 A CN 115034950A CN 202210756644 A CN202210756644 A CN 202210756644A CN 115034950 A CN115034950 A CN 115034950A
- Authority
- CN
- China
- Prior art keywords
- thread
- work item
- index
- template
- work
- 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
- 238000010276 construction Methods 0.000 title claims abstract description 165
- 238000012545 processing Methods 0.000 claims abstract description 49
- 238000000034 method Methods 0.000 claims abstract description 41
- 238000004364 calculation method Methods 0.000 claims description 13
- 238000000638 solvent extraction Methods 0.000 claims description 6
- 230000008569 process Effects 0.000 description 24
- 239000011295 pitch Substances 0.000 description 22
- 238000010586 diagram Methods 0.000 description 21
- 238000005516 engineering process Methods 0.000 description 5
- 125000004122 cyclic group Chemical group 0.000 description 4
- 238000013459 approach Methods 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 238000005192 partition Methods 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 1
- 230000003044 adaptive effect Effects 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5066—Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
-
- 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5017—Task decomposition
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread allocation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/509—Offload
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Processing Or Creating Images (AREA)
- General Factory Administration (AREA)
Abstract
本申请涉及一种线程构造方法及其装置。该方法包括:将工作负载划分成多个工作组;对于任一工作组,选择与所述任一工作组大小相匹配的样板类型,并在所述样板类型对应的多个候选线程构造样板中,确定目标线程构造样板;按照所述目标线程构造样板构造多个线程;所述线程包括由所述任一工作组中的多个连续工作项所组成;缓存各线程工作项序列中至少一个关键工作项对应的工作项索引,得到各线程的工作项索引;用于将对应所述线程中的任意工作项调度至负责处理所述线程的处理单元。采用本方法能够提高线程构造效率。
Description
技术领域
本申请涉及图形处理器技术领域,特别是涉及通用图形处理器基于样板的线程构造方法及其装置。
背景技术
随着科技的飞速发展,图形处理器(Graphics Processing Unit,GPU)包含大量的并行处理单元,可以通过编程,进行单指令多数据流(Single Instruction MultipleData,SIMD)的并行计算,这使得GPU不仅仅可用于图形绘制的硬件加速,更多地可以应用到通用图形处理器的并行计算中。例如,图像的滤波降噪、视频压缩、物理仿真、人工智能、科学计算等等。GPU的通用计算,称为GPGPU,全称为General Purpose Computing on GPU,随着GPU在性能上的飞速发展,利用GPU加速处理的技术逐渐成为研究热点。
然而,传统技术中的GPU硬件在构造SIMD线程的时候,线程构造单元需要专门为每个工作项一一生成索引参数,这使得线程构造单元会消耗大量的计算时间,同时需要存储每个工作项的索引参数信息,造成线程构造效率低下且占用较大的存储空间。有鉴于此,本发明提供一种基于样板的线程构造方法及其装置,能够提高线程构造效率并且能大大减少额外的存储空间。
发明内容
基于此,有必要针对上述技术问题,提供一种能够提高线程构造效率的线程构造方法及其装置。
第一方面,本申请提供了一种线程构造方法,所述方法包括:
将工作负载划分成多个工作组;
对于任一工作组,选择与所述任一工作组大小相匹配的样板类型,并在所述样板类型对应的多个候选线程构造样板中,确定目标线程构造样板;
按照所述目标线程构造样板构造多个线程;所述线程由所述任一工作组中的多个连续工作项所组成;
缓存各线程工作项序列中至少一个关键工作项对应的工作项索引,得到各线程的工作项索引;用于将对应所述线程中的任意工作项调度至负责处理所述线程的处理单元。
在其中一个实施例中,所述确定目标线程构造样板,包括:
获取各所述候选线程构造样板在计算空间中至少一个方向上的步进步距;
根据各所述步进步距和所述工作组大小,确定步进步距与所述工作组大小之间的数量关系满足预设条件的候选线程构造样板为所述目标线程构造样板。
在其中一个实施例中,所述按照目标线程构造样板构造多个线程,包括:
获取所述目标线程构造样板在计算空间中至少一个方向上的步进步距;
按照所述步进步距将所述任一工作组中的多个连续工作项构造成多个所述线程。
在其中一个实施例中,所述关键工作项为各线程中的第一个工作项,所述缓存各线程工作项序列中至少一个关键工作项对应的工作项索引,得到各线程的工作项索引,包括:
获取所述第一个工作项对应的工作组索引、局部索引和全局索引;
根据所述工作组索引、局部索引和全局索引,确定所述关键工作项对应的工作项索引;
将所述关键工作项索引缓存至缓存单元。
在其中一个实施例中,所述方法还包括:
在所述缓存单元中读取所述线程的工作项索引;
确定构造所述线程所用的线程构造样板,并根据所述线程构造样板和所述线程的工作项索引,确定出所述任意工作项对应的工作项索引;所述任意工作项对应的工作项索引用于将所述任意工作项调度至负责处理所述线程的处理单元。
在其中一个实施例中,所述确定出所述任意工作项对应的工作项索引,包括:
获取所述线程构造样板类型;
根据所述线程构造样板类型,确定所述任意工作项与所述第一个工作项之间的偏移信息;
根据所述偏移信息和所述第一个工作项对应的工作项索引,计算出所述任意工作项对应的工作项索引。
第二方面,本申请提供了一种线程构造装置,所述装置包括:
划分模块,用于将工作负载划分成多个工作组;
确定模块,用于对于任一工作组,选择与所述任一工作组的大小相匹配的样板类型,并在所述样板类型对应的多个候选线程构造样板中,确定目标线程构造样板;
构造模块,用于按照所述目标线程构造样板构造多个线程;所述线程由所述任一工作组中的多个连续工作项所组成;
缓存模块,用于缓存各线程工作项序列中至少一个关键工作项对应的工作项索引,得到各线程的工作项索引;用于将对应所述线程中的任意工作项调度至负责处理所述线程的处理单元。
在其中一个实施例中,所述确定模块,具体用于获取各所述候选线程构造样板在计算空间中至少一个方向上的步进步距;根据各所述步进步距和所述工作组大小,确定步进步距与所述工作组大小之间的数量关系满足预设条件的候选线程构造样板为所述目标线程构造样板。
在其中一个实施例中,所述构造模块,具体用于获取所述目标线程构造样板在计算空间中至少一个方向上的步进步距;按照所述步进步距将所述任一工作组中的多个连续工作项构造成多个所述线程。
在其中一个实施例中,所述关键工作项为所述关键工作项为各线程中的第一个工作项,所述缓存模块,具体用于获取所述第一个工作项对应的工作组索引、局部索引和全局索引;根据所述工作组索引、局部索引和全局索引,确定所述关键工作项对应的工作项索引;将所述关键工作项索引缓存至缓存单元。
在其中一个实施例中,所述装置还包括:读取模块,用于在所述缓存单元中读取所述线程的工作项索引;计算模块,用于确定构造所述线程所用的线程构造样板,并根据所述线程构造样板和所述线程的工作项索引,确定出所述任意工作项对应的工作项索引;所述任意工作项对应的工作项索引用于将所述任意工作项调度至负责处理所述线程的处理单元。
在其中一个实施例中,所述计算模块,具体用于获取所述线程构造样板类型;根据所述线程构造样板类型,确定所述任意工作项与所述第一个工作项之间的偏移信息;根据所述偏移信息和所述第一个工作项对应的工作项索引,计算出所述任意工作项对应的工作项索引。
上述线程构造方法和装置,通过将工作负载划分成多个工作组;并对于任一工作组,选择与所述任一工作组大小相匹配的样板类型,在所述样板类型对应的多个候选线程构造样板中,确定目标线程构造样板;接着,通过按照所述目标线程构造样板构造多个线程;所述线程由所述任一工作组中的多个连续工作项所组成;缓存各线程工作项序列中至少一个关键工作项对应的工作项索引,得到各线程的工作项索引,用于将对应所述线程中的任意工作项调度至负责处理所述线程的处理单元。如此,可以实现采用预设的线程构造样板快速地对任一工作组构造多个计算程序(Compute Shader,CS)线程,同时,只需要计算并记录下至少一个关键工作项对应的工作项索引,便可以在后续基于所采用的该线程构造样板同步推算出线程中的任意工作项对应的工作项索引,使得线程构造器在构造SIMD线程的时候,无需专门为每个工作项一一生成对应的工作项索引,减少了线程构造器的计算时间,避免占用较大的存储空间,从而提高了线程构造器的线程构造效率。
附图说明
图1A为本发明一实施例中图形处理器的全局大小的三维示意图;
图1B为本发明一实施例中图形处理器的工作组的三维示意图;
图2A为本发明一实施例中工作组的三维拆分示意图;
图2B为本发明一实施例中工作组的二维拆分示意图;
图3为本发明一实施例中的工作组拆分流程示意图;
图4为本发明一实施例中的莫顿曲线示意图;
图5为本发明一实施例中线程构造方法的流程示意图;
图6为本发明一实施例中线程构造的流程示意图;
图7为本发明一实施例中一种根据线性样板的线程构造示意图;
图8为本发明一实施例中另一种根据线性样板的线程构造示意图;
图9为本发明另一实施例中一种根据瓦片样板的线程构造示意图;
图10为本发明另一个实施例中另一种根据瓦片样板的线程构造示意图;
图11为本发明一实施例中线程构造装置;
图12为本发明另一实施例中线程构造装置;
图13为本发明一实施例中图形处理器示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
在说明书及权利要求书当中使用了“第一”、“第二”、“第三”等词语。但是,本领域技术人员应可理解,使用上述等第次序术语彼此之间并没有顺序上的先后关系,其仅仅是为了说明书描述方便而不是限定次序。
图1A为本发明一实施例中图形处理器的全局大小的三维示意图。如图1A所示,以xyz的三维空间表示一计算空间,计算空间的全局大小(Global Size),亦称之为:工作负载或工作负荷,在xyz方向分别用参数GDx,GDy,GDz表示。
图1B为本发明一实施例中图形处理器的工作组的三维示意图。如图1B所示,为图形处理器的全局大小拆分为工作组时的示意图(如图1A所示,GDx,GDy,GDz在xyz方向可以拆分为三个工作组,共包含有27个工作组。即,包含27个小六面体)。工作组(Work Group),亦称为局部大小(Local Size),在xyz方向分别用参数WDx,WDy,WDz表示。
在本发明的一实施例中,线程构造单元根据计算空间的全局大小和工作组大小,计算xyz三个方向的工作组数量(Number of Work Group,NW),其使用的公式(1)为:
(NWx,NWy,NWz)=(Ceil(GDx/WDx),Ceil(GDy/WDy),Ceil(GDz/WDz)) (1)
其中,NWx,NWy,NWz分别表示计算空间的全局大小按照工作组在xyz方向能拆分的工作组数量。函数Ceil表示余数上取整。当全局大小能够整除工作组大小时,则表示此时全局大小可以划分为整数个完整的工作组。但是,当全局大小不能整除工作组大小时,则表示此时全局大小将会构造出部分完整的工作组和部分不完整的工作组,将部分不完整的工作组称作剩余工作组(Remainder Work Group)。
举例来说,工作组的三维大小(WDx,WDy,WDz)为(8,8,4),全局大小(GDx,GDy,GDz)为(20,20,6),根据公式(1)则生成总工作组数量为(3,3,2),即20/8余数上取整为3,6/4余数上取整为2。完整工作组的大小为(8,8,4),剩余工作组的大小可能为(4,8,4),(8,4,4),(4,4,4),(8,8,2),(4,8,2),(8,4,2),(4,4,2)。
图2A为本发明一实施例中工作组的三维拆分示意图。如图2A所示,线程构造单元可以将工作组按照三维结构进行拆分,将z方向的全局大小分割为N层,其中N为大于0的整数。即,图2A中黑色箭头所示的z方向全局大小分割为3层。
图2B为本发明一实施例中工作组的二维拆分示意图。如图2B所示,为z方向某一层,对该层的xy二维方向进行拆分,该z层完成拆分后再拆分下一z层。每层的二维空间,先拆分x方向,再拆分y方向,即如图中黑色箭头所示的顺序执行拆分。
此处应说明的是,在图1B中的描述部分,用参数(WDx,WDy,WDz)表示为工作组的三维大小。同样,在图2B的绘示中,也相应的示出单个工作组在三维方向的大小分别为WDx,WDy,WDz。但是,因为在图2B所述的工作组拆分的工作中,是按照先拆分x方向,再拆分y方向的顺序进行。所以,在拆分结果中可能会存在每层最后拆分出的工作组为剩余工作组,而并不是完整工作组的大小。图2B中将最后一个工作组标示为WDx,WDy,WDz只是为了方便理解拆分原理,并不表示拆分后的工作组都为完整工作组。本领域技术人员应可理解,工作组按照三维结构进行拆分后,可能会拆分出剩余工作组,本发明并不限制于此。
此处还要说明的是,在图1A、图2A和图2B的绘示过程中,全局大小及工作组拆分的二维示意图,在xyz方向都取拆分成3。但是,本领域技术人员应可理解,图1A、图2A和图2B只是为了图示绘示方便,并不是表示全局大小在xyz方向应拆分为3和/或在xyz方向应拆分为相同的份数。换句话说,在全局大小拆分为工作组时,可以在xyz方向上分别拆分为大于0的任意的整数个。
图3为本发明一实施例中的工作组拆分流程示意图。如图3所示,在步骤S310中,通过公式(1),计算工作组的数量;xyz方向的步进步距Span=(WDx,WDy,WDz);工作组索引初始化为0。
在后续的介绍中,关于xyz方向的步进步距Span会采用不同的简称来描述。例如:会直接采用步进步距Spanx表示x方向的步进步距,也可能会采用WDx表示x方向的步进步距。上述的步进步距会随着使用习惯的不同而不同。或者,上述的步进步距还可以使用其他不同的名词替代(例如:步长Stride)。
在公式(1)部分,已经介绍线程构造单元根据计算空间的全局大小和工作组大小,计算xyz三个方向的工作组数量NW,请参考相关内容部分,在此不累述。
步进步距Span=(WDx,WDy,WDz)的大小即预先设定的工作组大小;如图1B所示的,工作组在xyz三维方向上的大小为WDx,WDy,WDz。
此处应说明的是,该步进步距Span=(WDx,WDy,WDz)预先设定的为完整工作组大小,并不是剩余工作组的大小。换句话说,剩余工作组并不是预先设定的,而是在将计算空间的全局大小按照预先设定的完整工作组进行拆分后剩余的不完整的工作组大小。
线程构造单元根据预先设置的SIMD模式,将工作组可以创建为复数个线程;其中SIMD可以为32或64或其他。如果一个线程定义为SIMD32,其包括32个工作项(Work Item)。如果一个线程定义为SIMD64,则其就包括64个工作项。
对于每个工作项,线程构造单元需要计算及存储相应的参数:
第一参数为:工作组索引(Work Group ID),即该工作项所属于的工作组的索引,使用三元组:Wid=(Widx,Widy,Widz)表示。
第二参数为:局部索引(Local ID),即该工作项在当前工作组的索引,使用三元组:Lid=(Lidx,Lidy,Lidz)表示。
第三参数为:全局索引(Global ID),即该工作项在全局空间的索引,使用三元组:Gid=(Gidx,Gidy,Gidz)。全局索引可用公式(2)计算得到:
Gid=(Gidx,Gidy,Gidz)=
(Fx+Widx*WDx+Lidx,Fy+Widy*WDy+Lidy,Fz+Widz*WDz+Lidz)(2)
其中。Fx,Fy,Fz为全局空间的偏移(Global Offset)。关于全局空间偏移的详细介绍将在构造剩余工作组内容部分做详细介绍,在此不详述。
上述将工作组索引初始化为0,即将第一参数工作组索引三元组:Wid=(Widx,Widy,Widz)初始化为0。
此处补充说明一点,GPU执行时,上述第一、第二和第三参数需要预先保存至硬件缓存中,待程序指令用到上述参数时,再读出使用。但是,每一工作项都要存储上述参数,一个SIMD32线程需要存储32个工作项参数。当GPU芯片允许32个线程同时执行时,则需要存储32*32个工作项参数(即,第一、第二和第三参数),将会极大消耗硬件缓存空间。如果是SIMD64线程,则将会消耗更大的缓存空间。
接着,在步骤S312中,判断z方向循环拆分是否结束。如果z方向循环拆分结束,表示整个计算空间的全局大小已拆分结束,则进入步骤S314,拆分结束。如果z方向循环拆分未结束,则进入步骤S316。
接着,在步骤S316中,判断y方向循环拆分是否结束。如果y方向循环拆分结束,则进入步骤S318,工作组索引Widx=0,Widy=0,Widz++;z方向步进步距Span=WDz;同时,返回步骤S312继续执行。如果y方向循环拆分未结束,则进入步骤S320。
接着,在步骤S320中,判断x方向循环拆分是否结束。如果x方向循环拆分结束,则进入步骤S322,工作组索引Widx=0,Widy++;y方向步进步距Span=WDy;同时,返回步骤S316继续执行。如果x方向循环拆分未结束,则进入步骤S324。
在步骤S324中,记录当前工作组索引Wid;计算当前工作组大小Wgd。
在本发明的一实施例中,根据公式(3)计算当前工作组大小Wgd。如果是边沿的工作组,可能是剩余工作组,会小于完整工作组大小。
接着,在步骤S326中,工作组索引Widx++;x方向步进步距Span=WDx;同时,返回步骤S320继续执行。
在步骤S324之后,还要执行步骤S328,即把第一参数工作组索引Wid及当前工作组大小Wgd传递到下一模块,构造线程。至此,工作组拆分流程结束,即将进入线程构造流程。
关于上述步骤S324中计算当前工作组大小Wgd与工作组大小WDx,WDy,WDz的说明,工作组大小WDx,WDy,WDz指预先设定的工作组大小。即,完整工作组大小。而当前工作组大小Wgd指的是经过工作组拆分之后的工作组大小。即,当前工作组大小Wgd可能是预先设定的工作组大小WDx,WDy,WDz,也可能是剩余工作组的大小(例如:处于边沿的工作组大小)。此部分内容,请参考公式(1)的举例说明及公式(3),在此就不详述。
在详细介绍基于样板的线程构造方法之前,需要补充说明线性样板(LinearPattern)及瓦片样版(Tile Pattern)。
线程,是指可以在GPU执行单元或称之为:处理单元(Execution Unit,EU)上运行的最小单位,一般称为硬件线程(HW thread)。如果一个线程定义为SIMD32,即包括32个工作项。样板(Pattern)也可以表示为一个三元组,这样可以和工作组的拆分类似,来构造线程。对于SIMD32,那么可能的样板可以表示为:
32x1x1,8x4x1,4x8x1,16x2x1,2x16x1,
16x1x2,1x16x2,8x2x2,2x8x2,4x4x2,
8x1x4,1x8x4,4x2x4,2x4x4,
4x1x8,1x4x8,2x2x8,
2x1x16,1x2x16,
1x1x32。
为了简化硬件实现,我们仅考虑最常用的情况,选择32x1x1和8x4x1两种常用的样板,分别称作线性样板和瓦片样板。类似的,SIMD64的线程,可以构造为64x1x1的线性样板和8x8x1的瓦片样板。
其中,线性样板的三维向量可以表示为32x1x1(For SIMD32)或者64x1x1(ForSIMD64),主要用于工作组为Mx1x1的形式,这里M向量一般为32为或者64的倍数,或者余数较大,这样每个工作组可以创建为Ceil(M/SIMD)个线程,SIMD可以为32或者64,最后一个线程可能不满,为剩余线程(Remainder Thread)。
在线性样板下,对于构造的SIMD32的线程,其工作项序列中的工作项的顺序为0~31,如表1所示:
0 | 1 | 2 | 3 | …… | 28 | 29 | 30 | 31 |
表1SIMD32的线性样板的工作项序列
在线性样板下,对于构造的SIMD64的线程,其工作项序列中的工作项的顺序为0~63,如表2所示:
0 | 1 | 2 | 3 | …… | 60 | 61 | 62 | 63 |
表2SIMD64的线性样板的工作项序列
采用不同的线程构造样板构造的线程,该线程则具有不同的索引偏移表:举例来说,针对512x1x1的工作组,可以创建出16个SIMD32的线程,或者8个SIMD64的线程。
它们的索引偏移表分别为表3、表4,这将用于计算工作项的第二参数Local ID和第三参数Global ID:
0/0/0 | 1/0/0 | 2/0/0 | 3/0/0 | …… | 28/0/0 | 29/0/0 | 30/0/0 | 31/0/0 |
表3SIMD32线性样板的索引偏移表
0/0/0 | 1/0/0 | 2/0/0 | 3/0/0 | …… | 60/0/0 | 61/0/0 | 62/0/0 | 63/0/0 |
表4SIMD64线性样板的索引偏移表
如此,若已知线程中的第一个工作项的局部索引Lid0和全局索引Gid0,那么就可以利用上述的索引偏移表,计算出线程中的其他工作项的局部索引Lidi和全局索引Gidi。
其中,其他工作项的局部索引Lidi和全局索引Gidi可以表示为:
Lidi=Lid0+offi;
Gidi=Gid0+offi;
其中,i=0…31/63,offi为表3、表4中的偏移三元组。
瓦片样板的三维大小为8x4x1(for SIMD32)或者8x8x1(for SIMD64),主要用于工作组为MxNx1的形式,这里M和N一般为8的倍数,这样每个工作组可以创建为Ceil(M/8)*Ceil(N/p)个线程,p可以为4或者8,边沿上的线程可能不满,为剩余线程(RemainderThread)。
例如32x16x1的工作组,可以创建出16个SIMD32线程,或者8个SIMD64线程。这种瓦片样板,常用于多个二维图像,或者三维图像的读写,只要图像的长宽是8的倍数,就可以方便地构造成瓦片的线程。但是对于1xMxN形式的工作组,瓦片样板的方法不适合,因为这样会导致每个线程平均只能处理1个工作项,造成资源的浪费。对于这种的工作组,我们也还是使用传统的方法,对每个工作项单独处理,把z方向的多个工作项放置到一个线程中。
由于图像的数据,经常按照莫顿曲线(Morton Curve)组织,也叫Z顺序曲线(Z-order curve),见图4中的箭头所示。
按照莫顿曲线位置组织的像素的颜色等信息紧密排列,容易落在同一个缓存地址上。这样,如果工作项也按照莫顿曲线组织排列到一个线程中,那么进行读写图像的数据时候,容易命中(hit)/丢失(miss)在同一个缓存地址,大大提高了缓存(cache)的利用率。这就是瓦片样板对图像读写的优势。关于莫顿曲线组织应属于本领域技术人员的习知技术,在此并不对此做详细介绍。
在瓦片样板下,SIMD32的32个工作项的按照莫顿曲线,得到一个8x4的工作项序列的顺序如表5:
0 | 1 | 4 | 5 | 16 | 17 | 20 | 21 |
2 | 3 | 6 | 7 | 18 | 19 | 22 | 23 |
8 | 9 | 12 | 13 | 24 | 25 | 28 | 29 |
10 | 11 | 14 | 15 | 26 | 27 | 30 | 31 |
表5SIMD32的瓦片样板的工作项序列
在瓦片样板下,SIMD64的64个工作项的按照莫顿曲线,得到一个8x8的工作项序列的顺序如表6:
0 | 1 | 4 | 5 | 16 | 17 | 20 | 21 |
2 | 3 | 6 | 7 | 18 | 19 | 22 | 23 |
8 | 9 | 12 | 13 | 24 | 25 | 28 | 29 |
10 | 11 | 14 | 15 | 26 | 27 | 30 | 31 |
32 | 33 | 36 | 37 | 48 | 49 | 52 | 53 |
34 | 35 | 38 | 39 | 50 | 51 | 54 | 55 |
40 | 41 | 44 | 45 | 56 | 57 | 60 | 61 |
42 | 43 | 46 | 47 | 58 | 59 | 62 | 63 |
表6SIMD64的瓦片样板的工作项序列
它们的索引偏移为表7、表8,这将用于计算所有工作项的第二参数Local ID和第三参数Global ID:
在瓦片样板下,SIMD32的32个工作项的索引偏移表为:
0/0/0 | 1/0/0 | 2/0/0 | 3/0/0 | 4/0/0 | 5/0/0 | 6/0/0 | 7/0/0 |
0/1/0 | 1/1/0 | 2/1/0 | 3/1/0 | 4/1/0 | 5/1/0 | 6/1/0 | 7/1/0 |
0/2/0 | 1/2/0 | 2/2/0 | 3/2/0 | 4/2/0 | 5/2/0 | 6/2/0 | 7/2/0 |
0/3/0 | 1/3/0 | 2/3/0 | 3/3/0 | 4/3/0 | 5/3/0 | 6/3/0 | 7/3/0 |
表7SIMD32瓦片样板的索引偏移表在瓦片样板下,SIMD64的64个工作项的索引偏移表为:
0/0/0 | 1/0/0 | 2/0/0 | 3/0/0 | 4/0/0 | 5/0/0 | 6/0/0 | 7/0/0 |
0/1/0 | 1/1/0 | 2/1/0 | 3/1/0 | 4/1/0 | 5/1/0 | 6/1/0 | 7/1/0 |
0/2/0 | 1/2/0 | 2/2/0 | 3/2/0 | 4/2/0 | 5/2/0 | 6/2/0 | 7/2/0 |
0/3/0 | 1/3/0 | 2/3/0 | 3/3/0 | 4/3/0 | 5/3/0 | 6/3/0 | 7/3/0 |
0/4/0 | 1/4/0 | 2/4/0 | 3/4/0 | 4/4/0 | 5/4/0 | 6/4/0 | 7/4/0 |
0/5/0 | 1/5/0 | 2/5/0 | 3/5/0 | 4/5/0 | 5/5/0 | 6/5/0 | 7/5/0 |
0/6/0 | 1/6/0 | 2/6/0 | 3/6/0 | 4/6/0 | 5/6/0 | 6/6/0 | 7/6/0 |
0/7/0 | 1/7/0 | 2/7/0 | 3/7/0 | 4/7/0 | 5/7/0 | 6/7/0 | 7/7/0 |
表8SIMD64瓦片样板的索引偏移表
与上述的线性样板一样,如果已知第一个工作项的局部索引Lid0和全局索引Gid0,那么其他的工作项的局部索引Lidi和全局索引Gidi分别表示为
Lidi=Lid0+offi;
Gidi=Gid0+offi;
其中,i=0…31/63,offi为表7、表8中的偏移三元组。
图5为本发明一实施例中线程构造方法的流程示意图。如图5所示,在步骤S510,将工作负载划分成多个工作组。
其中,工作负载可以是指与当前计算任务对应的工作量。
具体实现中,将图形处理器负责构造计算程序(Compute Shader,CS)线程的模块称为CS线程构造器(CS Thread Constructor,CSTC),分为两部分,第一部分是CS工作组的拆分,第二部分是对每个工作组构造CS线程。
CS线程构造器在执行CS工作组的拆分时,CS线程构造器可以按照预设的工作组拆分顺序将工作负载划分成多个工作组。关于如何将工作负载拆分为工作组可以参考上述图1至图3部分所述,在此不累述。
接着,在步骤S520,对于任一工作组,选择与任一工作组大小相匹配的样板类型,并在样板类型对应的多个候选线程构造样板中,确定目标线程构造样板。
接着,在步骤S530,按照目标线程构造样板构造多个线程。该线程由任一工作组中的多个连续工作项所组成。
其中,样板类型包括线性样板和瓦片样板。
具体实现中,对于任一工作组,CS线程构造器可以选择与任一工作组大小相匹配的样板类型。具体来说,CS线程构造器可以根据该任一工作组大小,判断是否可以使用线性样板为该任一工作组构建CS线程。
若该任一工作组可以使用线性样板构建CS线程,CS线程构造器则在该线性样板对应的多个候选线程构造样板(例如,32x1x1,8x1x1,4x1x1,16x1x1,2x1x1等线性样板所对应的线程构造样板)中,确定目标线程构造样板。然后,CS线程构造器按照该目标线程构造样板,为任一工作组构造多个线程。
若该任一工作组不可以使用线性样板构建CS线程,CS线程构造器则判断该任一工作组是否可以使用瓦片样板构建CS线程;若该任一工作组可以使用瓦片样板构建CS线程,CS线程构造器则在该瓦片样板对应的多个候选线程构造样板(例如,8x4x1,4x8x1,16x2x1,2x16x1,8x8x1等瓦片样板所对应的线程构造样板)中,确定目标线程构造样板。
CS线程构造器在确定针对该任一工作组的目标线程构造样板后,CS线程构造器则可以按照所述目标线程构造样板构造多个线程。其中,每个线程是由所述任一工作组中的多个连续工作项所组成的。具体来说,CS线程构造器可以按照该目标线程构造样板对应的划分方式,对任一工作组中的工作项进行划分,得到多个线程。
接着,在步骤S540,缓存各线程的工作项序列中至少一个关键工作项对应的工作项索引,得到各线程的工作项索引;用于将对应线程中的任意工作项调度至负责处理线程的处理单元。
上述关键工作项可以是指已知线程中的第一个工作项。还可以是指线程包括的任一工作组中的多个连续工作项的任一已知工作项索引的工作项(换句话说,已将工作项索引存储至缓存空间的工作项)。也就是说,该工作项的工作项索引可以按照偏移表及索引计算公式推出其他工作项索引,则该工作项就可以定义为关键工作项。
当CS线程构造器完成对任一工作组中的多个工作项进行划分并得到对应的线程后,CS线程构造器则可以存储该线程的第一个工作项的参数信息(即关键工作项索引参数),以获得该线程的工作项索引。。当然,CS线程构造器也可以存储该线程包括的多个连续工作项中的任一个工作项对应的工作项索引至缓存空间,以获得该线程的工作项索引。
如此,图形处理器可以根据线程的工作项索引将该线程中的任意工作项调度至负责处理该线程的处理单元。具体来说,图形处理器可以利用该线程对应的工作项索引可以按照偏移表及索引计算公式推出其他工作项索引,该其他工作项索引可以是指该线程中的任意工作项对应的工作项索引,进而图形处理器可以基于任意工作项对应的工作项索引,将该任意工作项调度至负责处理线程的处理单元。
上述线程构造方法中,将工作负载划分成多个工作组;并对于任一工作组,选择与所述任一工作组大小相匹配的样板类型,在所述样板类型对应的多个候选线程构造样板中,确定目标线程构造样板;接着,通过按照所述目标线程构造样板构造多个线程;所述线程由所述任一工作组中的多个连续工作项所组成;缓存各线程工作项序列中至少一个关键工作项对应的工作项索引,得到各线程的工作项索引,用于将对应所述线程中的任意工作项调度至负责处理所述线程的处理单元。如此,可以实现采用预设的线程构造样板快速地对任一工作组构造多个计算程序(Compute Shader,CS)线程,同时,只需要计算并记录下至少一个关键工作项对应的工作项索引,便可以在后续基于所采用的该线程构造样板同步推算出线程中的任意工作项对应的工作项索引,使得线程构造器在构造SIMD线程的时候,无需专门为每个工作项一一生成对应的工作项索引,减少了线程构造器的计算时间,避免占用较大的存储空间,从而提高了线程构造器的线程构造效率。
图6为本发明一实施例中线程构造的流程示意图。如图6所示,在步骤S610中,将全局大小根据预先定义的工作组大小,选择合适的样板类型。
接着,在步骤S612中,判断全局大小是否满足线性样板。如果判断为“是”,则进入步骤S614,设定步进步距为:SIMD32:Span=(32,1,1)或SIMD64:Span=(64,1,1),并进入步骤S622。
如果判断为“否”,则进入步骤S616,继续判断全局大小是否满足瓦片样板。
如果继续判断为“否”,全局大小不满足瓦片样板,则进入步骤S618,使用传统方法构造线程。即,全局大小既不满足线性样板又不满足瓦片样板,故不采用基于样板的线程构造方法。
如果判断为“是”,则进入步骤S620,设定步进步距为:SIMD32:Span=(8,4,1)或SIMD64:Span=(8,8,1),并进入步骤S622。
接着,在步骤S622,根据输入的当前工作组大小Wgd和步进步距(所采用的样板的步进步距)Span,拆分CS线程;线程索引初始化为0;Tid=(0,0,0)。
接着,在步骤S624中,对工作组的计算空间的z方向进行循环拆分,如果z方向循环拆分结束,那么进入步骤S626,线程构造结束。
接着,如果z方向循环拆分未结束,则继续进入步骤S628,再对y方向进行循环拆分。
如果y方向循环拆分结束,那么进入步骤S630,设置当前的线程索引Tidx=0,Tidy=0,Tidz++;z方向的步进大小为Spanz(例如:线性样板和瓦片样板Spanz均为“1”),并返回步骤S624继续执行下一个z方向的拆分。
如果y方向循环拆分未结束,则继续进入步骤S630,再对x方向进行循环拆分。
如果x方向进行循环拆分结束,那么进入步骤S632,设置当前的线程索引Tidx=0,Tidy++;步进大小为Spany(例如:线性样板SIMD32和SIMD64步进步距Spany均为“1”;而瓦片样板SIMD32步进步距Spany为“4”,SIMD64步进步距Spany为“8”),并返回步骤S628继续执行下一个y方向的拆分。
如果x方向进行循环拆分未结束,则进入步骤S634,记录当前线程索引Tid=(Tidx,Tidy,Tidz);计算当前线程的第一个工作项的索引参数信息。其中,图形处理器可以获取各线程第一个工作项对应的工作组索引、局部索引和全局索引;根据工作组索引、局部索引和全局索引,确定各线程器工作项的工作项索引。
接着,进入步骤S636,把线程索引Tid等信息记录到缓存中,用于后面的指令计算。设置当前的线程索引Tidx++;步进步距为Spanx;并返回至步骤S630,继续进行下一个x方向的拆分。
图6所示的基于样板的线程构造流程中,将全局大小根据预先定义的工作组大小,选择合适的样板类型时,在步骤S612中先执行判断工作组是否满足线性样板,如不满足线性样板,则继续在步骤S616中判断是否满足瓦片样板。此处应指出的是,上述步骤S612和S616其实并无先后顺序关系。换句话说,也可以是优先判断是否满足瓦片样板,如不满足,再继续判断是否满足线性样板。或者,也可以将步骤S612和S616同时执行,即同时判断是否满足线性样板或瓦片样板。
还要说明一点,在步骤S614和S620中示例性的给出了步进步距Span,该步进步距Span可以随计算机硬件资源而配置,本发明并不限制于此。
在另一个实施例中,按照不同候选线程构造样板进行工作组拆分并构造线程时,其步进步距随不同候选线程构造样板不同而不同。上述步骤S612判断工作组是否满足线性样板和步骤S616判断是否满足瓦片样板,可以设置为判断工作组大小与不同候选线程构造样板对应的步进步距之间的数量关系是否满足预设条件;选择满足预设条件候选线程构造样板作为目标线程构造样板。
关于上述的预设条件,将在图7至图10部分根据实例详细描述,请参考相关内容部分,在此不累述。
具体实现中,图形处理器对于任一工作组,确定针对任一工作组的线程构造样板的过程中,图形处理器可以获取任一工作组在计算空间中至少一个方向上的工作组大小;根据各工作组大小,在预设的至少一个候选线程构造样板中,确定针对任一工作组的线程构造样板。其中,图形处理器可以获取至少一个候选线程构造样板在各方向上的步进步距;根据各步进步距和工作组大小,以使对应的步进步距与工作组大小之间具有相适配的维度。例如,图形处理器可以确定与该工作组大小对应的维度相适的样板类型(线性样板和瓦片样板);然后,图形处理器可以在该样板类型对应的多个候选线程构造样板中确定目标划分样板。最后,图形处理器可以将目标划分样板对应的候选线程构造样板,作为针对任一工作组的线程构造样板。
举例来说,已知工作组W的大小为512x1x1,各候选线程构造样板包括候选线程构造样板A(64,1,1)、候选线程构造样板B(32,1,1)、候选线程构造样板C(32,16,1);可以看出,工作组W的大小在y与z方向均为“1”且在x方向满足线性样板的倍数或者余数较大的条件,图形处理器则确定该工作组W可以采用线性样板进行线程构造。图形处理器则在线性样板(如,候选线程构造样板A和候选线程构造样板B)中,确定该工作组W的线程构造样板。实际应用中,图形处理器可以根据SIMD类型,在候选线程构造样板A和候选线程构造样板B中,选择目标候选线程构造样板作为该工作组W的线程构造样板。
实际应用中,由于大部分应用程序使用的工作组大小比较规整,可以定义一些样板类型的选择标准,以提高EU(处理单元)的利用率。
每个CS线程的SIMD是由驱动预先设定,可能为SIMD32或者SIMD64,如果工作组大小为(WDx,WDy,WDz),
首先图形处理器检查是否可以使用线性样板:具体来说,如果工作组WDx能被32(for SIMD32)或者64(for SIMD64)整除,那么可以使用线性样板:
如果不能整除,那么检查余数部分,如果能够超过线程大小的一半(16for SIMD32or 32for SIMD64),那么可以使用线性样板,每个x方向的最后的CS线程是不满的,称为剩余线程(Remainder Thread)。
创建的线程总数量为Ceil(WDx/p)*WDy*WDz,这里p为32或者64。
以SIMD32为例,对于512x1x1的工作组,可以使用32x1x1的线性样板,创建出16个SIMD32的CS线程,每个线程正好包含32个工作项,如图7所示,该创建过程只需要执行16次循环即可,避免了对每个工作项的单独计算。
如果工作组大小为500x1x1,500%32=20,余数大于16,如图8所示,可以使用线性样板,那么总共创建的线程数量为:Ceil(500/32)*1*1=16,前面15个CS线程每个均包含32个工作项,但是最后一个线程只有20个工作项,为剩余线程。
若工作组大小不满足线性样板,那么再测试是否可以使用瓦片样板;
具体来说,以SIMD32为例,例如32x16x1的工作组,如图9所示,由于工作组WDx和WDy均能被8整除,那么可以使用瓦片样板8x4x1,生成的所有CS线程均包括有32个工作项,该步骤只需要执行16次即可,避免了对每个工作项的执行。
如果不能整除,那么检查剩余的部分,对于SIMD32的线程,如果WDx/8的余数大于4,并且WDy/4的余数大于2;对于SIMD64的线程,如果WDx/8和WDy/8的余数均大于4,那么可以使用瓦片样板,每行或者每列的最后的线程可能是不满的,即每行或者每列的最后的线程中的工作项的数量小于其他线程中的工作项的数量。
举例来说,已知工作组大小为30x15x1,因为30%8=6>4,15%4=3>2,,如图10所示,也可以使用瓦片样板8x4x1,将会创建16个CS线程:Ceil(30/8)*Ceil(15/4)*1=16。但是靠近xy边缘的7个线程均不能装载满,为剩余线程。
其中,关键工作项为各线程工作项序列中的第一个工作项,记录各线程中至少一个关键工作项对应的工作项索引,包括:获取第一个工作项对应的工作组索引、局部索引和全局索引;根据工作组索引、局部索引和全局索引,确定关键工作项对应的工作项索引;将关键工作项对应的工作项索引缓存至缓存单元。
在另一个实施例中,方法还包括:在缓存单元中读取线程的工作项索引;确定构造线程所用的线程构造样板,并根据线程构造样板和线程的工作项索引,确定出任意工作项对应的工作项索引;任意工作项对应的工作项索引用于将任意工作项调度至负责处理线程的处理单元。
其中,任意工作项可以是指线程的该工作项序列中的所有工作项,也可以是指工作项序列中的至少一个工作项。
具体实现中,图形处理器在缓存单元中读取线程的工作项索引,并基于构造该线程所用的线程构造样板;然后,图形处理器可以根据线程构造样板和工作项索引,确定出任意工作项对应的工作项索引。具体来说,图形处理器可以根据线程构造样板,确定出该任意工作项与该线程中关键工作项之间的索引偏移;然后,图形处理器可以基于该索引偏移和关键工作项的工作项索引,推出该任意工作项对应的工作项索引。图形处理器可以在后续基于该任意工作项对应的工作项索引,将该任意工作项调度至负责处理线程的处理单元,从而对该任意工作项进行通用计算。
本实施例的技术方案,只需要利用该线程的工作项索引即线程中关键工作项对应的工作项索引,便可以在后续基于所采用的该线程构造样板同步推算出线程中的任意工作项对应的工作项索引,使得线程构造器在构造SIMD线程的时候,无需专门为每个工作项一一生成对应的工作项索引,减少了线程构造器的计算时间。
在另一个实施例中,确定出任意工作项对应的工作项索引,包括:获取线程构造样板类型;根据线程构造样板类型,确定任意工作项与第一个工作项之间的偏移信息;根据偏移信息和第一个工作项对应的工作项索引,计算出任意工作项对应的工作项索引。
其中,偏移表信息可以是指任意工作项与第一个工作项之间的索引偏移对应的信息。实际应用中,可以将任意工作项与第一个工作项之间的索引偏移信息记录至该第一个工作项对应的索引偏移表中。如此,图形处理器在后续可以基于该索引偏移表,快速地确定出任意工作项与第一个工作项之间的索引偏移信息。
具体实现中,图形处理器在确定出任意工作项对应的工作项索引的过程中,图形处理器可以获取线程构造样板对应的偏移表信息。具体来说,图形处理器可以获取线程构造样板类型(即目标线程构造样板的样板类型);然后,根据该线程构造样板类型,确定任意工作项与第一个工作项之间的偏移信息。具体来说,图形处理器可以获取与该线程构造样板类型对应的索引偏移表,并基于该索引偏移表确定任意工作项与第一个工作项之间的偏移信息;图形处理器再根据偏移信息和第一个工作项对应的工作项索引,计算出任意工作项对应的工作项索引。
需要说明的是,图形处理器基于该索引偏移表确定任意工作项与第一个工作项之间的偏移信息;图形处理器再根据偏移信息和第一个工作项对应的工作项索引,计算出任意工作项对应的工作项索引的具体过程,可以参考上述表3、表4、表7和表8部分所述,在此不累述。
图11为本发明一实施例中线程构造装置。如图11所示,其特征在于,线程构造器1100包括:控制单元1110和样板线程构造单元1120,其中;
控制单元1110,被配置为执行将工作负载划分成多个工作组;对于任一工作组,选择与所述任一工作组大小相匹配的样板类型,并在所述样板类型对应的多个候选线程构造样板中,确定目标线程构造样板;
样板线程构造单元1120,被配置为执行按照所述目标线程构造样板构造多个线程;所述线程由所述任一工作组中的多个连续工作项所组成;
样板线程构造单元1120,还被配置为执行缓存各所述线程的工作项序列中至少一个关键工作项对应的工作项索引至外部模块ILD(input Load),得到各线程的工作项索引;其用于将对应线程中的任意工作项调度至负责处理线程的处理单元。
在另一个实施例中,样板线程构造单元1120包括:样板线程步进子单元1121和样板线程构造子单元1122,其中;
样板线程步进子单元1121,被配置为执行获取线程构造样板对应的至少一个方向上的步进步距;
样板线程构造子单元1122,被配置为执行按照步进步距将任一工作组中的多个连续工作项,构造成多个线程。
需要说明的是,上述线程构造器的具体限定可以参见上文对一种线程构造方法的具体限定,在此不再赘述。
图12为本发明一实施例中线程构造装置。如图12所示,提供了一种线程构造装置,包括:
划分模块1210,用于将工作负载划分成多个工作组;
确定模块1220,用于对于任一工作组,选择与所述任一工作组大小相匹配的样板类型,并在所述样板类型对应的多个候选线程构造样板中,确定目标线程构造样板;
构造模块1230,用于按照所述目标线程构造样板构造多个线程;所述线程由所述任一工作组中的多个连续工作项所组成;
缓存模块1240,用于缓存各线程工作项序列中至少一个关键工作项对应的工作项索引,得到各线程的工作项索引;所述工作项索引用于将对应所述线程中的任意工作项调度至负责处理所述线程的处理单元。
在其中一个实施例中,所述确定模块1220,具体用于获取各所述候选线程构造样板在计算空间中至少一个方向上的步进步距;根据各所述步进步距和所述工作组大小,确定步进步距与所述工作组大小之间的数量关系满足预设条件的候选线程构造样板为所述目标线程构造样板。
在其中一个实施例中,所述构造模块1230,具体用于获取所述目标线程构造样板在计算空间中至少一个方向上的步进步距;按照所述步进步距将所述任一工作组中的多个连续工作项构造成多个所述线程。
在其中一个实施例中,所述关键工作项为所述关键工作项为各线程中的第一个工作项,所述缓存模块1240,具体用于获取所述第一个工作项对应的工作组索引、局部索引和全局索引;根据所述工作组索引、局部索引和全局索引,确定所述关键工作项对应的工作项索引;将所述关键工作项索引缓存至缓存单元。
在其中一个实施例中,所述装置还包括:读取模块,用于在所述缓存单元中读取所述线程的工作项索引;计算模块,用于确定构造所述线程所用的线程构造样板,并根据所述线程构造样板和所述线程的工作项索引,确定出所述任意工作项对应的工作项索引;所述任意工作项对应的工作项索引用于将所述任意工作项调度至负责处理所述线程的处理单元。
在其中一个实施例中,所述计算模块,具体用于获取所述线程构造样板类型;根据所述线程构造样板类型,确定所述任意工作项与所述第一个工作项之间的偏移信息;根据所述偏移信息和所述第一个工作项对应的工作项索引,计算出所述任意工作项对应的工作项索引。
上述线程构造装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
图13为本发明一实施例中图形处理器示意图。如图13所示,该图形处理器包括外部模块(ILD)、线程构造器(CSTC)和执行模块;其中,线程构造器包括配置寄存器、控制单元、传统线程构造单元、样板线程构造单元;其中,样板线程构造模块包括样板线程步进子单元和样板线程构造子单元:
其中,配置寄存器用于存储一些信息帮助CS线程构造,包括SIMD32/64,样板模式,全局大小,局部大小等;
其中,控制单元,用于接收输入数据,分发任务,判断并应用样板模式等;
传统线程构造单元,用于采用传统技术的线程构造方式,对每个工作项逐步构造;
样板线程步进子单元,用于确定样板某个方向的步进,用于基于样板的线程构造;
样板线程构造子单元,用于基于样板的线程构造单元,支持线性样板和瓦片样板两种;
外部模块(ILD),用于记录线程项信息,在shader执行的时候调用;
执行模块(处理单元),用于处理所有的线程,执行相应的shader。
应该理解的是,虽然如上所述的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上所述的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
基于同样的发明构思,本申请实施例提供的一种用于实现上述所涉及的线程构造方法的线程构造装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故所提供的一个或多个线程构造装置实施例中的具体限定可以参见上文中对于线程构造方法的限定,在此不再赘述。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。
Claims (12)
1.一种线程构造方法,其特征在于,所述方法包括:
将工作负载划分成多个工作组;
对于任一工作组,选择与所述任一工作组大小相匹配的样板类型,并在所述样板类型对应的多个候选线程构造样板中,确定目标线程构造样板;
按照所述目标线程构造样板构造多个线程;所述线程由所述任一工作组中的多个连续工作项所组成;
缓存各所述线程的工作项序列中至少一个关键工作项对应的工作项索引,得到各所述线程的工作项索引;用于将对应所述线程中的任意工作项调度至负责处理所述线程的处理单元。
2.根据权利要求1所述的方法,其特征在于,所述确定目标线程构造样板,包括:
获取各所述候选线程构造样板在计算空间中至少一个方向上的步进步距;
根据各所述步进步距和所述工作组大小,确定步进步距与所述工作组大小之间的数量关系满足预设条件的候选线程构造样板为所述目标线程构造样板。
3.根据权利要求1所述的方法,其特征在于,所述按照目标线程构造样板构造多个线程,包括:
获取所述目标线程构造样板在计算空间中至少一个方向上的步进步距;
按照所述步进步距将所述任一工作组中的多个连续工作项构造成多个所述线程。
4.根据权利要求1所述的方法,其特征在于,所述关键工作项为各线程中的第一个工作项,所述缓存各线程工作项序列中至少一个关键工作项对应的工作项索引,得到各线程的工作项索引,包括:
获取所述第一个工作项对应的工作组索引、局部索引和全局索引;
根据所述工作组索引、局部索引和全局索引,确定所述关键工作项对应的工作项索引;
将所述关键工作项索引缓存至缓存单元。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
在所述缓存单元中读取所述线程的工作项索引;
确定构造所述线程所用的线程构造样板,并根据所述线程构造样板和所述线程的工作项索引,确定出所述任意工作项对应的工作项索引;所述任意工作项对应的工作项索引用于将所述任意工作项调度至负责处理所述线程的处理单元。
6.根据权利要求5所述的方法,其特征在于,所述确定出所述任意工作项对应的工作项索引,包括:
获取所述线程构造样板类型;
根据所述线程构造样板类型,确定所述任意工作项与所述第一个工作项之间的偏移信息;
根据所述偏移信息和所述第一个工作项对应的工作项索引,计算出所述任意工作项对应的工作项索引。
7.一种线程构造装置,其特征在于,所述装置包括:
划分模块,用于将工作负载划分成多个工作组;
确定模块,用于对于任一工作组,选择与所述任一工作组的大小相匹配的样板类型,并在所述样板类型对应的多个候选线程构造样板中,确定目标线程构造样板;
构造模块,用于按照所述目标线程构造样板构造多个线程;所述线程由所述任一工作组中的多个连续工作项所组成;
缓存模块,用于缓存各所述线程的工作项序列中至少一个关键工作项对应的工作项索引,得到各所述线程的工作项索引;用于将对应所述线程中的任意工作项调度至负责处理所述线程的处理单元。
8.根据权利要求7所述的装置,其特征在于,所述确定模块,具体用于获取各所述候选线程构造样板在计算空间中至少一个方向上的步进步距;根据各所述步进步距和所述工作组大小,确定步进步距与所述工作组大小之间的数量关系满足预设条件的候选线程构造样板为所述目标线程构造样板。
9.根据权利要求7所述的装置,其特征在于,所述构造模块,具体用于获取所述目标线程构造样板在计算空间中至少一个方向上的步进步距;按照所述步进步距将所述任一工作组中的多个连续工作项构造成多个所述线程。
10.根据权利要求7所述的装置,其特征在于,所述关键工作项为所述关键工作项为各线程中的第一个工作项,所述缓存模块,具体用于获取所述第一个工作项对应的工作组索引、局部索引和全局索引;根据所述工作组索引、局部索引和全局索引,确定所述关键工作项对应的工作项索引;将所述关键工作项索引缓存至缓存单元。
11.根据权利要求10所述的装置,其特征在于,所述装置还包括:读取模块,用于在所述缓存单元中读取所述线程的工作项索引;计算模块,用于确定构造所述线程所用的线程构造样板,并根据所述线程构造样板和线程的工作项索引,确定出所述任意工作项对应的工作项索引;所述任意工作项对应的工作项索引用于将所述任意工作项调度至负责处理所述线程的处理单元。
12.根据权利要求11所述的装置,其特征在于,所述计算模块,具体用于获取所述线程构造样板类型;根据所述线程构造样板类型,确定所述任意工作项与所述第一个工作项之间的偏移信息;根据所述偏移信息和所述第一个工作项对应的工作项索引,计算出所述任意工作项对应的工作项索引。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210756644.8A CN115034950B (zh) | 2022-06-30 | 2022-06-30 | 线程构造方法及其装置 |
US17/952,730 US20240004702A1 (en) | 2022-06-30 | 2022-09-26 | Thread construction method and device |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210756644.8A CN115034950B (zh) | 2022-06-30 | 2022-06-30 | 线程构造方法及其装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115034950A true CN115034950A (zh) | 2022-09-09 |
CN115034950B CN115034950B (zh) | 2023-10-24 |
Family
ID=83127864
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210756644.8A Active CN115034950B (zh) | 2022-06-30 | 2022-06-30 | 线程构造方法及其装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20240004702A1 (zh) |
CN (1) | CN115034950B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115858444A (zh) * | 2022-11-22 | 2023-03-28 | 格兰菲智能科技有限公司 | 用于通用计算的数据访问方法、装置和系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101593132A (zh) * | 2009-06-25 | 2009-12-02 | 北京航空航天大学 | 基于线程构造模块的多核并行模拟退火方法 |
CN102171650A (zh) * | 2008-11-24 | 2011-08-31 | 英特尔公司 | 用于将顺序程序分解为多个线程、执行所述线程和重构该顺序执行的系统、方法和装置 |
US20170286421A1 (en) * | 2016-03-31 | 2017-10-05 | Arm Limited | Indexing entries of a storage structure shared between multiple threads |
US20180150319A1 (en) * | 2016-11-29 | 2018-05-31 | International Business Machines Corporation | Template-based methodology for validating hardware features |
CN114168589A (zh) * | 2021-10-28 | 2022-03-11 | 阿里巴巴(中国)有限公司 | 索引构建方法及装置 |
CN114565501A (zh) * | 2022-02-21 | 2022-05-31 | 格兰菲智能科技有限公司 | 用于卷积运算的数据加载方法及其装置 |
-
2022
- 2022-06-30 CN CN202210756644.8A patent/CN115034950B/zh active Active
- 2022-09-26 US US17/952,730 patent/US20240004702A1/en active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102171650A (zh) * | 2008-11-24 | 2011-08-31 | 英特尔公司 | 用于将顺序程序分解为多个线程、执行所述线程和重构该顺序执行的系统、方法和装置 |
CN101593132A (zh) * | 2009-06-25 | 2009-12-02 | 北京航空航天大学 | 基于线程构造模块的多核并行模拟退火方法 |
US20170286421A1 (en) * | 2016-03-31 | 2017-10-05 | Arm Limited | Indexing entries of a storage structure shared between multiple threads |
US20180150319A1 (en) * | 2016-11-29 | 2018-05-31 | International Business Machines Corporation | Template-based methodology for validating hardware features |
CN114168589A (zh) * | 2021-10-28 | 2022-03-11 | 阿里巴巴(中国)有限公司 | 索引构建方法及装置 |
CN114565501A (zh) * | 2022-02-21 | 2022-05-31 | 格兰菲智能科技有限公司 | 用于卷积运算的数据加载方法及其装置 |
Non-Patent Citations (2)
Title |
---|
崔文 等: "雾霭图像实时处理算法加速策略", 《国防科技大学学报》, vol. 41, no. 3, pages 106 - 111 * |
莫铁强 等: "模板计算代码自动生成与性能优化", 《中国博士学位论文全文数据库信息科技辑》, no. 1, pages 138 - 139 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115858444A (zh) * | 2022-11-22 | 2023-03-28 | 格兰菲智能科技有限公司 | 用于通用计算的数据访问方法、装置和系统 |
CN115858444B (zh) * | 2022-11-22 | 2023-12-12 | 格兰菲智能科技有限公司 | 用于通用计算的数据访问方法、装置和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN115034950B (zh) | 2023-10-24 |
US20240004702A1 (en) | 2024-01-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6793162B2 (ja) | 画像プロセッサのためのラインバッファユニット | |
US9152462B2 (en) | Parallel processing device, parallel processing method, optimization device, optimization method and computer program | |
CN107533750B (zh) | 虚拟图像处理器及在其上处理图像数据的方法和系统 | |
US7912889B1 (en) | Mapping the threads of a CTA to the elements of a tile for efficient matrix multiplication | |
US7792895B1 (en) | Efficient matrix multiplication on a parallel processing device | |
US7506134B1 (en) | Hardware resource based mapping of cooperative thread arrays (CTA) to result matrix tiles for efficient matrix multiplication in computing system comprising plurality of multiprocessors | |
CN104036537A (zh) | 多分辨率一致光栅化 | |
US20230113228A1 (en) | Parallelized pipeline for vector graphics and image processing | |
CN113112579A (zh) | 渲染方法、装置、电子设备和计算机可读存储介质 | |
KR101609079B1 (ko) | 그래픽 프로세싱 유닛에서의 명령 선별 | |
US11030095B2 (en) | Virtual space memory bandwidth reduction | |
WO2015099562A1 (en) | Methods and apparatus for data-parallel execution of operations on segmented arrays | |
D'Amore et al. | Towards a parallel component in a GPU–CUDA environment: a case study with the L-BFGS Harwell routine | |
CN103996216A (zh) | 用于曲面细分和几何着色器的电力高效属性处置 | |
CN115034950B (zh) | 线程构造方法及其装置 | |
CN103870213A (zh) | 经由管线化的状态包触发性能事件捕获 | |
US7859548B1 (en) | Offloading cube map calculations to a shader | |
US11640531B2 (en) | Method, apparatus and device for updating convolutional neural network using GPU cluster | |
US9110855B2 (en) | Matrix based dynamic programming | |
US20230289398A1 (en) | Efficient Matrix Multiply and Add with a Group of Warps | |
CN106462600A (zh) | 一种显示照片的方法及设备 | |
Luo et al. | GPU accelerated 3D image deformation using thin-plate splines | |
CN105302577B (zh) | 驱动执行单元的机器码产生方法以及装置 | |
CN117851742B (zh) | 数据存储方法、数据处理方法、数据存储器、数据处理器 | |
KR20240063137A (ko) | 하드웨어 가속기 최적화형 그룹 컨볼루션 기반 신경망 모델 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address | ||
CP03 | Change of name, title or address |
Address after: 200135, 11th Floor, Building 3, No. 889 Bibo Road, China (Shanghai) Pilot Free Trade Zone, Pudong New Area, Shanghai Patentee after: Granfei Intelligent Technology Co.,Ltd. Country or region after: China Address before: 200135 Room 201, No. 2557, Jinke Road, China (Shanghai) pilot Free Trade Zone, Pudong New Area, Shanghai Patentee before: Gryfield Intelligent Technology Co.,Ltd. Country or region before: China |