技术新讯 > 计算推算,计数设备的制造及其应用技术 > 一种加快GPU内核启动速度的方法和装置与流程  >  正文

一种加快GPU内核启动速度的方法和装置与流程

  • 国知局
  • 2024-08-05 12:13:06

本公开实施例涉及数据处理领域,具体地涉及一种加快gpu内核启动速度的方法和装置。

背景技术:

1、图形处理器(gpu,graphics processing unit)最初是专门设计用于加速3d图形处理的芯片。然而,由于其强大的浮点运算能力和灵活的可编程能力,gpu渐渐成为一种通用的计算加速器,并被广泛应用于科学计算、人工智能、加密货币等领域。如今,gpu已经成为一个名副其实的通用计算处理器。

2、作为一种协处理器,gpu只能被动接受cpu分配的计算任务,这些任务被称为核函数或者简称为内核(kernel)。cpu通过向gpu发送kernel-dispatch aql packet(基于aql架构排队语言的内核分发包)通知gpu启动kernel。整个过程需要多次在host端主存和device端显存之间往返数据,拖慢了device的响应速度。

3、一个kernel典型的启动流程包括:程序员手动调用memcpy 函数把数据从hostmemory(主机内存)拷贝到device memory(设备内存),然后调用 launch kernel 函数通知gpu driver(gpu驱动程序)启动kernel,gpu driver进入kernel启动流程。gpu driver在host memory中组装kernel object(内核对象),并拷贝到device memory,kernel object中包含了全部的代码,同时在device侧的内存中初始化kernel arguments buffer(内核参数缓存)。准备工作完成之后,driver向device发送 kernel-dispatch aql packet(基于aql架构排队语言的内核分发包)通知device启动kernel。device收到 kernel-dispatchaql packet(基于aql架构排队语言的内核分发包)之后,开始为kernel分配计算资源,并根据packet内的kernel object ptr(内核对象指针)初始化pc(program counter,程序计数器)寄存器,然后取指单元根据pc寄存器指向的地址向device memory请求指令,第一条指令通常都是加载kernel arguments(内核参数),并把指令送到访存单元。访存单元向hostmemory请求kernel arguments,当kernel arguments取回到寄存器中,kernel的启动过程正式完成,gpu开始执行计算任务。

4、整个过程存在三次串行的访存操作,第一次是host侧向device侧发送数据、代码以及kernel启动命令,第二次是gpu core(gpu核心)从device memory取回指令,第三次是访存单元根据指令给定的地址从device memory取回kernel arguments。这些前后依赖的串行访存为kernel的冷启动带来了很高的延迟。

5、因此如何提高gpu kernel启动速度,是亟待解决的问题。

技术实现思路

1、本发明的目的在于提供一种加快gpu内核启动速度的方法和装置,以便于至少部分地解决上述问题。

2、根据本公开的一个方面,提出一种加快gpu内核启动速度方法,包括:

3、在gpu指令调度单元增加内核参数指针寄存器和内核参数大小寄存器,其中内核参数指针寄存器用于存储内核参数的起始地址,内核参数大小寄存器用于存储内核参数占据的空间大小,

4、响应于接收到基于aql架构排队语言的内核分发包,gpu的资源管理单元基于基于aql架构排队语言的内核分发包的内容初始化程序计数器寄存器、内核参数指针寄存器和内核参数大小寄存器,

5、gpu指令调度单元基于程序计数器寄存器当前的pc值向一级指令缓存发出第一条取指请求的同时,基于内核参数指针寄存器和内核参数大小寄存器向一级数据缓存发出内核参数数据预取请求,

6、两个请求都确认后,开始执行指令,进入正常的内核运行流程。

7、在一些实施例中,该方法还包括,在初始化程序计数器寄存器、内核参数指针寄存器和内核参数大小寄存器之前还包括,驱动程序向设备上的控制处理器发送基于aql架构排队语言的内核分发包,通知设备启动内核。

8、在一些实施例中,该方法还包括,控制处理器解析基于aql架构排队语言的内核分发包并至少得到内核参数指针、内核参数大小的初始化变量值,并发送给工作负载管理器,所述工作负载管理器根据所述初始化变量值初始化gpu指令调度单元中的内核参数指针寄存器和内核参数大小寄存器。

9、在一些实施例中,该方法还包括,一级指令缓存响应第一条取值请求取回当前第一条指令并缓存后续的指令,一级数据缓存响应内核参数数据预取请求从主机侧取回内核参数并缓存。

10、在一些实施例中,该方法还包括,gpu指令调度单元将第一条指令发送给计算单元,第一条指令从主机内存 加载内核参数的加载指令,加载指令加载一级数据缓存中从主机侧取回的内核参数。

11、根据本公开的另一个方面,提出一种加快gpu内核启动速度的装置,包括:

12、初始化模块,用于响应于接收到基于aql架构排队语言的内核分发包,gpu的资源管理单元根据基于aql架构排队语言的内核分发包的内容初始化程序计数器寄存器、内核参数指针寄存器和内核参数大小寄存器,

13、其中内核参数指针寄存器和内核参数大小寄存器位于gpu指令调度单元增加,内核参数指针寄存器用于存储内核参数的起始地址,内核参数大小寄存器用于存储内核参数占据的空间大小,

14、请求模块,用于gpu指令调度单元基于程序计数器寄存器当前的pc值向一级指令缓存发出第一条取指请求的同时,基于内核参数指针寄存器和内核参数大小寄存器向一级数据缓存发出内核参数数据预取请求,

15、执行模块,用于两个请求都确认后,开始执行指令,进入正常的内核运行流程。

16、在一些实施例中,该装置还包括,通知模块,用于在初始化程序计数器寄存器、内核参数指针寄存器和内核参数大小寄存器之前还包括,驱动程序向设备上的控制处理器发送基于aql架构排队语言的内核分发包,通知设备启动内核。

17、在一些实施例中,该装置还包括,初始化模块,还包括,控制处理器解析基于aql架构排队语言的内核分发包并至少得到内核参数指针、内核参数大小的初始化变量值,并发送给工作负载管理器,所述工作负载管理器根据所述初始化变量值初始化gpu指令调度单元中的内核参数指针寄存器和内核参数大小寄存器。

18、在一些实施例中,该装置还包括,响应模块,用于一级指令缓存响应第一条取值请求取回当前第一条指令并缓存后续的指令,一级数据缓存响应内核参数数据预取请求从主机侧取回内核参数并缓存。

19、在一些实施例中,该装置还包括,加载模块,用于gpu指令调度单元将第一条指令发送给计算单元,第一条指令从主机内存 加载内核参数的加载指令,加载指令加载一级数据缓存中从主机侧取回的内核参数。

20、本发明公开了一种加快gpu内核启动速度的方法,gpu的指令调度单元(isu,instruction schedule uint)增加内核参数指针、内核参数大小寄存器,当cp(commandprocessor,控制处理器)收到内核启动请求时,由wlm(workload manager,工作负载管理器)根据请求的具体内容初始化这两个寄存器,当isu向存储子系统发第一条取请求时,同时发出加载内核参数的请求,当第一条指令开始执行时,内核参数也加载完成,内核成功启动。该方法把取内核的第一条指令和取内核参数的串行过程改为并行,减少了一次访存时间,并把由软件负责的从主机内存往设备内存搬运内核参数的操作改为硬件负责,进一步降低了时延,从而进一步加快了内核的启动速度。

本文地址:https://www.jishuxx.com/zhuanli/20240802/261604.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。