CN112230931B - 适用于图形处理器的二次卸载的编译方法、装置和介质 - Google Patents

适用于图形处理器的二次卸载的编译方法、装置和介质 Download PDF

Info

Publication number
CN112230931B
CN112230931B CN202011140485.6A CN202011140485A CN112230931B CN 112230931 B CN112230931 B CN 112230931B CN 202011140485 A CN202011140485 A CN 202011140485A CN 112230931 B CN112230931 B CN 112230931B
Authority
CN
China
Prior art keywords
code
graphics processor
execution
program core
synchronization
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
CN202011140485.6A
Other languages
English (en)
Other versions
CN112230931A (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.)
Shanghai Bi Ren Technology Co ltd
Original Assignee
Shanghai Biren Intelligent 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 Shanghai Biren Intelligent Technology Co Ltd filed Critical Shanghai Biren Intelligent Technology Co Ltd
Priority to CN202011140485.6A priority Critical patent/CN112230931B/zh
Publication of CN112230931A publication Critical patent/CN112230931A/zh
Priority to TW110113317A priority patent/TWI807301B/zh
Priority to US17/367,044 priority patent/US11748077B2/en
Application granted granted Critical
Publication of CN112230931B publication Critical patent/CN112230931B/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/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/458Synchronisation, e.g. post-wait, barriers, locks
    • 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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures

Abstract

本发明涉及一种计算机可读取存储介质、适应于图形处理器的二次卸载的编译方法和装置,其中该编译方法包含:将第一程序核中的多个执行代码重新组织成第二程序核。其中,第二程序核包含操作表和计算代码,操作表包含多个记录,计算代码包含一部分的执行代码和同步请求,每个同步请求包含指向一个记录的信息,计算代码中的执行代码和同步请求的顺序相符于第一程序核中的执行代码的顺序,使得图形处理器中的计算单元能够执行计算代码,以及图形处理器中的引擎能够依据操作表中的每个记录的内容让图形处理器中的或所述图形处理器外的组件完成操作。本发明通过如上所述的编译方法,让引擎能够将适合的操作给图形处理器中的或图形处理器外的其他组件执行,提供更好的执行效率和更多的应用弹性。

Description

适用于图形处理器的二次卸载的编译方法、装置和介质
技术领域
本发明涉及用于通用计算领域的图形处理器,尤指一种计算机可读取存储介质、适应于图形处理器的二次卸载的编译方法和装置。
背景技术
目前包含图形处理器(Graphics Processing Unit,GPU)的计算系统中还包含中央处理器(Central Processing Unit,CPU)。中央处理器适合处理传统的应用程序的数值运算,而图形处理器适合处理计算机图形(Computer Graphics) 以及大规模的并发计算。这样的计算系统被编程后可执行各种应用任务,包含但不限于:线性和非线性数据转化、数据库操作、大数据运算、人工智能计算、音频、视频数据的编码、解码、建模操作、图像渲染操作等。为了实现异构高并发的计算,本发明提出一种计算机可读取存储介质、适应于图像处理器的二次卸载的编译方法和装置。
发明内容
有鉴于此,如何实现异构高并发的计算,是用于通用计算领域的图形处理器的重要课题。
本发明涉及一种适应于图形处理器的二次卸载的编译方法,包含:将第一程序核中的多个执行代码重新组织成第二程序核。其中,第二程序核包含操作表和计算代码。操作表包含多个记录。计算代码包含一部分的执行代码和同步请求,并且每个同步请求包含指向一个记录的信息。此外,计算代码中的执行代码和同步请求的顺序相符于第一程序核中的执行代码的顺序,使得图形处理器中的计算单元能够执行计算代码,以及图形处理器中的引擎能够依据操作表中的每个记录的内容让图形处理器中的或所述图形处理器外的组件完成操作。
本发明还涉及一种计算机可读取存储介质,用于存储能够被处理单元执行的程序代码,并且当程序代码被处理单元执行时实现如上所述的编译方法。
本发明涉及一种适应于图形处理器的二次卸载的编译装置,包含:存储装置;以及处理单元。处理单元用于将第一程序核中的多个执行代码重新组织成第二程序核,以及存储第二程序核至存储装置,以供图形处理器执行,其中,第二程序核包含操作表和计算代码。操作表包含多个记录。计算代码包含一部分的执行代码和同步请求,并且每个同步请求包含指向一个记录的信息。计算代码中的执行代码和同步请求的顺序相符于第一程序核中的执行代码的顺序,使得图形处理器中的计算单元能够执行计算代码,以及图形处理器中的引擎能够依据操作表中的每个记录的内容让图形处理器中的或所述图形处理器外的组件完成操作。
上述实施例的优点之一,通过如上所述的编译方法,让引擎能够将适合的操作给图形处理器中的或图形处理器外的其他组件执行,提供更好的执行效率和更多的应用弹性。
本发明的其他优点将配合以下的说明和附图进行更详细的解说。
附图说明
此处所说明的附图用于提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。
图1为依据本发明实施例的用于实施一次卸载的计算系统的框图。
图2为依据本发明实施例的装置代码示意图。
图3为依据本发明实施例的二次卸载示意图。
图4为依据本发明实施例的用于实施二次卸载的计算系统的系统架构图。
图5为依据本发明实施例的二次卸载的实施过程示意图。
图6为依据本发明实施例的编译计算机的系统架构图。
图7为依据本发明实施例的编译方法流程图。
图8为依据本发明实施例的重构后的程序核的示意图。
图9为依据本发明实施例的由计算单元的控制电路执行的控制方法流程图。
图10显示依据本发明实施例的应用二次卸载的顺序执行的示例。
图11显示依据本发明实施例的应用二次卸载的并行执行的示例。
其中,附图中符号的简单说明如下:
10:电子装置;100:计算系统;110:图形处理器;120:命令处理器; 130:计算单元;150:DMA/SDMA控制器;160:二级缓存;170、185:内存;180:中央处理器;190、600:总线架构;210~270:装置代码;410:全局同步引擎;412:接口;414:控制器;416:存储器;440:特殊应用集成电路;450:现场可编程逻辑门数组;460:加速器;510:编译器;532:运行时; 534:驱动程序;552:原始程序核;554、830:全局同步引擎操作表;556、 850:计算代码;570、810:重构后程序核;60:编译计算机;610:处理单元; 620:内存;630:显示接口;640:输入接口;650:存储装置;S710~S760:方法步骤;851~857:重构后代码;S910~S960:方法步骤;t1、t2、t3:时间点。
具体实施方式
以下将配合相关附图来说明本发明的实施例。在这些附图中,相同的标号表示相同或类似的组件或方法流程。
必须了解的是,使用于本说明书中的“包含”、“包括”等词,是用于表示存在特定的技术特征、数值、方法步骤、作业处理、组件和/或组件,但并不排除可加上更多的技术特征、数值、方法步骤、作业处理、组件、组件,或以上的任意组合。
本发明中使用如“第一”、“第二”、“第三”等词是用于修饰权利要求中的组件,并非用于表示之间具有优先权顺序,先行关系,或者是一个组件先于另一个组件,或者是执行方法步骤时的时间先后顺序,仅用于区别具有相同名字的组件。
必须了解的是,当组件描述为“连接”或“耦接”至另一组件时,可以是直接连结、或耦接至其他组件,可能出现中间组件。相反地,当组件描述为“直接连接”或“直接耦接”至另一组件时,其中不存在任何中间组件。用于描述组件之间关系的其他词语也可以类似方式解读,例如“介于”相对于“直接介于”,或者“邻接”相对于“直接邻接”等等。
参考图1。电子装置10可设置包含图形处理器(Graphics Processing Unit, GPU)110的计算系统100,让计算系统100被编程后可执行各种应用任务,包含但不限于:线性和非线性数据转化、数据库操作、大数据运算、人工智能计算、音频、视频数据的编码、解码、建模操作、图像渲染操作等。包含图形处理器110的计算系统100中还包含中央处理器(Central Processing Unit,CPU) 180。图形处理器(Graphics Processing Unit,GPU)110又可称为通用图形处理器(General-Purpose computing on Graphics Processing Unit,GPGPU)。电子装置10可实施为大型主机、工作站、个人计算机、笔记本计算机(Laptop PC)、平板计算机、移动电话、数字相机、数字摄影机等电子产品。图形处理器110 和中央处理器180各自拥有内存170和185,并且通过总线架构190相互连接以传递数据、地址、控制信号等,例如快速外设组件互联(Peripheral Component Interconnect Express,PCI-E)。
一般来说,中央处理器180和图形处理器110适合执行的任务不同,中央处理器180较适合处理复杂的串行逻辑、复杂的控制流、与系统的输入输出装置间的交互,而图形处理器110较适合单指令多数据的并发运算,例如单指令多数据流(Single InstructionMultiple Data,SIMD)指令、单指令多线程(Single Instruction Multiple Thread,SIMT)技术等。为了有效运用将图形处理器110 能力,中央处理器180可卸载(Offload)一系列的装置代码给图形处理器110,其过程大致如下所述:中央处理器180在内存185中准备装置代码(Device Code)所需的数据,然后发出命令给图形处理器110中的命令处理器(CommandProcessor,CP)120,请求从内存185复制数据到图形处理器110中的内存170。命令处理器120可通过直接内存存取/系统直接内存存取控制器(Direct Memory Access/SystemDirect Memory Access,DMA/SDMA Controller)150以完成内存间的数据复制和存储。中央处理器180把要执行的装置代码发送给图形处理器110,然后发送命令给图形处理器110,用于启动装置代码的执行。图形处理器110中的计算单元(Compute Unit,CU)130执行这些装置代码指示的任务,从内存170读取数据、进行各种计算、写入计算结果到内存170。此时,装置代码的执行都由计算单元130统筹。当计算单元130执行完后,通过命令处理器120通知中央处理器180,这些装置代码已经执行完毕的信息。中央处理器180接着将内存170中的计算结果通过总线架构190迁移回内存 185。这过程也可称为一次卸载(First Offload)。
举例来说,参考图2。装置代码210指示将内存170中的数据A预取 (Preload)至二级缓存160。装置代码220指示对二级缓存160中的数据A进行运算。装置代码230指示清理(Flush)二级缓存160,用于清除二级缓存 160中的数据A。装置代码240指示将内存170中的数据B预取至二级缓存160。装置代码250指示对二级缓存160中的数据B进行运算。装置代码260指示清理二级缓存160,用于清除二级缓存160中的数据B。装置代码270指示对内存170中的数据A和B进行归并操作(All-Reduce Operation)而成为数据C。归并操作可包含各式各样的运算,例如,加法、减法、乘法、除法、取大值、取小值、各种比较等。
在一些实施方式中,图形处理器110让所有的装置代码的执行都给计算单元130主导。然而,这可能造成计算单元130的工作量庞大,产生系统运行的瓶颈。并且,当计算单元130运行时,图形处理器110中的其他组件(如命令处理器120、二级缓存(Layer 2,L2Cache)160、直接内存存取/系统直接内存存控制器150等)都处于等待闲置状态,造成系统的运行没有效率。此外,某些装置代码的任务并不适合交由计算单元130完成,而是适合交由其他组件完成,例如二级缓存(Layer 2—L2 Cache)160、直接内存存取/系统直接内存存控制器150等。举例来说,装置代码210、230~240、260~270就不适合交由计算单元130完成。如果让计算单元130执行装置代码210或240的任务,则计算单元130需要发出命令给内存170,用于从内存170中的指定地址读取数据并存储至二级缓存160。如果让计算单元130执行装置代码230或260的任务,则计算单元130需要发出命令给内存170,用于清除二级缓存160中指定地址的数据。如果让计算单元130执行装置代码270的任务,则计算单元130 依序发出命令给内存170及二级缓存160,用于分别从内存170中的指定地址读取数据A和B并存储至二级缓存160,以及从二级缓存160的指定地址读取数据A和B并存储至计算单元130中的一级缓存(Layer 1—L1 Cache),并且在运算完成后依序发出命令给二级缓存160及内存170,用于分别从计算单元130中的一级缓存读取数据C并存储至二级缓存160,以及从二级缓存160 读取数据C并存储至内存170中的指定地址。因此,由计算单元130主导执行上述装置代码的任务可能阻塞了后续装置代码的执行,消耗大量的时间(也就是图形处理器110的时钟周期)、内存带宽(Memory Bandwidth)等宝贵的系统资源,影响整体性能。
为了解决上述实施方式的缺点,从一个方面来说,本发明实施例在图形处理器110执行二次卸载(Secondary Offload),用于将中央处理器180传送来的装置代码的任务再交给适合的组件执行,包含图形处理器110之中的或图形处理器110外的适合组件。
在二次卸载的一些实施例,参考图3,图形处理器110可将装置代码220 和250的任务交给计算单元130完成。计算单元130可执行各式各样的操作,例如,整数、浮点数的加法和乘法计算、比较操作、布尔(Boolean)运算、比特位移、代数函数(如平面插值、三角函数、指数函数、对数函数)等。图形处理器110可将装置代码210、230、240和260的任务交给二级缓存160完成,并可将装置代码270的任务交给DMA/SDMA控制器150完成,让 DMA/SDMA控制器150直接从内存170中的指定地址读取数据并存储至计算单元130中的一级缓存,并且从计算单元130的一级缓存读取计算结果并存储至内存170中的指定地址。
在二次卸载的另一些实施例,图形处理器110可将特定装置代码的任务交给图形处理器110外但不包含中央处理器180的组件执行,例如特殊应用集成电路(ApplicationSpecific Integrated Circuit,ASIC)、现场可编程逻辑门数组 (Field ProgrammableGate Array,FPGA)、加速器(Accelerator)等。
在二次卸载的另一些实施例,图形处理器110可将适合中央处理器180执行的装置代码再交回给中央处理器180,例如,包括大段串行逻辑、复杂控制流(如If-else条件判断跳转)、与系统输入输出有大量交互的装置代码等。
从一个方面来说,参考图4,为了实现二次卸载来提升系统的整体效能,本发明实施例在图形处理器110中设置全局同步引擎(Global Synchronization Engine,GSE)410,用于搭配计算单元130执行各种类型的顺序和并发任务。全局同步引擎410通过内部总线架构420与命令处理器120、计算单元130、 DMA/SDMA控制器150、二级缓存160、内存170和其他组件相互连接以传递装置代码、数据、地址、控制信号等,并且通过命令处理器120和外部总线架构190与中央处理器180、特殊应用集成电路440、现场可编程逻辑门数组 450、加速器460和其他组件相互连接以传递装置代码、数据、地址、控制信号等。如上所述的组件形成异构系统(Heterogenous System),而全局同步引擎410则用于协调异构系统中各个模块的工作。全局同步引擎410包含控制器 414,用于完成装置代码的二次卸载的工作。全局同步引擎410还包含接口412 和存储器416,接口412用于使用特定通信协议于其他设置在内部总线架构420 上的其他模块通信,存储器416用于存储即将进行执行操作的必要信息。
从另一个方面来说,参考图5,本发明实施例不要求程序员因应如图4的硬件架构来编写程序代码,而是通过编译器510分析程序员已经编写完成的程序核(Kernel)552中的执行代码,把程序核552中的执行代码重新组织成适应于如图4所述的异构系统的程序核570,包含GSE操作表(Operation Table) 554和计算代码556,使得命令处理器120将计算代码556交给计算单元130 执行,并且把GSE操作表554交给全局同步引擎410,使得全局同步引擎410 据以指示其他组件执行特定任务(也可称为二次卸载),如DMA/SDMA控制器150、二级缓存160、内存170、中央处理器180、特殊应用集成电路440、现场可编程逻辑门数组450、加速器460等。
整个实施过程可分为两个阶段:编译阶段;和运行阶段。在编译阶段,编译器510进行代码的重构。在运行阶段,通过命令处理器120和全局同步引擎 410的协同合作,实现多模块(或组件)的并发执行。
通常,程序员可通过编译计算机完成编译阶段。参考图6,编译计算机60 包含处理单元610、内存620、显示接口630、输入接口640和存储装置650。处理单元610可使用多种方式实施,如使用通用硬件(例如,单处理器、具有并行处理能力的多处理器、图形处理器或其他具有运算能力的处理器),并且在执行编译器510的程序代码时,提供如后所述的功能。内存620可为动态随机存取存储器(Dynamic Random Access Memory,DRAM),提供易失性的存储空间,用于缓存处理单元610在执行编译的过程中所需要的数据,例如,变量、数据表等,以及从存储装置650读取的数据,例如待分析的程序核552。存储装置650可为硬盘(HardDisk)、固态硬盘等,提供非易失性的存储空间,用于存储重构后的GSE操作表554和计算代码556。处理单元211另可通过显示接口630和输入接口640分别连接显示器和输入装置。
在编译阶段中,处理单元610加载并执行编译器510的程序代码时可实现如图7所示的方法流程图,用于根据原来的程序核552中的执行代码生成可适应于如图4所述的异构系统的程序核570,包含GSE操作表554和计算代码 556。在另一些实施例中,GSE操作表554和计算代码556也可让不同于图4 所述的异构系统实现多模块的并发执行,本发明并不因此受限制。详细步骤说明如下:
步骤S710:获取原始程序核552中的第一个或下一个执行代码。
步骤S720:判断获取的执行代码的操作是否适合由计算单元130执行。如果是,流程继续进行步骤S730的处理。否则,流程继续进行步骤S740的处理。当编译器510发现获取的执行代码的操作不适合由计算单元130执行时,就把这个执行代码标注出来。举例来说,以下操作不适合由计算单元130执行:
从内存中预取数据至二级缓存的操作;
对二级缓存的指定局部进行清理的操作;
对内存中的多段数据进行归并操作;
大段串行逻辑的操作;
具有复杂的控制流的操作(如If-else条件判断跳转等);
与系统输入输出有大量交互的操作。
步骤S730:将获取的执行代码增加到重构后的计算代码556。此外,编译器510更判断此执行代码的执行是否需要等待之前获取的执行代码执行完毕。如果需要,新增此执行代码需要同步的信息。如果不需要,新增此执行代码不需要同步的信息。编译器510可使用同步标识(Synchronization Flag)来表示:“1”代表需要;“0”代表不需要。新增到重构后的计算代码556的执行代码的顺序相符于获取的执行代码在原始程序核552中的顺序。
步骤S740:增加相应于获取的执行代码的记录(Entry)至GSE操作表554。记录中包含此操作由哪个模块(如DMA/SDMA控制器150、二级缓存160、内存170、中央处理器180、特殊应用集成电路440、现场可编程逻辑门数组 450、加速器460或其他不是计算单元130的组件)运行的信息。例如,步骤 S720中示例的第一个和第二个操作适合由二级缓存160执行,第三个操作适合由DMA/SDMA控制器150执行,第四个至第六个操作适合中央处理器180 执行。此外,记录中还包含此操作如何运行的信息,如操作命令和操作参数,相应于步骤S710中获取的执行代码。
步骤S750:增加同步请求(Synchronization Hook)至重构后的计算代码 556,每个同步请求携带参数,用于指向GSE操作表554的新增加记录。此外,编译器510更判断此同步请求的执行是否需要等待之前获取的执行代码执行完毕。如果需要,新增此同步请求需要同步的信息。如果不需要,新增此同步请求不需要同步的信息。编译器510可使用同步标识来表示:“1”代表需要;“0”代表不需要。增加到重构后的计算代码556的同步请求的顺序相符于获取的执行代码在原始程序核552中的顺序。
步骤S760:判断是否原始程序核552中的所有执行代码都处理完毕。如果是,结束编译。否则,流程继续进行步骤S710的处理。
参考图5中的示例,由于原始程序核552中的执行代码1和执行代码3不适合交给计算单元130执行,因此,通过编译器510编译后,GSE操作表554 中包含了两个记录,第一个记录存储了操作1适合由那个模块运行以及如何运行的信息,而第二个记录存储了操作3适合由那个模块运行以及如何运行的信息。在重构后的计算代码556中,原来的执行代码1被替换成同步请求,携带指向GSE操作表554中第一个记录的信息,并且原来的执行代码3被替换成同步请求,携带指向GSE操作表554中第二个记录的信息。编译后的GSE操作表554和计算代码556会存储到电子装置10中的存储装置,使得通用图形处理器100能够运行重构后的程序核570。
在另一些实施例中,电子装置10也可用于完成编译阶段。中央处理器180 可加载并执行编译器510的程序代码已完成如图7所示的方法流程图,本发明并不局限于用专属的编译计算机完成编译阶段。
参考图5,中央处理器180可执行运行时532和驱动程序534的程序代码。在运行阶段,运行时532收到用户请求运行程序核570的代码之后,把程序核 570交给驱动程序534。驱动程序534发现程序核570包含两个部分:GSE操作表554和计算代码556。于是,驱动程序534通知命令处理器120加载程序核570(也可当作启动一次卸载)。命令处理器120将GSE操作表554存储到全局同步引擎410中的存储器416,使得全局同步引擎410中的控制器414能够完成GSE操作表554中指示的操作。接着,命令处理器120将计算代码556 交给计算单元130,启动代码的执行。
参考图8的另一个示例,命令处理器120接收到程序核810,包含GSE操作表830和计算代码850。GSE操作表830包含四笔记录,每笔记录中的冒号之前包含由那个模块运行的信息(例如,“L2”代表二级缓存160,“DMA”代表DMA/SDMA控制器150等),每笔记录中的冒号之后包含如何运行的信息(细节可参考以上关于图2的说明)。计算代码850包含七个代码851至857。其中,代码851、853、855和856是同步请求,每个同步请求都带有同步标识(显示在括弧中),“S”代表需要同步,“NS”代表不需要同步。代码852、854和857是能够让计算单元130执行的代码,每个代码都带有同步标识(显示在括弧中),“S”代表需要同步,“NS”代表不需要同步。
计算单元130包含控制电路,用于控制计算代码850的执行。参考图9所示的由计算单元130的控制电路执行的控制方法流程图。
步骤S910:提取计算代码850中的第一个或下一个代码。
步骤S920:判断此代码是否能够被执行。如果是,则流程继续进行步骤S940的处理。否则,流程继续进行步骤S930的处理。举例来说,当此代码所关联的同步标识指出不需要等待前一个代码执行完毕时,代表此代码能够被执行。当此代码所关联的同步标识指出需要等待前一个代码执行完毕且前一个代码已经执行完毕时,代表此代码能够被执行。当此代码所关联的同步标识指出需要等待前一个代码执行完毕且前一个代码还没执行完毕时,代表此代码不能够被执行。
步骤S930:等待一段预设的时间。
步骤S940:判断提取的代码是否是同步请求。如果是,则流程继续进行步骤S960的处理。否则(也就是提取的代码是能够被计算单元执行的代码),流程继续进行步骤S950的处理。
步骤S950:依据代码执行指定的计算。
步骤S960:向全局同步引擎410发出携带记录编号的请求。全局同步引擎410收到请求后,搜索GSE操作表830以获取记录编号所指的记录,并且依据记录中的信息通过命令处理器120发出适当命令给适当的组件。全局同步引擎410从组件收到执行完毕的信息后,通知计算单元130此请求已经完成的信息。
参考图10。由于代码852需要等待前一个代码执行完毕才能继续执行,因此计算单元130在时间点t1为代码851发出请求和记录编号#1给全局同步引擎410后,代码852不能马上被执行。全局同步引擎410中的控制器414通过接口412收到请求后,搜索存储器416中的GSE操作表830以获取记录编号#1的记录,依据记录编号#1的记录内容通过接口412以指示命令处理器120 发出命令给二级缓存160,用于将内存170中的数据A预取至二级缓存160。全局同步引擎410中的控制器414通过接口412从二级缓存160收到执行完毕的信息后,在时间点t2通过接口412通知计算单元130关于此请求已经处理完成的信息。之后,在时间点t3,计算单元130依据代码852的指示对二级缓存160中的数据A进行运算。
参考图11。由于代码857不需要等待前一个代码执行完毕就能够被执行,因此计算单元130在时间点t1为代码856发出请求和记录编号#4给全局同步引擎410后,就能在时间点t2执行代码852,用于对二级缓存160中的数据D 进行运算。全局同步引擎410中的控制器414通过接口412收到请求后,搜索存储器416中的GSE操作表830以获取记录编号#4的记录,依据记录编号#4 的记录内容通过接口412以指示命令处理器120发出命令给DMA/SDMA控制器150,用于对内存170中的数据A和B进行归并操作而成为数据C。全局同步引擎410中的控制器414通过接口412从DMA/SDMA控制器150收到执行完毕的信息后,在时间点t3通过接口412通知计算单元130关于此请求已经处理完成的信息。因此,在时间点t1至t3之间,计算单元130和DMA/SDMA 控制器150都在运行,提高了并发度,能够减少程序核810的执行时间。
上述实施例的优点之一,通过上述全局同步引擎410的设置和程序核的重构,可让计算单元130可以专注执行自己最具优势的纯计算任务,减少花费时种周期以执行纯计算以外的任务,并减少对内存带宽的占用。
上述实施例的另一个优点,由于二次卸载可通过上述全局同步引擎410让适合的操作给中央处理器180或者图形处理器110外的其他组件执行,提供更多的应用弹性。
传统整个程序核的执行会在中央处理器180和图形处理器110间交替执行,使得整个程序核包含交错的GPU代码和CPU代码。当中央处理器180执行完CPU代码后,将后续的GPU代码(也就是装置代码)卸载到图形处理器 110执行。待图形处理器110执行完后,中央处理器180再接着执行另一段CPU 代码。如此反复交替到整个程序核执行完成。然而这样频繁的卸载和等待图形处理器110执行完毕的交互也降低执行效率。上述实施例的另一个优点在于,中央处理器180可一次性卸载更多的装置代码给图形处理器110,再由上述全局同步引擎410将其中少数适合的操作二次卸载回中央处理器180,避免过多的中央处理器180和图形处理器110之间的任务提交与等待,提高运算资源的利用率。
在另一些实施例中,GSE操作表554和计算代码556可以不在编译阶段由编译器510产生,替代性地,在运行阶段由计算单元130产生。计算单元130 在原来的程序核552中发现不适合自己执行的执行代码时,直接生成如GSE 操作表554或830所述的相应记录,并把生成的相应记录和请求一起传送给全局同步引擎410,用于指示全局同步引擎410依据此相应记录让图形处理器110 中的或图形处理器110外的组件完成操作。所属技术领域人员可适度修改图9 的步骤S940和S960,用于整合如上所述的技术方案。
本发明所述的方法中的全部或部分步骤可以由计算机程序实现,例如编译器、执行时、驱动程序等。此外,也可实现于如上所示的其他类型程序。所属技术领域中的技术人员可将本发明实施例的方法撰写成程序代码,为求简明不再加以描述。依据本发明实施例方法实施的计算机程序可存储于适当的计算机可读取存储介质,例如DVD、CD-ROM、U盘、硬盘,也可置于可通过网络 (例如,互联网,或其他适当介质)存取的网络服务器。
虽然图1、图4、图6中包含了以上描述的组件,但不排除在不违反发明的精神下,使用更多其他的附加组件,以达成更佳的技术效果。此外,虽然图 7、图9的流程图采用指定的顺序来执行,但是在不违反发明精神的情况下,所属技术领域的技术人员可以在达到相同效果的前提下,修改这些步骤之间的顺序,所以,本发明并不局限于仅使用如上所述的顺序。此外,所属技术领域的技术人员也可以将若干步骤整合为一个步骤,或者是除了这些步骤外,循序或并行地执行更多步骤,本发明也不应因此而局限。
以上所述仅为本发明较佳实施例,然其并非用以限定本发明的范围,任何熟悉本项技术的人员,在不脱离本发明的精神和范围内,可在此基础上做进一步的改进和变化,因此本发明的保护范围当以本申请的权利要求书所界定的范围为准。

Claims (14)

1.一种编译方法,适用于图形处理器的二次卸载,由处理器单元执行,其特征在于,包括:
将第一程序核中的多个执行代码重新组织成第二程序核,
其中,所述第二程序核包含操作表和计算代码,
其中,所述操作表包含多个记录,
其中,所述计算代码包含一部分的所述执行代码和同步请求,并且每个所述同步请求包含指向一个所述记录的信息,
其中,所述计算代码中的所述执行代码和所述同步请求的顺序相符于所述第一程序核中的所述执行代码的顺序,使得所述图形处理器中的计算单元能够执行所述计算代码,以及所述图形处理器中的引擎能够依据所述操作表中的每个所述记录的内容指示所述图形处理器中的或所述图形处理器外的组件完成操作。
2.如权利要求1所述的编译方法,其特征在于,所述计算代码中的每个所述执行代码或所述同步请求带有同步标识,用于指出每个所述执行代码或所述同步请求的执行是否需要等待前一个执行代码或同步请求执行完毕。
3.如权利要求1所述的编译方法,其特征在于,包含:
判断所述第二程序核中的每个所述执行代码是否适合由所述图形处理器中的所述计算单元执行;
如果是,则所述适合的执行代码增加到所述计算代码中;以及
否则,增加相应于所述不适合的执行代码的记录至所述操作表,并且增加同步请求到所述计算代码中,用于指向所述增加的记录。
4.如权利要求1所述的编译方法,其特征在于,包含:
存储所述第二程序核至存储装置,以供所述图形处理器执行。
5.如权利要求1所述的编译方法,其特征在于,每个所述记录包含一个操作由所述图形处理器中的或所述图形处理器外的特定组件运行的信息,以及包含所述操作如何运行的信息。
6.如权利要求5所述的编译方法,其特征在于,每个所述记录包含操作命令和操作参数。
7.如权利要求1所述的编译方法,其特征在于,所述图形处理器中的组件为二级缓存或直接内存存取/系统直接内存存取控制器,以及所述图形处理器外的组件为中央处理器。
8.一种计算机可读取存储介质,用于存储能够被处理单元执行的程序代码,其特征在于,所述程序代码被所述处理单元执行时实现如权利要求1至权利要求7中任一项所述的适用 于图形处理器的二次卸载的编译方法。
9.一种编译装置,适用于图形处理器的二次卸载,其特征在于,包含:
存储装置;以及
处理单元,耦接所述存储装置,用于将第一程序核中的多个执行代码重新组织成第二程序核,以及存储所述第二程序核至所述存储装置,以供所述图形处理器执行,
其中,所述第二程序核包含操作表和计算代码,
其中,所述操作表包含多个记录,
其中,所述计算代码包含一部分的所述执行代码和同步请求,并且每个所述同步请求包含指向一个所述记录的信息,
其中,所述计算代码中的所述执行代码和所述同步请求的顺序相符于所述第一程序核中的所述执行代码的顺序,使得所述图形处理器中的计算单元能够执行所述计算代码,以及所述图形处理器中的引擎能够依据所述操作表中的每个所述记录的内容指示所述图形处理器中的或所述图形处理器外的组件完成操作。
10.如权利要求9所述的编译装置,其特征在于,所述计算代码中的每个所述执行代码或所述同步请求带有同步标识,用于指出每个所述执行代码或所述同步请求的执行是否需要等待前一个执行代码或同步请求执行完毕。
11.如权利要求9所述的编译装置,其特征在于,所述处理单元判断所述第二程序核中的每个所述执行代码是否适合由所述图形处理器中的所述计算单元执行;如果是,则所述适合的执行代码增加到所述计算代码中;否则,增加相应于所述不适合的执行代码的记录至所述操作表,并且增加同步请求到所述计算代码中,用于指向所述增加的记录。
12.如权利要求9所述的编译装置,其特征在于,每个所述记录包含操作由所述图形处理器中的或所述图形处理器外的特定组件运行的信息,以及包含所述操作如何运行的信息。
13.如权利要求12所述的编译装置,其特征在于,每个所述记录包含操作命令和操作参数。
14.如权利要求9所述的编译装置,其特征在于,每个所述图形处理器中的组件为二级缓存或直接内存存取/系统直接内存存取控制器,以及所述图形处理器外的组件为中央处理器。
CN202011140485.6A 2020-10-22 2020-10-22 适用于图形处理器的二次卸载的编译方法、装置和介质 Active CN112230931B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN202011140485.6A CN112230931B (zh) 2020-10-22 2020-10-22 适用于图形处理器的二次卸载的编译方法、装置和介质
TW110113317A TWI807301B (zh) 2020-10-22 2021-04-14 適應於圖形處理器的二次卸載的編譯裝置和方法和電腦程式產品
US17/367,044 US11748077B2 (en) 2020-10-22 2021-07-02 Apparatus and method and computer program product for compiling code adapted for secondary offloads in graphics processing unit

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011140485.6A CN112230931B (zh) 2020-10-22 2020-10-22 适用于图形处理器的二次卸载的编译方法、装置和介质

Publications (2)

Publication Number Publication Date
CN112230931A CN112230931A (zh) 2021-01-15
CN112230931B true CN112230931B (zh) 2021-11-02

Family

ID=74109073

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011140485.6A Active CN112230931B (zh) 2020-10-22 2020-10-22 适用于图形处理器的二次卸载的编译方法、装置和介质

Country Status (3)

Country Link
US (1) US11748077B2 (zh)
CN (1) CN112230931B (zh)
TW (1) TWI807301B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104899481A (zh) * 2015-06-17 2015-09-09 上海斐讯数据通信技术有限公司 防止应用程序反编译的系统及其方法
CN105431827A (zh) * 2013-08-07 2016-03-23 高通股份有限公司 针对异构多处理器系统中的共享存储区域的动态地址协商
CN105518623A (zh) * 2014-11-21 2016-04-20 英特尔公司 用于在虚拟执行环境中进行高效的图形处理的装置和方法
CN110647360A (zh) * 2019-08-20 2020-01-03 百度在线网络技术(北京)有限公司 协处理器的设备执行代码的处理方法、装置、设备及计算机可读存储介质
EP3611882A1 (en) * 2018-08-15 2020-02-19 Juniper Networks, Inc. System and method for transferring packets between kernel modules in different network stacks

Family Cites Families (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7028295B2 (en) 2001-10-31 2006-04-11 Seiko Epson Corporation Dynamic java class loading for application execution
US7920701B1 (en) 2004-12-15 2011-04-05 Nvidia Corporation System and method for digital content protection
TWI390408B (zh) 2005-12-14 2013-03-21 Nvidia Corp 晶片組防護卸載引擎
US8397241B2 (en) * 2008-11-13 2013-03-12 Intel Corporation Language level support for shared virtual memory
US20100153934A1 (en) * 2008-12-12 2010-06-17 Peter Lachner Prefetch for systems with heterogeneous architectures
EP2383648B1 (en) * 2010-04-28 2020-02-19 Telefonaktiebolaget LM Ericsson (publ) Technique for GPU command scheduling
US8752064B2 (en) * 2010-12-14 2014-06-10 Advanced Micro Devices, Inc. Optimizing communication of system call requests
US20130113809A1 (en) 2011-11-07 2013-05-09 Nvidia Corporation Technique for inter-procedural memory address space optimization in gpu computing compiler
US8707314B2 (en) * 2011-12-16 2014-04-22 Advanced Micro Devices, Inc. Scheduling compute kernel workgroups to heterogeneous processors based on historical processor execution times and utilizations
WO2013089771A1 (en) 2011-12-16 2013-06-20 Intel Corporation Secure user attestation and authentication to a remote server
KR101885211B1 (ko) * 2012-01-27 2018-08-29 삼성전자 주식회사 Gpu의 자원 할당을 위한 방법 및 장치
CN102890643B (zh) * 2012-07-26 2015-01-21 上海交通大学 基于应用效果即时反馈的显卡虚拟化下的资源调度系统
US9633230B2 (en) * 2012-10-11 2017-04-25 Intel Corporation Hardware assist for privilege access violation checks
US8884906B2 (en) 2012-12-21 2014-11-11 Intel Corporation Offloading touch processing to a graphics processor
US9891949B2 (en) * 2013-03-06 2018-02-13 Nvidia Corporation System and method for runtime scheduling of GPU tasks
US10489205B2 (en) * 2013-07-19 2019-11-26 Apple Inc. Enqueuing kernels from kernels on GPU/CPU
US9201659B2 (en) * 2013-08-19 2015-12-01 Qualcomm Incorporated Efficient directed acyclic graph pattern matching to enable code partitioning and execution on heterogeneous processor cores
US9335981B2 (en) * 2013-10-18 2016-05-10 Nec Corporation Source-to-source transformations for graph processing on many-core platforms
US10235732B2 (en) * 2013-12-27 2019-03-19 Intel Corporation Scheduling and dispatch of GPGPU workloads
US10255654B2 (en) * 2014-09-12 2019-04-09 Intel Corporation Facilitating dynamic parallel scheduling of command packets at graphics processing units on computing devices
US9892544B2 (en) * 2015-12-22 2018-02-13 Intel Corporation Method and apparatus for load balancing in a ray tracing architecture
WO2017112403A1 (en) * 2015-12-24 2017-06-29 Intel Corporation Graphics processing unit operation
US20170353397A1 (en) * 2016-06-06 2017-12-07 Advanced Micro Devices, Inc. Offloading Execution of an Application by a Network Connected Device
US10423463B1 (en) * 2016-06-09 2019-09-24 Amazon Technologies, Inc. Computational task offloading for virtualized graphics
US9875076B1 (en) * 2016-07-26 2018-01-23 Wyse Technology L.L.C. Remoting client having GPU off-loader
EP3497562B1 (en) * 2016-09-05 2023-12-13 Huawei Technologies Co., Ltd. Allocation of graphics processing units for virtual machines
US20180122037A1 (en) * 2016-10-31 2018-05-03 Intel Corporation Offloading fused kernel execution to a graphics processor
US10325341B2 (en) * 2017-04-21 2019-06-18 Intel Corporation Handling pipeline submissions across many compute units
US10372497B1 (en) * 2017-09-05 2019-08-06 Parallels International Gmbh Offloading GPU computations for computers and virtual machines
US10269167B1 (en) * 2018-05-21 2019-04-23 Apple Inc. Indirect command buffers for graphics processing
US10963299B2 (en) * 2018-09-18 2021-03-30 Advanced Micro Devices, Inc. Hardware accelerated dynamic work creation on a graphics processing unit
US11200636B2 (en) * 2018-11-30 2021-12-14 Mediatek Inc. Method and apparatus for generating a series of frames with aid of synthesizer to offload graphics processing unit rendering in electronic device
US11119820B2 (en) * 2019-03-15 2021-09-14 Intel Corporation Local memory sharing between kernels
CN110852930B (zh) * 2019-10-25 2021-06-29 华中科技大学 一种基于OpenCL的FPGA图处理加速方法和系统
US11907756B2 (en) * 2020-02-20 2024-02-20 Intel Corporation Concurrent workload scheduling with multiple level of dependencies
US11080111B1 (en) * 2020-02-24 2021-08-03 Nvidia Corporation Technique for sharing context among multiple threads
US11704859B2 (en) * 2020-08-20 2023-07-18 Sony Interactive Entertainment LLC System and method for accelerated ray tracing
US11494969B2 (en) * 2020-08-20 2022-11-08 Sony Interactive Entertainment LLC System and method for accelerated ray tracing with asynchronous operation and ray transformation

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105431827A (zh) * 2013-08-07 2016-03-23 高通股份有限公司 针对异构多处理器系统中的共享存储区域的动态地址协商
CN105518623A (zh) * 2014-11-21 2016-04-20 英特尔公司 用于在虚拟执行环境中进行高效的图形处理的装置和方法
CN104899481A (zh) * 2015-06-17 2015-09-09 上海斐讯数据通信技术有限公司 防止应用程序反编译的系统及其方法
EP3611882A1 (en) * 2018-08-15 2020-02-19 Juniper Networks, Inc. System and method for transferring packets between kernel modules in different network stacks
CN110838992A (zh) * 2018-08-15 2020-02-25 丛林网络公司 在不同网络堆栈中的内核模块间传送分组的系统和方法
CN110647360A (zh) * 2019-08-20 2020-01-03 百度在线网络技术(北京)有限公司 协处理器的设备执行代码的处理方法、装置、设备及计算机可读存储介质

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
BAG: Managing GPU as buffer cache in operating systems;Hao Chen 等;《IEEE Transactions on Parallel and Distributed Systems》;20140630;第25卷(第6期);第1393-1402页 *
基于CPU-MIC异构众核环境的行星流体动力学数值模拟;吴长茂等;《数值计算与计算机应用》;20170914(第03期);第33-50页 *
基于异构多核的多类型DAG任务的响应时间分析;常爽爽等;《计算机学报》;20200615(第06期);第82-98页 *
天河超级计算机上超大规模高精度计算流体力学并行计算研究进展;徐传福 等;《计算机工程与科学》;20201015;第42卷(第10期);第1815-1826页 *

Also Published As

Publication number Publication date
US20220129255A1 (en) 2022-04-28
CN112230931A (zh) 2021-01-15
US11748077B2 (en) 2023-09-05
TW202217553A (zh) 2022-05-01
TWI807301B (zh) 2023-07-01

Similar Documents

Publication Publication Date Title
JP5752853B2 (ja) グラフィックス処理ユニットにおけるメモリの共有
TWI525540B (zh) 具有橫跨多個處理器之平行資料執行緒的映射處理邏輯
US8099584B2 (en) Methods for scalably exploiting parallelism in a parallel processing system
JP4987882B2 (ja) スレッドに最適化されたマルチプロセッサアーキテクチャ
US20120066668A1 (en) C/c++ language extensions for general-purpose graphics processing unit
US20090172683A1 (en) Multicore interface with dynamic task management capability and task loading and offloading method thereof
Tsimpourlas et al. A design space exploration framework for convolutional neural networks implemented on edge devices
CN112035397B (zh) 包括fpga的电子系统及其操作方法
US11880715B2 (en) Method and system for opportunistic load balancing in neural networks using metadata
CN112230931B (zh) 适用于图形处理器的二次卸载的编译方法、装置和介质
CN112214443B (zh) 设置于图形处理器中的二次卸载装置和方法
CN114218152B (zh) 流处理方法、处理电路和电子设备
US20220100512A1 (en) Deterministic replay of a multi-threaded trace on a multi-threaded processor
Tarakji et al. The development of a scheduling system GPUSched for graphics processing units
US20120137300A1 (en) Information Processor and Information Processing Method
US11126535B2 (en) Graphics processing unit for deriving runtime performance characteristics, computer system, and operation method thereof
US10620958B1 (en) Crossbar between clients and a cache
Rogers HSA overview
KR20110067795A (ko) 실시간 프로세스의 응답성 개선을 위한 tcm운용방법
CN114661301B (zh) 图形处理单元编译方法、装置、编译加速库和存储介质
US11967952B2 (en) Electronic system including FPGA and operation method thereof
US20220067872A1 (en) Graphics processing unit including delegator and operating method thereof
Kuan et al. C++ support and applications for embedded multicore DSP systems
Faria et al. Optimization techniques for speedup in a parallel algorithm
CN117632243A (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
GR01 Patent grant
GR01 Patent grant
CP03 Change of name, title or address

Address after: 201114 room 1302, 13 / F, building 16, 2388 Chenhang Road, Minhang District, Shanghai

Patentee after: Shanghai Bi Ren Technology Co.,Ltd.

Country or region after: China

Address before: 201114 room 1302, 13 / F, building 16, 2388 Chenhang Road, Minhang District, Shanghai

Patentee before: Shanghai Bilin Intelligent Technology Co.,Ltd.

Country or region before: China