CN110109657B - 一种gpu微指令探测方法 - Google Patents

一种gpu微指令探测方法 Download PDF

Info

Publication number
CN110109657B
CN110109657B CN201910248359.3A CN201910248359A CN110109657B CN 110109657 B CN110109657 B CN 110109657B CN 201910248359 A CN201910248359 A CN 201910248359A CN 110109657 B CN110109657 B CN 110109657B
Authority
CN
China
Prior art keywords
instruction
register
gpu
bank conflict
detection method
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
CN201910248359.3A
Other languages
English (en)
Other versions
CN110109657A (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.)
Nanjing Youjia Technology Co ltd
Original Assignee
Nanjing Youjia 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 Nanjing Youjia Technology Co ltd filed Critical Nanjing Youjia Technology Co ltd
Priority to CN201910248359.3A priority Critical patent/CN110109657B/zh
Publication of CN110109657A publication Critical patent/CN110109657A/zh
Application granted granted Critical
Publication of CN110109657B publication Critical patent/CN110109657B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • 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
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Advance Control (AREA)

Abstract

本发明公开了一种GPU微指令探测方法,属于计算机编程领域。所述方法包括如下步骤:探测指令的编码规则;探测寄存器bank冲突,判断寄存器间是否存在bank冲突,选取无bank冲突的寄存器;测量指令延迟,获取指令的延迟周期数。该方案可以探测出Pascal架构GPU的指令编码规则以及相应的延迟,bank冲突等底层的特性,为汇编级优化GPU算法提供依据。

Description

一种GPU微指令探测方法
技术领域
本发明涉及计算机编程领域,具体涉及一种GPU微指令探测方法。
背景技术
随着GPU的高速发展以及CUDA编程模型的日趋成熟,GPU这种通用众核处理器已经成为计算物理,天气预测,人工智能等高密度计算科学的首选协处理器芯片。然而,由于桌面以及服务器级GPU生产厂商NVIDIA的封闭性,只为GPU编程人员提供比较上层的CUDAC以及中间层的CUDAPTX编程模型,对于底层的指令集只做了极少量的介绍,与此同时,NVIDIA也没有公开其内部的汇编器。因此第三方开发人员仅仅通过NVCC编译出来的CUDA程序很难充分利用GPU的各种计算与存储资源,实际获得的性能距离GPU的理论峰值会有比较大的差距。虽然文献对GPU的某些微架构的特性进行了一定的测试,但是基于CUDA C的测量依然不够准确且没有深入到指令级。
发明内容
针对现有技术的不足,本发明的目的在于提供一种GPU微指令探测方法,用于解决现有技术中存在的基于CUDA C的测量依然不够准确且没有深入到指令级的问题。
为实现上述目的,本发明采用的技术方案为:
一种GPU微指令探测方法,所述方法包括如下步骤:
探测指令的编码规则;
探测寄存器bank冲突,获取无bank冲突的寄存器;
测量指令延迟,获取指令的延迟周期数。
进一步的,所述指令包括源寄存器数量为2的运算指令和三元运算指令。
进一步的,所述编码规则包括:当前指令语义的编码和操作数编码。
进一步的,所述当前指令语义的编码的探测方法包括:
对获得的编码按位逐一进行异或操作,并将结果重新插入cubin文件;
利用cuobjdump工具对新生成的cubin进行反汇编;
判断当前异或操作的位是否属于指令编码。
进一步的,所述操作数编码探测方法包括:
固定指令编码;
对非指令编码的位进行逐次异或操作,并将结果重新插入cubin文件;
利用cuobjdump工具对新生成的cubin进行反汇编比对;
判断当前异或操作的位是否属于操作数编码。
进一步的,寄存器bank冲突的探测方法包括:
固定目标寄存器的编号,遍历剩余所有寄存器的组合作为源寄存器组,关闭寄存器重用机制,通过所述编码规则运行对应的指令,获取所述指令的实际性能,由实际性能与理论性能之差判断当前的源寄存器组是否存在bank冲突,获取无bank冲突的寄存器。
进一步的,所述bank冲突的判断方法包括:如果所述指令的实际性能远小于GPU的理论值,则认为当前的源寄存器组存在bank冲突,否则不存在bank冲突。
进一步的,所述源寄存器组包括二元组合和三元组合。
进一步的,测量指令延迟的步骤包括:挑选处于同一 bank的不同寄存器,任意选取一个寄存器作为目标寄存器,通过所述指令对目标寄存器写入一个值,然后在下一条指令对目标寄存器进行读取,从1开始通过遍历控制码中的延迟字段,对下一条指令读取的数值进行检验,如果读取结果错误则相应地对延迟字段加1,否则当前的延迟字段即为所述指令的延迟周期数。
与现有技术相比,本发明具有如下的有益效果:该方案可以探测出Pascal架构GPU的指令编码规则以及相应的延迟,bank冲突等底层的特性,通过合理的寄存器选择以及指令排序,为汇编级优化GPU算法,逼近GPU的理论峰值极限提供依据。
附图说明
图1为本发明微指令探测方法的流程图。
具体实施方式
下面对本发明作进一步描述。以下实施例仅用于更加清楚地说明本发明的技术方案,而不能以此来限制本发明的保护范围。
如图1所示,一种GPU微指令探测方法,所述方法包括如下步骤:
探测指令的编码规则,由于NVIDIA并未开放GPU汇编指令集与机器码的编码对应规则,因此需要探测该规则用来正确生成cubin文件供cudadriverapi加载。例如一条单精度浮点乘加指令结构如下:
FFMAR9, R66, R3, R28/* 0x59800c0001d74209*/
最右边的64-bit编码包含了当前指令FFMA的语义信息以及寄存器编号的对应信息,因此,编码规则的探测由两部分组成:
探测当前指令语义的编码,对获得的编码按位逐一进行异或操作,并将结果重新插入cubin文件,然后利用NVIDIA提供的cuobjdump工具对新生成的cubin进行反汇编,如果正确生成了不同的指令同时与所有的操作寄存器相同,则认为当前异或操作的位属于指令编码;例如,上述的融积和指令的语义编码对应了最高位的12-bit,即0x5980000000000000。
探测操作数的编码,方法与当前指令语义的编码探测类似,但需要先固定指令,即对非指令编码的位进行逐次异或操作,并将结果重新插入cubin文件,再利用cuobjdump工具对新生成的cubin进行反汇编比对,例如,对于剩余的低52-bit的编码,从最低位开始逐位进行异或操作,对于最低的8-bit,后三个寄存器R66,R3和R28都不会发生变化但是第一个目标寄存器R9会不断发生变化,从R0变到R255,正好符合Pascal架构的GPU每线程最多256个寄存器的限制。因此,可以知道最后8-bit位对应了第一个目标寄存器,编码数字的规则为寄存器编号的16进制表示。其余类似。
探测寄存器bank冲突,判断寄存器间是否存在bank冲突,获取无bank冲突的寄存器;
寄存器bank冲突探测步骤包括:与片上的shared memory类似,GPU的寄存器同样存在bank冲突,即对处于相同bank的不同寄存器,在读取的时候是串行读取。测试方案为:对于源寄存器数量为2的运算指令,固定目标寄存器的编号,遍历剩余所有寄存器的二元组合
Figure DEST_PATH_IMAGE002
作为源寄存器组,并关闭寄存器重用机制,通过编码规则运行对应的指令,获取所述指令的实际性能,由实际性能与理论性能之差判断当前的源寄存器组是否存在bank冲突。如果测得的性能远小于GPU的理论值,则认为当前的二元组合存在bank冲突,否则不存在。同时,对参与测试的寄存器从0开始进行编号,处于相同bank的寄存器的编号相同,这样可以测得bank的数量。对于源寄存器和目标寄存器的组合,则跳过上述步骤,因为目标寄存器本身需要一定时间的延迟才能获得计算结果,不会与源寄存器的获取造成冲突。对于三元运算指令,例如FFMA,可以通过上述的测试结果进行验证。
测量指令延迟,获取指令的延迟周期数;与CPU的工作方式不同,现代GPU将指令执行的逻辑下放到软件层面,通过控制编码(control code)为每3条指令提供调度信息。控制码中的最低位字段用来设置当前指令写后读(RAW)的延迟周期数。测试该延迟周期的方案为:挑选处于同一 bank的不同寄存器,任意选取一个无bank冲突的寄存器作为目标寄存器
Figure DEST_PATH_IMAGE004
,使用待测试的指令/>
Figure DEST_PATH_IMAGE006
对其写入一个值,同时保证/>
Figure 738690DEST_PATH_IMAGE006
在执行的时候不存在寄存器bank冲突,并在下一条指令/>
Figure DEST_PATH_IMAGE008
立刻对/>
Figure 468879DEST_PATH_IMAGE004
进行读取,从1开始通过遍历控制码中的延迟字段对/>
Figure 779775DEST_PATH_IMAGE008
读取的数值进行检验。如果读取结果错误则相应地对延迟字段加1,否则当前的延迟字段即为该指令的延迟周期数。测试指令延迟对于汇编级优化算法具有重大的意义,即可以在前后两条相关指令之间放入若干无关指令来减少流水线的额外等待。测试的时候内核函数只需要设置1个线程块,该线程块包含1个warp即可,避免硬件调度多个warp带来的干扰。
指令双发:与早期Kepler架构的GPU不同,Pascal架构的GPU一个核上只有128个运算单元,而4组warp调度器每周期发射的线程数正好为128,恰好将128个运算单元全部占满,不存在闲置的运算单元,对于前后两条目标寄存器不相关的FFMA指令无法形成dualissue。因此无需像参考文献那样考虑两条前后不相关的FFMA双发,只需要尽可能的将计算指令与数据读取或存储指令安排在一起,同时将计算指令的延迟在控制码中设为0即可。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。

Claims (6)

1.一种GPU微指令探测方法,其特征在于,所述方法包括如下步骤:
探测指令的编码规则;
探测寄存器bank冲突,获取无bank冲突的寄存器;
测量指令延迟,获取指令的延迟周期数;
所述编码规则包括:当前指令语义的编码和操作数编码;
所述当前指令语义的编码的探测方法包括:
对获得的编码按位逐一进行异或操作,并将结果重新插入cubin文件;
利用cuobjdump工具对新生成的cubin进行反汇编;
判断当前异或操作的位是否属于指令编码;
所述操作数编码探测方法包括:
固定指令编码;
对非指令编码的位进行逐次异或操作,并将结果重新插入cubin文件;
利用cuobjdump工具对新生成的cubin进行反汇编比对;
判断当前异或操作的位是否属于操作数编码。
2.根据权利要求1所述的GPU微指令探测方法,其特征在于,所述指令包括源寄存器数量为2的运算指令和三元运算指令。
3.根据权利要求1所述的GPU微指令探测方法,其特征在于,寄存器bank冲突的探测方法包括:
固定目标寄存器的编号,遍历剩余所有寄存器的组合作为源寄存器组,关闭寄存器重用机制,通过所述编码规则运行对应的指令,获取所述指令的实际性能,由实际性能与理论性能之差判断当前的源寄存器组是否存在bank冲突,获取无bank冲突的寄存器。
4.根据权利要求3所述的GPU微指令探测方法,其特征在于,所述bank冲突的判断方法包括:如果所述指令的实际性能远小于GPU的理论值,则认为当前的源寄存器组存在bank冲突,否则不存在bank冲突。
5.根据权利要求3所述的GPU微指令探测方法,其特征在于,所述源寄存器组包括二元组合和三元组合。
6.根据权利要求1所述的GPU微指令探测方法,其特征在于,测量指令延迟的步骤包括:任意选取一个寄存器作为目标寄存器,挑选处于同一bank的不同寄存器,通过所述指令对目标寄存器写入一个值,然后在下一条指令对目标寄存器进行读取,从1开始通过遍历控制码中的延迟字段,对下一条指令读取的数值进行检验,如果读取结果错误则相应地对延迟字段加1,否则当前的延迟字段即为所述指令的延迟周期数。
CN201910248359.3A 2019-03-29 2019-03-29 一种gpu微指令探测方法 Active CN110109657B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910248359.3A CN110109657B (zh) 2019-03-29 2019-03-29 一种gpu微指令探测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910248359.3A CN110109657B (zh) 2019-03-29 2019-03-29 一种gpu微指令探测方法

Publications (2)

Publication Number Publication Date
CN110109657A CN110109657A (zh) 2019-08-09
CN110109657B true CN110109657B (zh) 2023-06-20

Family

ID=67484688

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910248359.3A Active CN110109657B (zh) 2019-03-29 2019-03-29 一种gpu微指令探测方法

Country Status (1)

Country Link
CN (1) CN110109657B (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103049304A (zh) * 2013-01-21 2013-04-17 中国人民解放军国防科学技术大学 一种通过死代码移除来加快gpu运行速度的方法
WO2014004222A1 (en) * 2012-06-29 2014-01-03 Intel Corporation Instruction and logic to test transactional execution status
CN107066706A (zh) * 2017-03-27 2017-08-18 中国科学院计算技术研究所 Gpu ffma指令在双发射模式下的通量测试方法
CN108108248A (zh) * 2017-12-28 2018-06-01 郑州云海信息技术有限公司 一种实现目标检测的cpu+gpu集群管理方法、装置及设备

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103988173B (zh) * 2011-11-25 2017-04-05 英特尔公司 用于提供掩码寄存器与通用寄存器或存储器之间的转换的指令和逻辑
US9268596B2 (en) * 2012-02-02 2016-02-23 Intel Corparation Instruction and logic to test transactional execution status
CN106843993B (zh) * 2016-12-26 2019-07-30 中国科学院计算技术研究所 一种逆向解析gpu指令的方法及系统

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2014004222A1 (en) * 2012-06-29 2014-01-03 Intel Corporation Instruction and logic to test transactional execution status
CN103049304A (zh) * 2013-01-21 2013-04-17 中国人民解放军国防科学技术大学 一种通过死代码移除来加快gpu运行速度的方法
CN107066706A (zh) * 2017-03-27 2017-08-18 中国科学院计算技术研究所 Gpu ffma指令在双发射模式下的通量测试方法
CN108108248A (zh) * 2017-12-28 2018-06-01 郑州云海信息技术有限公司 一种实现目标检测的cpu+gpu集群管理方法、装置及设备

Also Published As

Publication number Publication date
CN110109657A (zh) 2019-08-09

Similar Documents

Publication Publication Date Title
Yan et al. Demystifying tensor cores to optimize half-precision matrix multiply
Sridharan et al. Eliminating microarchitectural dependency from architectural vulnerability
US7979852B2 (en) System for automatically generating optimized codes
Răducanu et al. Micro adaptivity in vectorwise
Taylor et al. A micro-benchmark suite for AMD GPUs
US8359291B2 (en) Architecture-aware field affinity estimation
KR100817056B1 (ko) 분기이력 길이표시기, 분기예측 시스템 및 분기 예측 방법
CN110399182B (zh) 一种cuda线程放置优化方法
US11789734B2 (en) Padded vectorization with compile time known masks
CN105190334A (zh) 使用多条处理路径进行器件测试的方法和装置
EP4258121A1 (en) Program detection method and device
Gerum et al. Source level performance simulation of gpu cores
CN110109657B (zh) 一种gpu微指令探测方法
CN108021563B (zh) 一种指令间数据依赖的检测方法和装置
CN109814924B (zh) 一种软件复杂度计算方法
CN116149917A (zh) 评估处理器性能的方法及装置、计算设备、可读存储介质
US7590792B2 (en) Cache memory analyzing method
CN114217856B (zh) 面向AArch64架构的CPU指令微基准测试方法及系统
CN114253821B (zh) 一种分析gpu性能的方法、装置及计算机存储介质
CN111782454B (zh) 基于指令epi的细粒度gpdsp功耗测试方法、系统及介质
Condia et al. Evaluating the impact of transition delay faults in gpus
Ali et al. Parallel path delay fault simulation for multi/many-core processors with SIMD units
CN118093349B (zh) 一种基于计算任务重构的gpu计算单元数量自动度量方法
Kounev et al. The SPEC CPU Benchmark Suite
KR20190057854A (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