CN106598688B - 一种深度学习汇编优化中的寄存器冲突避免方法 - Google Patents

一种深度学习汇编优化中的寄存器冲突避免方法 Download PDF

Info

Publication number
CN106598688B
CN106598688B CN201611132248.9A CN201611132248A CN106598688B CN 106598688 B CN106598688 B CN 106598688B CN 201611132248 A CN201611132248 A CN 201611132248A CN 106598688 B CN106598688 B CN 106598688B
Authority
CN
China
Prior art keywords
deep learning
assembly code
bank
register
code optimizing
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.)
Active
Application number
CN201611132248.9A
Other languages
English (en)
Other versions
CN106598688A (zh
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.)
ZHONGKE SUGON INFORMATION INDUSTRY CHENGDU Co.,Ltd.
Dawning Information Industry Beijing Co Ltd
Original Assignee
Dawning Information Industry Beijing 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 Dawning Information Industry Beijing Co Ltd filed Critical Dawning Information Industry Beijing Co Ltd
Priority to CN201611132248.9A priority Critical patent/CN106598688B/zh
Publication of CN106598688A publication Critical patent/CN106598688A/zh
Application granted granted Critical
Publication of CN106598688B publication Critical patent/CN106598688B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/441Register allocation; Assignment of physical memory space to logical memory space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明公开了一种深度学习汇编优化中的寄存器冲突避免方法,该寄存器冲突避免方法解决的技术问题在于:提供一种规则简单、能够合理使用不同bank中的寄存器从而提高效率的深度学习汇编优化中的寄存器冲突避免方法;采用的技术方案为:一种深度学习汇编优化中的寄存器冲突避免方法,所述深度学习采用Kepler显卡进行加速,汇编优化时,包括以下步骤:将两条以上的计算指令与一条数据传输指令均匀混合在一起,以隐藏访存时间;进行矩阵乘法计算时,从四个或三个寄存器存储体内进行取数。

Description

一种深度学习汇编优化中的寄存器冲突避免方法
技术领域
本发明属于深度学习算法的技术领域,具体涉及一种深度学习汇编优化中的寄存器冲突避免方法。
背景技术
深度学习是机器学习研究中的一个新的领域,其动机在于建立、模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,例如图像,声音和文本。其概念由Hinton等人于2006年提出。基于深度置信网络(DBN)提出非监督贪心逐层训练算法,为解决深层结构相关的优化难题带来希望,随后提出多层自动编码器深层结构。此外Lecun等人提出的卷积神经网络是第一个真正多层结构学习算法,它利用空间相对关系减少参数数目以提高训练性能,图1为卷积神经网络的计算流程示意图。
深度学习的应用越来越广泛,算法也越来越成熟。各种开源软件框架被开发出来,如Caffe、Neon、TensorFlow、Theano、Torch等。各种算法的基本思路都大同小异,关键还在于性能。我们知道,深度学习是一种计算密集型的应用,而且用于训练的数据往往都是海量数据,因此,如果采用普通的CPU串行程序来计算一个实际问题,则往往耗费大量时间,数日甚至数月。因此,采用GPU(图形处理器,Graphics Processing Unit)等众核加速器进行加速,则成为了唯一的选择。现在主流的深度学习开发训练平台一般都用NVIDIA的显卡。为了加快训练速度,一般选择在配备多个GPU的高性能计算机或集群上面进行训练。
对深度学习的GPU程序并行化是一项非常常见的工作,其并行方式分为模型并行和数据并行,目前较多见的是数据并行。GPU上代码要达到较好的加速比,必须进行细致的优化,常用的优化方法有:a、优化GPU各级存储使用方法以及方式,尽量保证访问对齐与合并,减小访存开销;b、尽可发掘并行度,使用较多的线程块和线程,能够隐藏访存,提高计算峰值;c、使用流处理,特别是batch(批处理)模式的卷积神经网络天然就具有这种流式特点。但是即便使用了上述所有优化,一般而言,计算的峰值性能也很难超过百分之五十。这是由于再优化的方法也必须通过编译器去生成指令流,而这显然是开发者难以控制的,从而导致任何CUDA(Compute Unified Device Architecture,由NVIDIA推出的运算平台)层面的优化无法控制指令的实时运行情况。因此,为了进一步提高性能,越来越多的开发者直接从GPU产生的汇编代码层面上去进行优化。例如Nervana Systems开发团队,就针对Maxwell显卡做了汇编级优化,峰值性能从百分之五十左右提高到了百分之九十八。
Maxwell是目前最为前沿的GPU卡,深度学习的GPU加速程序在该卡上得到了极大的加速。但是目前市面上,较为多见的还是Kepler卡,而且硬件的升级可能仍然需要一段时间,但是这种汇编优化的工作在Kepler上却是空白。
发明内容
针对相关技术中存在的不足,本发明所要解决的技术问题在于:提供一种规则简单、能够合理使用不同bank中的寄存器从而提高效率的深度学习汇编优化中的寄存器冲突避免方法。
为解决上述技术问题,本发明采用的技术方案为:一种深度学习汇编优化中的寄存器冲突避免方法,所述深度学习采用Kepler显卡进行加速,汇编优化时,包括以下步骤:将两条以上的计算指令与一条数据传输指令均匀混合在一起,以隐藏访存时间;进行矩阵乘法计算时,从四个或三个寄存器存储体内进行取数。
优选地,所述计算指令为FFMA指令。
优选地,所述数据传输指令为LDS指令。
优选地,所述计算指令的延时为一个时钟周期。
优选地,所述数据传输指令的延时为两个时钟周期。
本发明的有益技术效果在于:本发明中的深度学习采用Kepler显卡进行加速,汇编优化时,先将两条以上的计算指令与一条数据传输指令均匀混合在一起,以隐藏访存时间,然后在进行矩阵乘法计算时,从四个或三个寄存器存储体内进行取数。这种寄存器bank冲突避免方案规则简单,可以交给编译器自动完成,由编译器自动检测,合理使用不同bank中的寄存器,从而提高效率。
附图说明
图1是卷积神经网络的计算流程示意图;
图2是在一个线程块中申请的共享内存示意图;
图3是根据本发明实施例的深度学习汇编优化中的寄存器冲突避免方法的流程图;
图4为Kepler显卡的寄存器的bank分布示意图;
图5为使用本发明的深度学习汇编优化中的寄存器冲突避免方法时寄存器使用情况的示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例;基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本案主要针对于Kepler显卡。虽然都是比较新的显卡,架构方面也大同小异,但是对于汇编级的优化而言,即便是很小的变化,也意味着优化工作的千差万别。在经过一段时间的汇编优化工作后,我们发现,性能虽然有所提升,但是仍然徘徊在百分之六十左右。经过研究,我们发现,这是由于寄存器在使用上存在bank(寄存器中的存储体)冲突导致的。
为了说明本案中的方法,首先介绍GPU中bank冲突的概念:GPU(图形处理器,Graphics Processing Unit)共享内存是基于存储体切换的架构(bank-switched-architecture)。在Femi、Kepler、Maxwell等架构的设备上有32个存储体(也就是常说的共享内存分成32个bank),而在G200与G80的硬件上只有16个存储体。如图2所示,在一个线程块中申请如下的共享内存:__shared__float sData[32][32]。
每个存储体(bank)每个周期只能指向一次操作(一个32bit的整数或者一个单精度的浮点型数据),一次读或者一次写,也就是说每个存储体(bank)的带宽为每周期32bit。即在图2所示的32×32的二维数组共享内存中,每一列对应同一个bank,那么:
a、同常量内存一样,当一个warp中的所有线程访问同一地址的共享内存时,会触发一个广播(broadcast)机制到warp中所有线程,这是最高效的。
b、如果同一个warp中的线程访问同一个bank中的不同地址时将发生bank冲突。
c、每个bank除了能广播(broadcast)还可以多播(mutilcast)(计算能力>=2.0),也就是说,如果一warp中的多个线程访问同一个bank的同一个地址时(其他线程也没有访问同一bank的不同地址)不会发生bank冲突。
d、即使同一个warp中的线程随机的访问不同的bank,只要没有访问同一个bank的不同地址就不会发生bank冲突。
上述是我们在普通CUDA优化中必须考虑的宏观层面上的针对共享内存的bank冲突。而实际上,从汇编层来看,代码使用的都是寄存器,而寄存器也同样存在bank冲突。
本案中,如图3所示,一种深度学习汇编优化中的寄存器冲突避免方法,所述深度学习采用Kepler显卡进行加速,汇编优化时,包括以下步骤:
S10,将两条以上的计算指令与一条数据传输指令均匀混合在一起,以隐藏访存时间。
S20,进行矩阵乘法计算时,从四个或三个寄存器存储体内进行取数。
具体地,所述计算指令为FFMA指令。
具体地,所述数据传输指令为LDS指令。
具体地,所述计算指令的延时为一个时钟周期。
具体地,所述数据传输指令的延时为两个时钟周期。
经过实际性能测试,Kepler的寄存器落在四个bank里面,图4所示的是128个寄存器的bank分布情况,在计算中,为了提高指令吞吐率,将6条计算指令与一条数据传输指令均匀混合在一起,从而隐藏访存时间。假设计算指令的延时为一个时钟周期,例如FFMA,而LDS的延时则为两个时钟周期,那么,实际的指令排布为:
FFMA RS RX RX RX
FFMA RS RX RX RX
FFMA RS RX RX RX
FFMA RS RX RX RX
FFMA RS RX RX RX
FFMA RS RX RX RX
LDS RS RX
FFMA RS RX RX RX
FFMA RS RX RX RX
FFMA RS RX RX RX
FFMA RS RX RX RX
FFMA RS RX RX RX
FFMA RS RX RX RX
LDS RS RX
通过测试发现,第一条FFMA是不能双发射的,2、3条,4、5条则是可以双发射的;那么,很显然LDS指令最终是和2、3条指令一起执行的,这也是要重点避免bank冲突的地方。
由于一条FFMA指令的源寄存器有三个,LDS有一个,而寄存器则总共有四个bank,因此,看起来必然有冲突。然而,在矩阵乘法计算中,经过特意的算法设计,第1条指令的三个寄存器,其中的2个或者3个,仍然可以得到重用,因此只需从4个或者3个寄存器bank内去取数,再加上LDS的一个寄存器bank,也就是说,最理想的情况是完全没有寄存器冲突,最差的情况也就是存在一个bank冲突。如图5所示,三个寄存器51和两个寄存器52被重用,前两行表示两条FFMA指令的源寄存器,第三行表示LDS指令的源寄存器,左图中因为有三个寄存器51重用,因此两条FFMA加上一条LDS指令,并没有寄存器bank冲突,而右图中,由于只有两个寄存器52重用,因此存在一个寄存器bank冲突。
本发明从“寄存器在使用上存在bank冲突”这个理论出发,在实践中总结出一套避免bank冲突的规律,而且由于规律简单易操作,可以将这种算法最终嵌入到编译器,让编译器去做寄存器的自动分配,完成最后一步的优化。实践证明,这样的考虑对于性能的影响非常大。本发明中的寄存器冲突避免方案规则简单,可以交给编译器自动完成,由编译器自动检测,合理使用不同bank中的寄存器,从而提高效率。通过性能优化,可以提高峰值性能百分之三十以上,算法流程化,规则非常简单,可以嵌入编译器,自动化完成相应的优化工作。因此,本发明具有突出的实质性特点和显著的进步。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

Claims (3)

1.一种深度学习汇编优化中的寄存器冲突避免方法,所述深度学习采用Kepler显卡进行加速,其特征在于:汇编优化时,包括以下步骤:
S10,将两条以上的计算指令与一条数据传输指令均匀混合在一起,以隐藏访存时间,其中,所述计算指令的延时为一个时钟周期,所述数据传输指令的延时为两个时钟周期;
S20,进行矩阵乘法计算时,从四个或三个寄存器存储体内进行取数。
2.根据权利要求1所述的一种深度学习汇编优化中的寄存器冲突避免方法,其特征在于:所述计算指令为FFMA指令。
3.根据权利要求1所述的一种深度学习汇编优化中的寄存器冲突避免方法,其特征在于:所述数据传输指令为LDS指令。
CN201611132248.9A 2016-12-09 2016-12-09 一种深度学习汇编优化中的寄存器冲突避免方法 Active CN106598688B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201611132248.9A CN106598688B (zh) 2016-12-09 2016-12-09 一种深度学习汇编优化中的寄存器冲突避免方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201611132248.9A CN106598688B (zh) 2016-12-09 2016-12-09 一种深度学习汇编优化中的寄存器冲突避免方法

Publications (2)

Publication Number Publication Date
CN106598688A CN106598688A (zh) 2017-04-26
CN106598688B true CN106598688B (zh) 2019-10-18

Family

ID=58598546

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201611132248.9A Active CN106598688B (zh) 2016-12-09 2016-12-09 一种深度学习汇编优化中的寄存器冲突避免方法

Country Status (1)

Country Link
CN (1) CN106598688B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107329818A (zh) * 2017-07-03 2017-11-07 郑州云海信息技术有限公司 一种任务调度处理方法及装置
CN110399977A (zh) * 2018-04-25 2019-11-01 华为技术有限公司 池化运算装置
CN115437637A (zh) * 2021-06-02 2022-12-06 华为技术有限公司 一种编译方法及相关装置

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103116485A (zh) * 2013-01-30 2013-05-22 西安电子科技大学 一种基于超长指令字专用指令集处理器的汇编器设计方法

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103116485A (zh) * 2013-01-30 2013-05-22 西安电子科技大学 一种基于超长指令字专用指令集处理器的汇编器设计方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
"GPU、CUDA-计算高级优化技术精简手册";百度;《百度文库》;20150929;1-57 *

Also Published As

Publication number Publication date
CN106598688A (zh) 2017-04-26

Similar Documents

Publication Publication Date Title
US9424038B2 (en) Compiler-controlled region scheduling for SIMD execution of threads
CN106598688B (zh) 一种深度学习汇编优化中的寄存器冲突避免方法
Kim et al. Performance analysis and tuning for general purpose graphics processing units (GPGPU)
US20110057937A1 (en) Method and system for blocking data on a gpu
CN107085743A (zh) 一种基于国产众核处理器的深度学习算法实现方法与平台
Hussain et al. A CUDA implementation of the standard particle swarm optimization
Nugteren et al. The boat hull model: enabling performance prediction for parallel computing prior to code development
CN100489830C (zh) 面向科学计算的64位流处理器芯片
Huo et al. Porting irregular reductions on heterogeneous CPU-GPU configurations
Wu et al. GPU-accelerated large scale analytics
Alnowibet et al. An efficient algorithm for data parallelism based on stochastic optimization
Chang et al. A framework for scheduling dependent programs on GPU architectures
Rahman et al. Towards accelerated agent-based crowd simulation for Hajj and Umrah
KR20110069259A (ko) 상호충돌검사 기반 병렬충돌검사 방법 및 컴퓨터 판독가능 매체
Hirvisalo On static timing analysis of GPU kernels
CN109871553B (zh) 一种针对分子动力仿真模型的并行化加速方法
Tan et al. Modeling and characterizing GPGPU reliability in the presence of soft errors
Li et al. An experimental study on deep learning based on different hardware configurations
Rouberte et al. DF‐DTM: Dynamic Task Memoization and reuse in dataflow
Skrzypczak et al. Efficient parallel implementation of crowd simulation using a hybrid CPU+ GPU high performance computing system
Mistry et al. Data structures and transformations for physically based simulation on a GPU
Murphy Solving tridiagonal systems on a GPU
CN114186468B (zh) 一种基于gpu加速的二次电子发射模拟方法及系统及设备
Abharian MECHANISMS FOR IMPLEMENTING HEXAGONAL ARCHITECTURE IN NODE JS
CN116244078B (zh) 基于多线程和simd的水下声场快速计算方法

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
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20211011

Address after: 100089 building 36, courtyard 8, Dongbeiwang West Road, Haidian District, Beijing

Patentee after: Dawning Information Industry (Beijing) Co.,Ltd.

Patentee after: ZHONGKE SUGON INFORMATION INDUSTRY CHENGDU Co.,Ltd.

Address before: 100193 No. 36 Building, No. 8 Hospital, Wangxi Road, Haidian District, Beijing

Patentee before: Dawning Information Industry (Beijing) Co.,Ltd.