设置于图形处理器中的二次卸载装置和方法转让专利

申请号 : CN202011140493.0

文献号 : CN112214443B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 不公告发明人

申请人 : 上海壁仞智能科技有限公司

摘要 :

本发明涉及一种设置于图形处理器中的二次卸载装置和方法,其中该二次卸载装置包含:引擎;和计算单元。引擎存储操作表,并且操作表包含多个记录。计算单元用于提取多个计算代码,其中,所述计算代码包含多个执行指令和多个同步请求;执行每个执行指令;以及依据同步请求发出多个请求给引擎,用于指示引擎依据操作表中的记录让图形处理器中的或所述图形处理器外的组件完成操作。本发明通过如上所述的引擎的设置,可让计算单元得以专注执行自己最具优势的纯计算任务,减少花费时种周期以执行纯计算以外的任务,并减少对内存带宽的占用。

权利要求 :

1.一种二次卸载装置,设置于图形处理器中,其特征在于,包括:引擎,存储操作表,所述操作表包含多个记录;以及计算单元,耦接所述引擎,用于提取多个计算代码,其中,所述计算代码包含多个执行代码和多个同步请求;执行每个所述执行代码;以及依据所述同步请求发出多个请求给所述引擎,用于指示所述引擎依据所述操作表中的记录让所述图形处理器中的或所述图形处理器外的组件完成操作。

2.如权利要求1所述的二次卸载装置,其特征在于,所述引擎包括:存储器,存储所述操作表;

接口;以及

控制器,耦接所述存储器和所述接口,通过所述接口从所述计算单元收到包含记录编号的每个所述请求后,搜索所述操作表以获取相应于所述记录编号的记录,依据所述获取的记录的内容通过所述接口以指示命令处理器发出命令给所述图形处理器中的或所述图形处理器外的组件。

3.如权利要求2所述的二次卸载装置,其特征在于,所述命令处理器设置在所述图形处理器之中。

4.如权利要求2所述的二次卸载装置,其特征在于,所述控制器通过所述接口从所述图形处理器中的或所述图形处理器外的所述组件收到执行完毕的信息后,通过所述接口通知所述计算单元关于相应请求已经处理完成的信息。

5.如权利要求1所述的二次卸载装置,其特征在于,所述计算单元判断每个所述执行代码或同步请求是否能够被执行;如果所述执行代码能够被执行,则执行所述执行代码;如果所述同步请求能够被执行,则发出请求给所述引擎;如果所述执行代码或同步请求不能够被执行,则等待一段时间后再进行下回合的判断。

6.如权利要求5所述的二次卸载装置,其特征在于,当所述执行代码或同步请求所关联的同步标识指出不需要等待前一个代码执行完毕时,或者当所述执行代码或同步请求所关联的同步标识指出需要等待前一个代码执行完毕且前一个代码已经执行完毕时,所述执行代码或同步请求能够被执行;当所述执行代码或同步请求所关联的同步标识指出需要等待前一个代码执行完毕且前一个代码还没执行完毕时,所述执行代码或同步请求不能够被执行。

7.如权利要求1所述的二次卸载装置,其特征在于,每个所述记录包含一个操作由所述图形处理器中的或所述图形处理器外的特定组件运行的信息,以及包含所述操作如何运行的信息。

8.如权利要求7所述的二次卸载装置,其特征在于,每个所述记录包含操作命令和操作参数。

9.如权利要求1所述的二次卸载装置,其特征在于,所述图形处理器中的组件为二级缓存或直接内存存取/系统直接内存存取控制器,以及所述图形处理器外的组件为中央处理器。

10.一种二次卸载方法,由图形处理器中的计算单元和引擎共同执行,其特征在于,包括:

所述计算单元提取多个计算代码,其中,所述计算代码包含多个执行代码和多个同步请求;

所述计算单元执行每个所述执行代码;以及所述计算单元依据所述同步请求发出多个请求给所述引擎,用于指示所述引擎依据操作表中的记录让所述图形处理器中的或所述图形处理器外的组件完成操作。

11.如权利要求10所述的二次卸载方法,其特征在于,包括:当所述引擎从所述计算单元收到包含记录编号的每个所述请求后,搜索所述操作表以获取相应于所述记录编号的记录,依据所述获取的记录的内容指示命令处理器发出命令给所述图形处理器中的或所述图形处理器外的组件。

12.如权利要求11所述的二次卸载方法,其特征在于,包括:当所述引擎从所述图形处理器中的或所述图形处理器外的所述组件收到执行完毕的信息后,通知所述计算单元关于相应请求已经处理完成的信息。

13.如权利要求10所述的二次卸载方法,其特征在于,包括:所述计算单元判断每个所述执行代码或同步请求是否能够被执行;

如果所述执行代码能够被执行,则所述计算单元执行所述执行代码;

如果所述同步请求能够被执行,则所述计算单元发出请求给所述引擎;以及如果所述执行代码或同步请求不能够被执行,则等待一段时间后再进行下回合的判断。

14.如权利要求13所述的二次卸载方法,其特征在于,当所述执行代码或同步请求所关联的同步标识指出不需要等待前一个代码执行完毕时,或者当所述执行代码或同步请求所关联的同步标识指出需要等待前一个代码执行完毕且前一个代码已经执行完毕时,所述执行代码或同步请求能够被执行;当所述执行代码或同步请求所关联的同步标识指出需要等待前一个代码执行完毕且前一个代码还没执行完毕时,所述执行代码或同步请求不能够被执行。

15.如权利要求10所述的二次卸载方法,其特征在于,每个所述记录包含一个操作由所述图形处理器中的或所述图形处理器外的特定组件运行的信息,以及包含所述操作如何运行的信息。

16.如权利要求15所述的二次卸载方法,其特征在于,每个所述记录包含操作命令和操作参数。

17.如权利要求10所述的二次卸载方法,其特征在于,所述图形处理器中的组件为二级缓存或直接内存存取/系统直接内存存取控制器,以及所述图形处理器外的组件为中央处理器。

18.一种二次卸载装置,设置于图形处理器中,其特征在于,包括:引擎;以及

计算单元,耦接所述引擎,用于提取多个计算代码;当每个所述计算代码适合由所述计算单元执行时,执行所述计算代码;以及当每个所述计算代码不适合由所述计算单元执行时,生成相应记录,并且发出请求和所述相应记录给所述引擎,用于指示所述引擎依据所述相应记录让所述图形处理器中的或所述图形处理器外的组件完成操作。

19.如权利要求18所述的二次卸载装置,其特征在于,每个所述相应记录包含一个操作由所述图形处理器中的或所述图形处理器外的特定组件运行的信息,以及包含所述操作如何运行的信息。

20.如权利要求19所述的二次卸载装置,其特征在于,每个所述相应记录包含操作命令和操作参数。

说明书 :

设置于图形处理器中的二次卸载装置和方法

技术领域

[0001] 本发明涉及用于通用计算领域的图形处理器,尤指一种设置于图形处理器中的二次卸载装置和方法。

背景技术

[0002] 目前包含图形处理器(Graphics Processing Unit,GPU)的计算系统中还包含中央处理器(Central Processing Unit,CPU)。中央处理器适合处理传统的应用程序的数值
运算,而图形处理器适合处理计算机图形(Computer Graphics) 的运算。这样的计算系统
被编程后可执行各种应用任务,包含但不限于:线性和非线性数据转化、数据库操作、大数
据运算、人工智能计算、音频、视频数据的编码、解码、建模操作、图像渲染操作等。为了实现
异构高并发的计算,本发明提出一种设置于图形处理器中的二次卸载装置和方法。

发明内容

[0003] 有鉴于此,如何实现异构高并发的计算,是用于通用计算领域的图形处理器的重要课题。
[0004] 本发明涉及一种设置于图形处理器中的二次卸载装置,包含:引擎;和计算单元。引擎存储操作表,并且操作表包含多个记录。计算单元用于提取多个计算代码,其中,所述
计算代码包含多个执行指令和多个同步请求;执行每个执行指令;以及依据同步请求发出
多个请求给引擎,用于指示引擎依据操作表中的记录让图形处理器中的或所述图形处理器
外的组件完成操作。
[0005] 本发明还涉及一种在图形处理器中执行的二次卸载方法,包含:计算单元提取多个计算代码,其中,计算代码包含多个执行指令和多个同步请求;计算单元执行每个执行指
令;以及计算单元依据同步请求发出多个请求给引擎,用于指示引擎依据操作表中的记录
让图形处理器中的或图形处理器外的组件完成操作。
[0006] 本发明涉及一种设置于图形处理器中的二次卸载装置,包含:引擎;以及计算单元。计算单元用于提取多个计算代码;当每个计算代码适合由计算单元执行时,执行计算代
码;以及当每个计算代码不适合由计算单元执行时,生成相应记录,并且发出请求和相应记
录给引擎,用于指示引擎依据相应记录让所图形处理器中的或图形处理器外的组件完成操
作。
[0007] 上述实施例的优点之一,通过如上所述的引擎的设置,可让计算单元得以专注执行自己最具优势的纯计算任务,减少花费时钟 周期以执行纯计算以外的任务,并减少对内
存带宽的占用。
[0008] 本发明的其他优点将配合以下的说明和附图进行更详细的解说。

附图说明

[0009] 此处所说明的附图用于提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。
[0010] 图1为依据本发明实施例的用于实施一次卸载的计算系统的框图。
[0011] 图2为依据本发明实施例的装置代码示意图。
[0012] 图3为依据本发明实施例的二次卸载示意图。
[0013] 图4为依据本发明实施例的用于实施二次卸载的计算系统的系统架构图。
[0014] 图5为依据本发明实施例的二次卸载的实施过程示意图。
[0015] 图6为依据本发明实施例的编译计算机的系统架构图。
[0016] 图7为依据本发明实施例的编译方法流程图。
[0017] 图8为依据本发明实施例的重构后的程序核的示意图。
[0018] 图9为依据本发明实施例的由计算单元的控制电路执行的控制方法流程图。
[0019] 图10显示依据本发明实施例的应用二次卸载的顺序执行的示例。
[0020] 图11显示依据本发明实施例的应用二次卸载的并行执行的示例。
[0021] 其中,附图中符号的简单说明如下:
[0022] 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:时间点。

具体实施方式

[0023] 以下将配合相关附图来说明本发明的实施例。在这些附图中,相同的标号表示相同或类似的组件或方法流程。
[0024] 必须了解的是,使用于本说明书中的“包含”、“包括”等词,是用于表示存在特定的技术特征、数值、方法步骤、作业处理、组件和/或组件,但并不排除可加上更多的技术特征、
数值、方法步骤、作业处理、组件、组件,或以上的任意组合。
[0025] 本发明中使用如“第一”、“第二”、“第三”等词是用于修饰权利要求中的组件,并非用于表示之间具有优先权顺序,先行关系,或者是一个组件先于另一个组件,或者是执行方
法步骤时的时间先后顺序,仅用于区别具有相同名字的组件。
[0026] 必须了解的是,当组件描述为“连接”或“耦接”至另一组件时,可以是直接连结、或耦接至其他组件,可能出现中间组件。相反地,当组件描述为“直接连接”或“直接耦接”至另
一组件时,其中不存在任何中间组件。用于描述组件之间关系的其他词语也可以类似方式
解读,例如“介于”相对于“直接介于”,或者“邻接”相对于“直接邻接”等等。
[0027] 参考图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)。
[0028] 一般来说,中央处理器180和图形处理器110适合执行的任务不同,中央处理器180较适合处理复杂的串行逻辑、复杂的控制流、与系统的输入输出装置间的交互,而图形处理
器110较适合单指令多数据的并发运算,例如单指令多数据流(Single Instruction 
Multiple Data,SIMD)指令、单指令多线程(Single Instruction Multiple Thread,SIMT)
技术等。为了有效运用图形处理器110能力,中央处理器180可卸载(Offload)一系列的装置
代码给图形处理器110,其过程大致如下所述:中央处理器180在内存185中准备装置代码
(Device Code) 所需的数据,然后发出命令给图形处理器110中的命令处理器(Command
Processor,CP)120,请求从内存185复制数据到图形处理器110中的内存170。命令处理器
120可通过直接内存存取/系统直接内存存取控制器(Direct Memory Access/System 
Direct 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)。
[0029] 举例来说,参考图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。归并操作可包含各
式各样的运算,例如,加法、减法、乘法、除法、取大值、取小值、各种比较等。
[0030] 在一些实施方式中,图形处理器110让所有的装置代码的执行都给计算单元130主导。然而,这可能造成计算单元130的工作量庞大,产生系统运行的瓶颈。并且,当计算单元
130运行时,图形处理器110中的其他组件(如命令处理器120、二级缓存(Layer 2,L2 
Cache)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)等宝贵的系统资源,影响整体性能。
[0031] 为了解决上述实施方式的缺点,从一个方面来说,本发明实施例在图形处理器110执行二次卸载(Secondary Offload),用于将中央处理器180传送来的装置代码的任务再交
给适合的组件执行,包含图形处理器110之中的或图形处理器110外的适合组件。
[0032] 在二次卸载的一些实施例,参考图3,图形处理器110可将装置代码220 和250的任务交给计算单元130完成。计算单元130可执行各式各样的操作,例如,整数、浮点数的加法
和乘法计算、比较操作、布尔(Boolean)运算、比特位移、代数函数(如平面插值、三角函数、
指数函数、对数函数)等。图形处理器110可将装置代码210、230、240和260的任务交给二级
缓存160完成,并可将装置代码270的任务交给DMA/SDMA控制器150完成,让 DMA/SDMA控制
器150直接从内存170中的指定地址读取数据并存储至计算单元130中的一级缓存,并且从
计算单元130的一级缓存读取计算结果并存储至内存170中的指定地址。
[0033] 在二次卸载的另一些实施例,图形处理器110可将特定装置代码的任务交给图形处理器110外,但不包含中央处理器180的组件执行,例如特殊应用集成电路(Application 
Specific Integrated Circuit,ASIC)、现场可编程逻辑门数组(Field Programmable 
Gate Array,FPGA)、加速器(Accelerator)等。
[0034] 在二次卸载的另一些实施例,图形处理器110可将适合中央处理器180执行的装置代码再交回给中央处理器180,例如,包括大段串行逻辑、复杂控制流(如If‑else条件判断
跳转)、与系统输入输出有大量交互的装置代码等。
[0035] 从一个方面来说,参考图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用于存储即将进行执行操作的必要信息。
[0036] 从另一个方面来说,参考图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等。
[0037] 整个实施过程可分为两个阶段:编译阶段;和运行阶段。在编译阶段,编译器510进行代码的重构。在运行阶段,通过命令处理器120和全局同步引擎 410的协同合作,实现多
模块(或组件)的并发执行。
[0038] 通常,程序员可通过编译计算机完成编译阶段。参考图6,编译计算机60 包含处理单元610、内存620、显示接口630、输入接口640和存储装置650。处理单元610可使用多种方
式实施,如使用通用硬件(例如,单处理器、具有并行处理能力的多处理器、图形处理器或其
他具有运算能力的处理器),并且在执行编译器510的程序代码时,提供如后所述的功能。内
存620可为动态随机存取存储器(Dynamic Random Access Memory,DRAM),提供易失性的存
储空间,用于缓存处理单元610在执行编译的过程中所需要的数据,例如,变量、数据表等,
以及从存储装置650读取的数据,例如待分析的程序核552。存储装置650可为硬盘(Hard 
Disk)、固态硬盘等,提供非易失性的存储空间,用于存储重构后的GSE操作表554和计算代
码556。处理单元211另可通过显示接口630和输入接口640分别连接显示器和输入装置。
[0039] 在编译阶段中,处理单元610加载并执行编译器510的程序代码时可实现如图7所示的方法流程图,用于根据原来的程序核552中的执行代码生成可适应于如图4所述的异构
系统的程序核570,包含GSE操作表554和计算代码556。在另一些实施例中,GSE操作表554和
计算代码556也可让不同于图4 所述的异构系统实现多模块的并发执行,本发明并不因此
受限制。详细步骤说明如下:
[0040] 步骤S710:获取原始程序核552中的第一个或下一个执行代码。
[0041] 步骤S720:判断获取的执行代码的操作是否适合由计算单元130执行。如果是,流程继续进行步骤S730的处理。否则,流程继续进行步骤S740的处理。当编译器510发现获取
的执行代码的操作不适合由计算单元130执行时,就把这个执行代码标注出来。举例来说,
以下操作不适合由计算单元130执行:
[0042] 从内存中预取数据至二级缓存的操作;
[0043] 对二级缓存的指定局部进行清理的操作;
[0044] 对内存中的多段数据进行归并操作;
[0045] 大段串行逻辑的操作;
[0046] 具有复杂的控制流的操作(如If‑else条件判断跳转等);
[0047] 与系统输入输出有大量交互的操作。
[0048] 步骤S730:将获取的执行代码增加到重构后的计算代码556。此外,编译器510更判断此执行代码的执行是否需要等待之前获取的执行代码执行完毕。如果需要,新增此执行
代码需要同步的信息。如果不需要,新增此执行代码不需要同步的信息。编译器510可使用
同步标识(Synchronization Flag)来表示:“1”代表需要;“0”代表不需要。新增到重构后的
计算代码556的执行代码的顺序相符于获取的执行代码在原始程序核552中的顺序。
[0049] 步骤S740:增加相应于获取的执行代码的记录(Entry)至GSE操作表554。记录中包含此操作由哪个模块(如DMA/SDMA控制器150、二级缓存160、内存170、中央处理器180、特殊
应用集成电路440、现场可编程逻辑门数组 450、加速器460或其他不是计算单元130的组
件)运行的信息。例如,步骤 S720中示例的第一个和第二个操作适合由二级缓存160执行,
第三个操作适合由DMA/SDMA控制器150执行,第四个至第六个操作适合中央处理器180 执
行。此外,记录中还包含此操作如何运行的信息,如操作命令和操作参数,相应于步骤S710
中获取的执行代码。
[0050] 步骤S750:增加同步请求(Synchronization Hook)至重构后的计算代码 556,每个同步请求携带参数,用于指向GSE操作表554的新增加记录。此外,编译器510更判断此同
步请求的执行是否需要等待之前获取的执行代码执行完毕。如果需要,新增此同步请求需
要同步的信息。如果不需要,新增此同步请求不需要同步的信息。编译器510可使用同步标
识来表示:“1”代表需要;“0”代表不需要。增加到重构后的计算代码556的同步请求的顺序
相符于获取的执行代码在原始程序核552中的顺序。
[0051] 步骤S760:判断是否原始程序核552中的所有执行代码都处理完毕。如果是,结束编译。否则,流程继续进行步骤S710的处理。
[0052] 参考图5中的示例,由于原始程序核552中的执行代码1和执行代码3不适合交给计算单元130执行,因此,通过编译器510编译后,GSE操作表554 中包含了两个记录,第一个记
录存储了操作1适合由那个模块运行以及如何运行的信息,而第二个记录存储了操作3适合
由那个模块运行以及如何运行的信息。在重构后的计算代码556中,原来的执行代码1被替
换成同步请求,携带指向GSE操作表554中第一个记录的信息,并且原来的执行代码3被替换
成同步请求,携带指向GSE操作表554中第二个记录的信息。编译后的GSE操作表554和计算
代码556会存储到电子装置10中的存储装置,使得通用图形处理器100能够运行重构后的程
序核570。
[0053] 在另一些实施例中,电子装置10也可用于完成编译阶段。中央处理器180 可加载并执行编译器510的程序代码已完成如图7所示的方法流程图,本发明并不局限于用专属的
编译计算机完成编译阶段。
[0054] 参考图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,启动代码的执行。
[0055] 参考图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”代表不
需要同步。
[0056] 计算单元130包含控制电路,用于控制计算代码850的执行。参考图9所示的由计算单元130的控制电路执行的控制方法流程图。
[0057] 步骤S910:提取计算代码850中的第一个或下一个代码。
[0058] 步骤S920:判断此代码是否能够被执行。如果是,则流程继续进行步骤 S940的处理。否则,流程继续进行步骤S930的处理。举例来说,当此代码所关联的同步标识指出不需
要等待前一个代码执行完毕时,代表此代码能够被执行。当此代码所关联的同步标识指出
需要等待前一个代码执行完毕且前一个代码已经执行完毕时,代表此代码能够被执行。当
此代码所关联的同步标识指出需要等待前一个代码执行完毕且前一个代码还没执行完毕
时,代表此代码不能够被执行。
[0059] 步骤S930:等待一段预设的时间。
[0060] 步骤S940:判断提取的代码是否是同步请求。如果是,则流程继续进行步骤S960的处理。否则(也就是提取的代码是能够被计算单元执行的代码),流程继续进行步骤S950的
处理。
[0061] 步骤S950:依据代码执行指定的计算。
[0062] 步骤S960:向全局同步引擎410发出携带记录编号的请求。全局同步引擎410收到请求后,搜索GSE操作表830以获取记录编号所指的记录,并且依据记录中的信息通过命令
处理器120发出适当命令给适当的组件。全局同步引擎410从组件收到执行完毕的信息后,
通知计算单元130此请求已经完成的信息。
[0063] 参考图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进行运算。
[0064] 参考图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的执行时间。
[0065] 上述实施例的优点之一,通过上述全局同步引擎410的设置和程序核的重构,可让计算单元130得以专注执行自己最具优势的纯计算任务,减少花费时种周期以执行纯计算
以外的任务,并减少对内存带宽的占用。
[0066] 上述实施例的另一个优点,由于二次卸载可通过上述全局同步引擎410将适合的操作发给中央处理器180或者图形处理器110外的其他组件执行,提供更多的应用弹性。
[0067] 传统整个程序核的执行会在中央处理器180和图形处理器110间交替执行,使得整个程序核包含交错的GPU代码和CPU代码。当中央处理器180执行完 CPU代码后,将后续的
GPU代码(也就是装置代码)卸载到图形处理器110 执行。待图形处理器110执行完后,中央
处理器180再接着执行另一段CPU 代码。如此反复交替到整个程序核执行完成。然而这样频
繁的卸载和等待图形处理器110执行完毕的交互也降低执行效率。上述实施例的另一个优
点在于,中央处理器180可一次性卸载更多的装置代码给图形处理器110,再由上述全局同
步引擎410将其中少数适合的操作二次卸载回中央处理器180,避免过多的中央处理器180
和图形处理器110之间的任务提交与等待,提高运算资源的利用率。
[0068] 在另一些实施例中,GSE操作表554和计算代码556可以不在编译阶段由编译器510产生,替代性地,在运行阶段由计算单元130产生。计算单元130 在原来的程序核552中发现
不适合自己执行的计算代码时,直接生成如GSE 操作表554或830所述的相应记录,并把生
成的相应记录和请求一起传送给全局同步引擎410,用于指示全局同步引擎410依据此相应
记录让图形处理器110 中的或图形处理器110外的组件完成操作。所属技术领域人员可适
度修改图9 的步骤S940和S960,用于整合如上所述的技术方案。
[0069] 本发明所述的方法中的全部或部分步骤可以由计算机程序实现,例如编译器、执行时、驱动程序等。此外,也可实现于如上所示的其他类型程序。所属技术领域中的技术人
员可将本发明实施例的方法撰写成程序代码,为求简明不再加以描述。依据本发明实施例
方法实施的计算机程序可存储于适当的计算机可读取存储介质,例如DVD、CD‑ROM、U盘、硬
盘,也可置于可通过网络 (例如,互联网,或其他适当介质)存取的网络服务器。
[0070] 虽然图1、图4、图6中包含了以上描述的组件,但不排除在不违反发明的精神下,使用更多其他的附加组件,以达成更佳的技术效果。此外,虽然图 7、图9的流程图采用指定的
顺序来执行,但是在不违反发明精神的情况下,所属技术领域的技术人员可以在达到相同
效果的前提下,修改这些步骤之间的顺序,所以,本发明并不局限于仅使用如上所述的顺
序。此外,所属技术领域的技术人员也可以将若干步骤整合为一个步骤,或者是除了这些步
骤外,循序或并行地执行更多步骤,本发明也不应因此而局限。
[0071] 以上所述仅为本发明较佳实施例,然其并非用以限定本发明的范围,任何熟悉本项技术的人员,在不脱离本发明的精神和范围内,可在此基础上做进一步的改进和变化,因
此本发明的保护范围当以本申请的权利要求书所界定的范围为准。