CN107066706A - Gpu ffma指令在双发射模式下的通量测试方法 - Google Patents
Gpu ffma指令在双发射模式下的通量测试方法 Download PDFInfo
- Publication number
- CN107066706A CN107066706A CN201710186589.2A CN201710186589A CN107066706A CN 107066706 A CN107066706 A CN 107066706A CN 201710186589 A CN201710186589 A CN 201710186589A CN 107066706 A CN107066706 A CN 107066706A
- Authority
- CN
- China
- Prior art keywords
- gpu
- flux
- instruction
- register
- ffma
- 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
- G06F30/00—Computer-aided design [CAD]
- G06F30/20—Design optimisation, verification or simulation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/39—Circuit design at the physical level
- G06F30/398—Design verification or optimisation, e.g. using design rule check [DRC], layout versus schematics [LVS] or finite element methods [FEM]
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Evolutionary Computation (AREA)
- Geometry (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Test And Diagnosis Of Digital Computers (AREA)
Abstract
本涉及一种GPU FFMA指令在双发射模式下的通量测试方法和系统,其中该测试方法包括对GPU指令的延迟和通量进行测试,获得该GPU指令的延迟周期和GPU指令通量;根据判断寄存器间是否存在bank冲突,选取无bank冲突的寄存器操作数;通过该GPU指令的延迟周期和GPU指令通量,分析测试该GPU指令中控制码的含义,并根据该控制码的含义,控制开启对应的发射模式和GPU的线程调度,若开启的发射模式为双发射模式,则根据该双发射模式和该寄存器操作数计算测试GPU浮点乘加指令在双发射模式下的通量。本发明通过微基准测试程序测试出GPU参数以及其和性能的对应关系,得出参数和性能的关系,有助于优化GPU上的应用。
Description
技术领域
本发明涉及GPU微体系结构、编译器代码生成技术领域,特别涉及一种GPU FFMA指令(浮点乘加指令)在双发射模式下的通量测试方法。
背景技术
微体系结构的特征和参数是所有架构相关优化的重要参照和依据,然而,许多对性能有重要影响的架构特征和参数都没有被公开。为此,本发明用GPU(GraphicsProcessing Unit)汇编语言设计了微基准测试程序(micro-benchmarks),用以探测和揭露这些架构特征和参数。特别地,在矩阵乘算法优化过程中,本发明重点关注的架构特征和参数包括:指令的写后读依赖延迟、指令的软件调度控制码、寄存器bank分布、不同位宽访存指令的带宽。本发明描述了针对这些架构特征和参数的微基准测试程序的设计要点,给出了设计范例,并展示了GK110架构上的探测成果。Wong[Henry Wong,Misel-MyrtoPapadopoulou,Maryam Sadooghi-Alvandi,and Andreas Moshovos.Demystifying gpumicroarchitecture through microbenchmarking.In Performance Analysis ofSystems&Software(ISPASS),2010IEEE International Symposium on,pages 235–246.IEEE,2010.]在GT200上做了详尽的基准测试程序,包括指令的延迟、Icache(指令高速缓冲存储器)大小、分支影响、同步的影响、cache(存储器)层次和TLB(TranslationLookaside Buffer)层次等。Zhang[Xinxin Mei,Kaiyong Zhao,Chengjian Liu,andXiaowen Chu.Benchmarking the memory hierarchy of modern gpus.In Network andParallel Computing,pages 144–156.Springer,2014.]通过设计共享内存带宽、全局访存带宽和指令通量的微基准测试程序,对流水线受限、共享内存受限和全局内存带宽受限的三个应用进行量化分析,其中指令的通量定义为单位时间内的可以完成的指令的个数。Mei[Zhang,Yao,and John D.Owens."A quantitative performance analysis model forGPU architectures."In 2011IEEE 17th International Symposium on HighPerformance Computer Architecture,pp.382-393.IEEE,2011.]对Fermi、Kepler和Maxwell的架构的内存层次进行探测,包括cache、共享内存和全局内存。但是Mei没有考虑向量化的全局访存和共享访存指令,而且代码内部指令过少,测出的值和理论峰值差别甚远。Tan[4]测试了不同向量的访存指令的延迟。Demmel[Vasily Volkov and James WDemmel.Benchmarking gpus to tune dense linear algebra.In High PerformanceComputing,Networking,Storage and Analysis,2008.SC 2008.InternationalConference for,pages 1–11.IEEE,2008.]测试了kernel launch的开销,以及流水线的开销,但是他的代码是基于CUDA,测试精度不如汇编基准测试程序高。
发明内容
本发明的目的是解决现有GPU体系结构封闭,很多参数没有公布的情况,给出精确探测GPU参数的微基准测试方法。
具体来说本发明提供了一种GPU FFMA指令在双发射模式下的通量测试方法,其中该测试方法包括指令延迟/通量测试步骤、寄存器bank测试步骤、控制码含义测试步骤和FFMA双发射通量测试步骤,其中:
指令延迟/通量测试步骤,负责对GPU指令的延迟和通量进行测试,获得该GPU指令的延迟周期和GPU指令通量,且该GPU指令的延迟周期和GPU指令通量的测试方法将会被控制码含义测试步骤使用;
寄存器bank测试步骤,根据判断寄存器间是否存在bank冲突,选取无bank冲突的寄存器操作数,FFMA双发射通量测试步骤将会用到本步骤得出的bank分布结果;
控制码含义测试步骤,通过该GPU指令的延迟周期和GPU指令通量,分析测试该GPU指令中控制码的含义,并根据该控制码的含义,控制开启对应的发射模式和GPU的线程调度,若开启的发射模式为双发射模式,则进行该FFMA双发射通量测试步骤;
FFMA双发射通量测试步骤,根据该双发射模式和该寄存器操作数计算测试GPU浮点乘加指令在双发射模式下的通量。
该GPU FFMA指令在双发射模式下的通量测试方法,其中该指令延迟/通量测试步骤还包括,对每个寄存器bank设置索引,以及设置不同的控制码。
该GPU FFMA指令在双发射模式下的通量测试方法,其中该指令延迟/通量测试步骤,通过测量预先设定的一段时间内GPU完成的指令个数,以测得该GPU指令通量;随机选取一寄存器,并统计向该寄存器写入数据的指令与读取该寄存器中数据的指令两者之间的时钟周期数,将该时钟周期数作为该GPU指令的延迟周期。
该GPU FFMA指令在双发射模式下的通量测试方法,其中该寄存器bank测试步骤,判断寄存器间是否存在bank冲突,具体为:测试任意两组寄存器组合下的浮点乘法的实际通量,该实际通量若达到理论通量值的99.5%以上,则判断为两寄存器间没有冲突,若该实际通量小于等于理论通量值的99.5%,则判断为两寄存器间具有冲突。
该GPU FFMA指令在双发射模式下的通量测试方法,其中该控制码含义测试步骤根据该延迟周期判断该控制码含义,若该延迟周期等于0,则该控制码含义为开启双发射,若该延迟周期大于0,则该控制码含义为开启延迟发射。
本发明还提供了一种GPU FFMA指令在双发射模式下的通量测试系统,其中该测试系统包括指令延迟/通量测试模块、寄存器bank测试模块、控制码含义测试模块和FFMA双发射通量测试模块,其中:
指令延迟/通量测试模块,负责对GPU指令的延迟和通量进行测试,获得该GPU指令的延迟周期和GPU指令通量,并将该GPU指令的延迟周期和GPU指令通量发送给该控制码含义测试模块;
寄存器bank测试模块,根据判断寄存器间是否存在bank冲突,选取无bank冲突的寄存器操作数,并将该寄存器操作数发送给该FFMA双发射通量测试模块;
控制码含义测试模块,通过该GPU指令的延迟周期和GPU指令通量,分析测试该GPU指令中控制码的含义,并根据该控制码的含义,控制开启对应的发射模式和GPU的线程调度,若开启的发射模式为双发射模式,则运行该FFMA双发射通量测试模块;
FFMA双发射通量测试模块,根据该双发射模式和该寄存器操作数计算测试GPU浮点乘加指令在双发射模式下的通量。
该GPU FFMA指令在双发射模式下的通量测试系统,其中该指令延迟/通量测试模块还包括,对每个寄存器bank设置索引,以及设置不同的控制码。
该GPU FFMA指令在双发射模式下的通量测试系统,其中该指令延迟/通量测试模块,通过测量预先设定的一段时间内GPU完成的指令个数,以测得该GPU指令通量;随机选取一寄存器,并统计向该寄存器写入数据的指令与读取该寄存器中数据的指令两者之间的时钟周期数,将该时钟周期数作为该GPU指令的延迟周期。
该GPU FFMA指令在双发射模式下的通量测试系统,其中该寄存器bank测试模块,判断寄存器间是否存在bank冲突,具体为:测试任意两组寄存器组合下的浮点乘法的实际通量,该实际通量若达到理论通量值的99.5%以上,则判断为两寄存器间没有冲突,若该实际通量小于等于理论通量值的99.5%,则判断为两寄存器间具有冲突。
该GPU FFMA指令在双发射模式下的通量测试系统,其中该控制码含义测试模块根据该延迟周期判断该控制码含义,若该延迟周期等于0,则该控制码含义为开启双发射,若该延迟周期大于0,则该控制码含义为开启延迟发射。
本技术发明设计和标准化一系列的微基准测试程序来探测GPU微架构特性和参数;通过微基准测试程序测试出GPU参数以及其和性能的对应关系,有助于理解GPU的设计;通过微基准测试程序测试出GPU参数以及其和性能的对应关系,得出参数和性能的关系,有助于优化GPU上的应用。
附图说明
图1为测试FFMA指令双发射通量的流程图;
图2为指令流水线依赖延迟的测试范例代码图;
图3为双发射代码片段图;
图4为在单双发射指令交替执行策略下6种模式所对应的效率柱状图。
具体实施方式
本发明提供了一种GPU FFMA指令在双发射模式下的通量测试方法,其中该测试方法包括指令延迟/通量测试步骤、寄存器bank测试步骤、控制码含义测试步骤和FFMA双发射通量测试步骤,其中:
指令延迟/通量测试步骤,负责对GPU指令的延迟和通量进行测试,获得该GPU指令的延迟周期和GPU指令通量,并将该GPU指令的延迟周期和GPU指令通量发送给该控制码含义测试步骤;
寄存器bank测试步骤,根据判断寄存器间是否存在bank冲突,选取无bank冲突的寄存器操作数,并将该寄存器操作数发送给该FFMA双发射通量测试步骤;
控制码含义测试步骤,通过该GPU指令的延迟周期和GPU指令通量,分析测试该GPU指令中控制码的含义,并根据该控制码的含义,控制开启对应的发射模式和GPU的线程调度,若开启的发射模式为双发射模式,则进行该FFMA双发射通量测试步骤;
FFMA双发射通量测试步骤,根据该双发射模式和该寄存器操作数计算测试GPU浮点乘加指令在双发射模式下的通量。
该GPU FFMA指令在双发射模式下的通量测试方法,其中该指令延迟/通量测试步骤还包括,对每个寄存器bank设置索引,以及设置不同的控制码。
该GPU FFMA指令在双发射模式下的通量测试方法,其中该指令延迟/通量测试步骤,通过测量预先设定的一段时间内GPU完成的指令个数,以测得该GPU指令通量;随机选取一寄存器,并统计向该寄存器写入数据的指令与读取该寄存器中数据的指令两者之间的时钟周期数,将该时钟周期数作为该GPU指令的延迟周期。
该GPU FFMA指令在双发射模式下的通量测试方法,其中该寄存器bank测试步骤,判断寄存器间是否存在bank冲突,具体为:测试任意两组寄存器组合下的浮点乘法的实际通量,该实际通量若达到理论通量值的99.5%以上,则判断为两寄存器间没有冲突,若该实际通量小于等于理论通量值的99.5%,则判断为两寄存器间具有冲突。
该GPU FFMA指令在双发射模式下的通量测试方法,其中该控制码含义测试步骤根据该延迟周期判断该控制码含义,若该延迟周期等于0,则该控制码含义为开启双发射,若该延迟周期大于0,则该控制码含义为开启延迟发射。
下面结合实施例和附图对本发明的技术方案进行详细地介绍。
图1为本发明测试FFMA指令双发射通量的流程图,如图1所示,首先执行指令延迟/通量测试步骤,该步骤负责对GPU指令延迟和通量进行测试,负责对GPU指令的延迟和通量进行测试,获得该GPU指令的延迟周期和GPU指令通量,并通过设置不同控制码获取该指令的不同延迟周期和指令通量,获得控制码的含义。在该步骤中还包括对不同寄存器设置索引,索引会对应一个bank,分配寄存器时,一个指令(GPU指令)的所有操作数便不会被分配到同一个bank,以及设置不同的控制码,以便接下来寄存器bank测试步骤和控制码含义测试步骤做准备;寄存器bank测试步骤,负责根据判断寄存器间是否存在bank冲突,来选取无bank冲突的寄存器操作数,并将该寄存器操作数发送给FFMA双发射通量测试步骤;控制码含义测试步骤,通过该GPU指令的延迟周期和GPU指令通量,分析测试该GPU指令中控制码的含义,并根据该控制码的含义,控制发射模式和GPU的线程调度,若开启的模式为双发射模式,则进行FFMA双发射通量测试步骤;最后FFMA双发射通量测试步骤,根据该双发射模式和该寄存器操作数计算测试GPU FFMA指令在双发射模式下的通量。下面将对每个步骤展开做相应的具体描述。其中设置不同的控制码,目的是采用控制码的软硬件机制可以减少功耗,通过为每条指令设置8位的二进制字符串,就可以设置控制码。
指令延迟/通量测试步骤,其中指令的通量为单位时间内的GPU可以完成的指令个数,通过测量预先设定的一段时间内GPU完成的指令个数,可以测得该GPU指令通量;指令延迟/通量测试步骤还负责计算测试GPU的指令延迟,测试该指令延迟的目的是为了获取控制码的含义,其中该指令延迟具体为指令的写后读依赖延迟,即通过随机选取一寄存器,并统计向该寄存器写入数据的指令与读取该寄存器中数据的指令,两者之间的时钟周期数,将该时钟周期数作为该GPU指令的延迟周期,测得该GPU指令的延迟周期,对指令调度优化有重要意义,并且通过测试该指令延迟可以获取控制码的含义,并且测试该指令延迟还对GPU的编译阶段同样有着重要意义,例如软件调度器应当在有依赖的两指令之间插入无关指令,例如NOP指令,并且插入的无关指令至少要与间隔周期数对等,否则,在程序执行时,没有用无关指令填充的时钟周期将被浪费掉。
图2为指令流水线依赖延迟的测试范例代码图,在图中包含了GPU延迟微基准测试程序,其设计要点总结如下:
核心循环不能超出一级指令缓存的容量。这样,循环体只在第一次执行时会遭遇一级指令缓存缺失,第二次开始就不会缺失了;
核心循环的循环次数要设定为2,因为循环体第一次执行时,一级指令缓存必然缺失,第二次开始才不缺失。循环结束时,循环体最后一次执行过程中的时钟采样值将被保留下来;
时钟采样指令要放在循环体内,因为如果放在循环体外,必然引入第一次循环时一级指令缓存缺失的噪音。虽然较大的循环次数可以稀释第一次循环时的噪音,但是附带的较长运行时间,会大概率遭遇时钟采样值溢出回绕,所以还是将时钟采样指令放在循环体内为好;
算术运算指令的各个源操作数之间不能有寄存器bank冲突;
一个SM(streaming multiprocessor)内活跃的warp(GPU执行程序时的调度单位)数小于等于SM内调度单元的个数,避免两个warp被调度到同一个运算单元上而引入硬件调度噪音。实际上,任务总量设置为单个warp就可以了;
由于线程内时钟采样指令的通量小于1,所以两个时钟采样指令之间,要填充足够的无关指令,规避这个通量引入的噪音。本发明的测试程序中没有放置无关指令,而是在第一条时钟采样指令的调度控制码上设置了14个周期的延迟,等效于14个无关指令;
两条相依赖的指令,即前一条指令的目标操作数是下一条指令的源操作数。
寄存器bank测试步骤。由于GPU的寄存器分布在若干个bank中,每个bank只有一个读口,一个时钟周期只能读出单个寄存器操作数。如果一条指令的两个源操作数寄存器位于同一个bank中,则该指令在硬件流水线上推进的过程中,会遭遇阻塞,造成性能损失。定义寄存器间的等价关系:如果实测两个寄存器有bank冲突,则这两个寄存器位于同一个bank中,这两个寄存器有等价关系;如果实测两个寄存器没有bank冲突,则这两个寄存器位于不同bank中,这两个寄存器就没有等价关系。那么,只要实测两两寄存器是否有bank冲突,就可以得到所有的等价类,也就是所有的bank,以及所有寄存器在这些bank中的分布。本发明测试任意两组寄存器组合下的浮点乘法(FMUL)的实际通量,通过对比实际通量值与理论通量值的大小推测其是否有bank冲突,具体来说,该实际通量若达到理论通量值的99.5%以上,则判断为两寄存器间没有冲突,若该实际通量小于等于理论通量值的99.5%,则判断为两寄存器间具有冲突。如FMUL单发射时的理论通量是66.67%。FMUL R4,R1,R0实测通量是66.40%,达到理论单发射通量的99.60%,可以认为R1,R0没有bank冲突。FMULR4,R2,R0的单发射通量位62.06%,达到理论单通量的93.09%,可以得出R2和R0是有bank冲突,属于同一个等价类。本步骤通过测试所有的寄存器组合,为每一个寄存器判定其属于哪个等价类,以判定所有的寄存器共涉及几个等价类,以及每个等价类含有哪些寄存器索引,这样做是为了确定寄存器的bank。如果有N个寄存器,这样的组合有C(N,2)=N*(N-1)/2个。
控制码含义测试步骤,通过测得指令中软件调度控制码(控制码)的含义,进而得出控制码对指令通量和延迟的影响。自Kepler架构起,NVIDIA引入了软件调度控制码,在代码生成阶段,由编译器为每条指令附加调度提示信息:一条指令发射出去之后,要阻塞几个周期,再发射下一条指令。这样,对于写后读依赖延迟为固定周期数的指令,比如算术运算指令,就可以省去或简化针对写后读依赖的硬件保障逻辑,如计分板机制。程序运行时,硬件调度器依据软件调度控制码给出的提示,决定下一条指令何时发射,而不用去考察其依赖的指令是否已经执行完。在GK110架构中,每连续8条64位指令为一个单元,这8条指令中,第一条是软件调度指令,之后七条指令的软件调度控制码被编码在最前面的该软件调度指令中。本步骤通过测试8位控制码下编码不同组合的指令延迟来判断控制码的含义,8位控制码,每一位都可以是1或0,因此有2的8次方,也就是256种组合,我们就是要分布测出指令在这256种控制码下的延迟,该控制码含义测试步骤通过分布测试计算该控制码的延迟,若延迟等于0,则该控制码含义为开启双发射,若大于0,则该控制码含义为开启延迟发射,延迟的测试方法见指令延迟/通量测试步骤。如果延迟是0,说明是开启双发射。如果几位的编码和延迟有线性关系,这几位则表示开启延迟发射,即若测得延迟大于0,则该控制码含义为开启延迟发射。
FFMA双发射通量测试步骤,本段之后是叙述如何测试FFMA双发射通量。Kepler架构引入了共享运算单元,以支持算术运算指令的双发射:SM中,每两个warp调度器除了各自私有的一组运算单元,还可以将算术运算指令调度到共享的运算单元去执行。
并行算法要充分利用共享的运算资源,GK110架构中,8条指令为一个基本单元,其中第一条是软件调度指令,之后七条指令的软件调度控制信息被编码在这条软件调度指令中。本发明的测试结果表明,在8指令单元中,放置6条FFMA(乘加融合指令)构成的序列模式,运行效率最高。8指令单元中,除去软件调度指令和6条FFMA指令,还多余一个指令槽,可以放置任意非算术运算指令。如果没有指令要放在这里,应当用无关指令填充,以防止6指令序列模式跨越8指令单元的边界。在多余一个指令槽中放置的指令,无论是非算术运算指令还是无关指令,都应当和6指令序列模式中的单发射FFMA一起发射,以免扰乱FFMA交替单/双发射的节奏。
对于6条FFMA构成的指令序列,单/双发射的配比应该是2:2,也就是2条指令单发射,耗费2个周期,另外4条指令双发射,也是耗费2个周期。两个调度器上的任务独立执行时,如果因双发射FFMA而竞争共享的核心,硬件仲裁逻辑会将共享核心判给一个调度器,阻塞另一个调度器,造成性能损失。不过这种仲裁损耗占比很小,因为一到两个周期之后,两个执行流就会因相位差而完美咬合,在之后很多个周期内都满负荷的轮流使用共享核心,不再发生竞争。
确定单双发射配比之后,还要选取最优的单双发射序列模式。4个周期中,选取2个周期单发射,剩余2个周期双发射,共有C(4,2)=6种可选的单双发射序列模式。本发明在K20显卡上分别测试了这6种模式,测试结果见图4,其中1-2-2-1(单发射,双发射,双发射,单发射)模式最好,效率达到了峰值的97%其中效率=FFMA实测通量/硬件的浮点峰值,本发明优化的单精度矩阵乘算法SGEMM实现就选取这个模式。作为对比,2013年Lai的工作[Junjie Lai and Andre Seznec.Performance upper bound analysis and′optimization of sgemm on fermi and kepler gpus.In Code Generation andOptimization(CGO),2013IEEE/ACM International Symposium on,pages 1–10.IEEE,2013.]中,由于没有找到共享运算单元的正确使用方法,FFMA通量只达到理论峰值的68.75%。
以下为与上述方法实施例对应的系统实施例,本实施方式可与上述实施方式互相配合实施。上述施方式中提到的相关技术细节在本实施方式中依然有效,为了减少重复,这里不再赘述。相应地,本实施方式中提到的相关技术细节也可应用在上述实施方式中。
本发明还提供了一种GPU FFMA指令在双发射模式下的通量测试系统,其中该测试系统包括指令延迟/通量测试模块、寄存器bank测试模块、控制码含义测试模块和FFMA双发射通量测试模块,其中:
指令延迟/通量测试模块,负责对GPU指令的延迟和通量进行测试,获得该GPU指令的延迟周期和GPU指令通量,并将该GPU指令的延迟周期和GPU指令通量发送给该控制码含义测试模块;
寄存器bank测试模块,根据判断寄存器间是否存在bank冲突,选取无bank冲突的寄存器操作数,并将该寄存器操作数发送给该FFMA双发射通量测试模块;
控制码含义测试模块,通过该GPU指令的延迟周期和GPU指令通量,分析测试该GPU指令中控制码的含义,并根据该控制码的含义,控制开启对应的发射模式和GPU的线程调度,若开启的发射模式为双发射模式,则运行该FFMA双发射通量测试模块;
FFMA双发射通量测试模块,根据该双发射模式和该寄存器操作数计算测试GPU浮点乘加指令在双发射模式下的通量。
该GPU FFMA指令在双发射模式下的通量测试系统,其中该指令延迟/通量测试模块还包括,对每个寄存器bank设置索引,以及设置不同的控制码。
该GPU FFMA指令在双发射模式下的通量测试系统,其中该指令延迟/通量测试模块,通过测量预先设定的一段时间内GPU完成的指令个数,以测得该GPU指令通量;随机选取一寄存器,并统计向该寄存器写入数据的指令与读取该寄存器中数据的指令两者之间的时钟周期数,将该时钟周期数作为该GPU指令的延迟周期。
该GPU FFMA指令在双发射模式下的通量测试系统,其中该寄存器bank测试模块,判断寄存器间是否存在bank冲突,具体为:测试任意两组寄存器组合下的浮点乘法的实际通量,该实际通量若达到理论通量值的99.5%以上,则判断为两寄存器间没有冲突,若该实际通量小于等于理论通量值的99.5%,则判断为两寄存器间具有冲突。
该GPU FFMA指令在双发射模式下的通量测试系统,其中该控制码含义测试模块根据该延迟周期判断该控制码含义,若该延迟周期等于0,则该控制码含义为开启双发射,若该延迟周期大于0,则该控制码含义为开启延迟发射。
总结起来,单双发射指令交替执行策略的实现要点包括:
使用正确的软件调度控制码,开启相邻两条指令双发射;
控制线程中双发射指令的配比和节奏;
6指令序列模式不能跨越软件调度指令控制的8指令边界;
在双发射的情况下,两条乘加指令要读取6个寄存器操作数,但是寄存器只有4个bank,显然会导致bank冲突。此时,要设计乘加指令的顺序,从而充分利用硬件提供的“寄存器操作数缓存”设施[Jack Hilaire Choquette,Manuel Olivier Gautho,and John ErikLindholm.Methods and apparatus for source operand collector caching,January282014.US Patent 8,639,882.],以规避bank冲突。
虽然本发明以上述实施例公开,但具体实施例仅用以解释本发明,并不用于限定本发明,任何本技术领域技术人员,在不脱离本发明的构思和范围内,可作一些的变更和完善,故本发明的权利保护范围以权利要求书为准。
Claims (10)
1.一种GPU FFMA指令在双发射模式下的通量测试方法,其特征在于,该测试方法包括指令延迟/通量测试步骤、寄存器bank测试步骤、控制码含义测试步骤和FFMA双发射通量测试步骤,其中:
指令延迟/通量测试步骤,负责对GPU指令的延迟和通量进行测试,获得该GPU指令的延迟周期和GPU指令通量,并将该GPU指令的延迟周期和GPU指令通量发送给该控制码含义测试步骤;
寄存器bank测试步骤,根据判断寄存器间是否存在bank冲突,选取无bank冲突的寄存器操作数,并将该寄存器操作数发送给该FFMA双发射通量测试步骤;
控制码含义测试步骤,通过该GPU指令的延迟周期和GPU指令通量,分析测试该GPU指令中控制码的含义,并根据该控制码的含义,控制开启对应的发射模式和GPU的线程调度,若开启的发射模式为双发射模式,则进行该FFMA双发射通量测试步骤;
FFMA双发射通量测试步骤,根据该双发射模式和该寄存器操作数计算测试GPU浮点乘加指令在双发射模式下的通量。
2.如权利要求1所述的GPU FFMA指令在双发射模式下的通量测试方法,其特征在于,该指令延迟/通量测试步骤还包括,对每个寄存器bank设置索引,以及设置不同的控制码。
3.如权利要求1所述的GPU FFMA指令在双发射模式下的通量测试方法,其特征在于,该指令延迟/通量测试步骤,通过测量预先设定的一段时间内GPU完成的指令个数,以测得该GPU指令通量;随机选取一寄存器,并统计向该寄存器写入数据的指令与读取该寄存器中数据的指令两者之间的时钟周期数,将该时钟周期数作为该GPU指令的延迟周期。
4.如权利要求1所述的GPU FFMA指令在双发射模式下的通量测试方法,其特征在于,该寄存器bank测试步骤,判断寄存器间是否存在bank冲突,具体为:测试任意两组寄存器组合下的浮点乘法的实际通量,该实际通量若达到理论通量值的99.5%以上,则判断为两寄存器间没有冲突,若该实际通量小于等于理论通量值的99.5%,则判断为两寄存器间具有冲突。
5.如权利要求1所述的GPU FFMA指令在双发射模式下的通量测试方法,其特征在于,该控制码含义测试步骤根据该延迟周期判断该控制码含义,若该延迟周期等于0,则该控制码含义为开启双发射,若大于0,则该控制码含义为开启延迟发射。
6.一种GPU FFMA指令在双发射模式下的通量测试系统,其特征在于,该测试系统包括指令延迟/通量测试模块、寄存器bank测试模块、控制码含义测试模块和FFMA双发射通量测试模块,其中:
指令延迟/通量测试模块,负责对GPU指令的延迟和通量进行测试,获得该GPU指令的延迟周期和GPU指令通量,并将该GPU指令的延迟周期和GPU指令通量发送给该控制码含义测试模块;
寄存器bank测试模块,根据判断寄存器间是否存在bank冲突,选取无bank冲突的寄存器操作数,并将该寄存器操作数发送给该FFMA双发射通量测试模块;
控制码含义测试模块,通过该GPU指令的延迟周期和GPU指令通量,分析测试该GPU指令中控制码的含义,并根据该控制码的含义,控制开启对应的发射模式和GPU的线程调度,若开启的发射模式为双发射模式,则运行该FFMA双发射通量测试模块;
FFMA双发射通量测试模块,根据该双发射模式和该寄存器操作数计算测试GPU浮点乘加指令在双发射模式下的通量。
7.如权利要求6所述的GPU FFMA指令在双发射模式下的通量测试系统,其特征在于,该指令延迟/通量测试模块还包括,对每个寄存器bank设置索引,以及设置不同的控制码。
8.如权利要求6所述的GPU FFMA指令在双发射模式下的通量测试系统,其特征在于,该指令延迟/通量测试模块,通过测量预先设定的一段时间内GPU完成的指令个数,以测得该GPU指令通量;随机选取一寄存器,并统计向该寄存器写入数据的指令与读取该寄存器中数据的指令两者之间的时钟周期数,将该时钟周期数作为该GPU指令的延迟周期。
9.如权利要求6所述的GPU FFMA指令在双发射模式下的通量测试系统,其特征在于,该寄存器bank测试模块,判断寄存器间是否存在bank冲突,具体为:测试任意两组寄存器组合下的浮点乘法的实际通量,该实际通量若达到理论通量值的99.5%以上,则判断为两寄存器间没有冲突,若该实际通量小于等于理论通量值的99.5%,则判断为两寄存器间具有冲突。
10.如权利要求6所述的GPU FFMA指令在双发射模式下的通量测试系统,其特征在于,该控制码含义测试模块根据该延迟周期判断该控制码含义,若该延迟周期等于0,则该控制码含义为开启双发射,若该延迟周期大于0,则该控制码含义为开启延迟发射。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710186589.2A CN107066706B (zh) | 2017-03-27 | 2017-03-27 | Gpu ffma指令在双发射模式下的通量测试方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710186589.2A CN107066706B (zh) | 2017-03-27 | 2017-03-27 | Gpu ffma指令在双发射模式下的通量测试方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107066706A true CN107066706A (zh) | 2017-08-18 |
CN107066706B CN107066706B (zh) | 2019-07-30 |
Family
ID=59620234
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710186589.2A Active CN107066706B (zh) | 2017-03-27 | 2017-03-27 | Gpu ffma指令在双发射模式下的通量测试方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107066706B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110109657A (zh) * | 2019-03-29 | 2019-08-09 | 南京佑驾科技有限公司 | 一种gpu微指令探测方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102576304A (zh) * | 2009-06-19 | 2012-07-11 | 奇异计算有限公司 | 使用紧凑的运算处理元件进行处理 |
CN102799416A (zh) * | 2012-07-16 | 2012-11-28 | 中国人民解放军国防科学技术大学 | 面向gpu的细粒度并行应用映射方法 |
US20130159628A1 (en) * | 2011-12-14 | 2013-06-20 | Jack Hilaire Choquette | Methods and apparatus for source operand collector caching |
CN104615576A (zh) * | 2015-03-02 | 2015-05-13 | 中国人民解放军国防科学技术大学 | 面向cpu+gpu处理器的混合粒度一致性维护方法 |
US9183662B1 (en) * | 2008-05-22 | 2015-11-10 | Nvidia Corporation | System and method for enabling scene program functionality |
-
2017
- 2017-03-27 CN CN201710186589.2A patent/CN107066706B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9183662B1 (en) * | 2008-05-22 | 2015-11-10 | Nvidia Corporation | System and method for enabling scene program functionality |
CN102576304A (zh) * | 2009-06-19 | 2012-07-11 | 奇异计算有限公司 | 使用紧凑的运算处理元件进行处理 |
US20130159628A1 (en) * | 2011-12-14 | 2013-06-20 | Jack Hilaire Choquette | Methods and apparatus for source operand collector caching |
CN102799416A (zh) * | 2012-07-16 | 2012-11-28 | 中国人民解放军国防科学技术大学 | 面向gpu的细粒度并行应用映射方法 |
CN104615576A (zh) * | 2015-03-02 | 2015-05-13 | 中国人民解放军国防科学技术大学 | 面向cpu+gpu处理器的混合粒度一致性维护方法 |
Non-Patent Citations (2)
Title |
---|
JUNJIE LAI,ANDRÉ SEZNEC: "Performance Upper Bound Analysis and Optimization", 《PROCEEDINGS OF THE 2013 IEEE/ACM INTERNATIONAL SYMPOSIUM ON CODE GENERATION AND OPTIMIZATION (CGO) 》 * |
程俊: "多目标测试用例预优化方法及其在GPU上的应用研究", 《万方学位论文库》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110109657A (zh) * | 2019-03-29 | 2019-08-09 | 南京佑驾科技有限公司 | 一种gpu微指令探测方法 |
CN110109657B (zh) * | 2019-03-29 | 2023-06-20 | 南京佑驾科技有限公司 | 一种gpu微指令探测方法 |
Also Published As
Publication number | Publication date |
---|---|
CN107066706B (zh) | 2019-07-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Nugteren et al. | A detailed GPU cache model based on reuse distance theory | |
Kothapalli et al. | A performance prediction model for the CUDA GPGPU platform | |
Ausavarungnirun et al. | Exploiting inter-warp heterogeneity to improve GPGPU performance | |
Ma et al. | A memory access model for highly-threaded many-core architectures | |
CN102981807B (zh) | 一种基于cuda并行环境的gpu程序优化方法 | |
CN104765589B (zh) | 基于mpi的网格并行预处理方法 | |
CN105468439A (zh) | 在cpu-gpu异构框架下遍历固定半径内邻居的自适应并行算法 | |
Wang et al. | MDM: The GPU memory divergence model | |
Schoeberl | Is time predictability quantifiable? | |
Zhou et al. | A performance analysis framework for exploiting GPU microarchitectural capability | |
Feljan et al. | Towards a model-based approach for allocating tasks to multicore processors | |
CN107066706B (zh) | Gpu ffma指令在双发射模式下的通量测试方法 | |
Burns et al. | Wcet analysis of superscalar processors using simulation with coloured petri nets | |
Orlov et al. | Simulation models for parallel computing structures | |
Uddin et al. | Signature-based high-level simulation of microthreaded many-core architectures | |
Alkohlani et al. | Extending the monte carlo processor modeling technique: Statistical performance models of the niagara 2 processor | |
Wu et al. | A model-based software solution for simultaneous multiple kernels on GPUs | |
Zhang et al. | Evaluating GPGPU memory performance through the C-AMAT model | |
Baghsorkhi et al. | Analytical performance prediction for evaluation and tuning of GPGPU applications | |
Trapp et al. | Using cpu stubs to optimize parallel processing tasks: An application of dynamic performance stubs | |
Cornelis et al. | The pipeline performance model: a generic executable performance model for GPUs | |
Terrosi et al. | Modeling of GPGPU architectures for performance analysis of CUDA programs | |
Kang et al. | NNsim: Fast performance estimation based on sampled simulation of GPGPU kernels for neural networks | |
Li et al. | A static analytical performance model for GPU kernel | |
Lühnen et al. | Benchmarking Thread Block Cluster |
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 |