图形处理器的调用方法、中央处理器及设备与流程

未命名 10-10 阅读:81 评论:0


1.本技术涉及计算机领域,尤其涉及一种图形处理器的调用方法、中央处理器及设备。


背景技术:

2.随着人工智能以及深度学习领域不断发展,这些领域中的计算任务常常需要大量的计算资源。然而,受中央处理器的运行资源的限制,当计算任务需要大量计算资源时,中央处理器无法及时提供计算任务所对应的计算结果,处理效率较低。
3.目前,图形处理器(graphics processing unit,gpu)凭借其强大的计算能力受到了广泛的重视。如何通过调用图形处理器来提高计算任务的处理效率是一个急需解决的问题。


技术实现要素:

4.本技术提供的图形处理器的调用方法、中央处理器及设备,用以解决相关技术中中央处理器处理效率较低的问题。
5.第一方面,本技术提供一种图形处理器的调用方法,所述方法应用于中央处理器,所述中央处理器中运行有第一进程、以及第二进程,所述方法包括:
6.所述第一进程响应于调用指令,所述调用指令用于指示调取与所述第一进程的执行任务对应的编程接口,调用与所述编程接口对应的劫持代码,所述劫持代码用于指示发出运行请求;
7.所述第一进程运行所述劫持代码,向第二进程发送所述第一进程对应的运行请求,所述运行请求用于指示第二进程调用所述编程接口;
8.所述第二进程响应于所述第一进程对应的运行请求,通过所述第一进程对应的编程接口,调用图形处理器。
9.在一些实施例中,所述编程接口具有调用函数标识,所述调用函数标识用于指示函数类型;所述第一进程调用与所述编程接口对应的劫持代码,包括:
10.响应于所述编程接口的函数类型为普通类型,所述第一进程根据预设劫持库,调用与所述编程接口的调用函数标识对应的劫持代码,其中,所述预设劫持库中包括多个劫持代码。
11.在一些实施例中,所述方法,还包括:
12.响应于所述编程接口的函数类型为隐藏类型,所述第一进程根据预设劫持库,确定与所述编程接口的调用函数标识对应的劫持指针,并基于所述劫持指针,调用所述劫持指针对应的劫持代码,所述劫持指针用于指示所述编程接口对应的劫持代码的位置。
13.在一些实施例中,所述执行任务用于表征第一进程向所述图形处理器中的显存发送存储数据,所述执行任务包括:第一虚拟地址,所述第一虚拟地址用于表征对于所述第一进程,所述存储数据的存储地址;所述方法还包括:
14.响应于所述第一虚拟地址位于第一内存所对应的地址范围中,所述第一进程依据预设的映射关系将所述第一虚拟地址转换为第二虚拟地址,并向所述第二进程发送所述第二虚拟地址;所述第二虚拟地址用于表征对于所述第二进程,所述存储数据的存储地址;所述第一内存为所述第一进程与所述第二进程的共享内存;
15.所述第二进程依据所述第二虚拟地址,获取所述存储数据;
16.所述第二进程响应于所述第一进程对应的运行请求,通过所述第一进程对应的编程接口,调用图形处理器,包括:
17.响应于所述第一进程对应的运行请求,所述第二进程通过所述第一进程对应的编程接口,调用图形处理器,并将所述存储数据发送至所述图形处理器。
18.在一些实施例中,所述方法还包括:
19.响应于所述第一虚拟地址位于第一内存所对应的地址范围外,所述第一进程将依据所述第一虚拟地址获取的存储数据发送至所述第一内存;
20.所述第二进程从所述第一内存中获取所述存储数据。
21.在一些实施例中,所述第一内存包括第一子内存以及第二子内存;所述第一进程将依据所述第一虚拟地址获取的存储数据发送至所述第一内存,包括:
22.所述第一进程将获取到的存储数据划分为多个子存储数据,并将所述多个子存储数据依次交替传输至所述第一子内存和所述第二子内存;
23.所述第二进程从所述第一内存中获取所述存储数据,包括:
24.所述第二进程从所述第一子内存和所述第二子内存中交替获取所述多个子存储数据。
25.在一些实施例中,所述第一进程向第二进程发送所述第一进程对应的运行请求,包括:
26.所述第一进程将所述第一进程对应的运行请求发送至第一内存中与所述第一进程对应的第一消息队列;所述第一内存为所述第一进程与所述第二进程的共享内存,所述第一消息队列与所述第一进程一一对应;
27.所述第一进程调整所述第一消息队列对应的第一信号量参数,所述第一信号量参数用于表征第一消息队列中可读取的运行请求的数量;
28.所述第二进程根据调整后的第一信号量参数,获取所述第一消息队列中的运行请求。
29.在一些实施例中,所述第一进程将所述第一进程对应的运行请求发送至第一内存中与所述第一进程对应的第一消息队列,包括:
30.响应于所述运行请求所占内存值小于等于第一值,所述第一进程将所述运行请求发送至所述第一消息队列。
31.在一些实施例中,所述方法还包括:
32.响应于所述运行请求所占内存值大于第一值,所述第一进程将所述运行请求发送至所述第一内存中的临时内存中,并生成标记信息发送至所述第一消息队列;其中,所述临时内存为所述第一进程申请的临时存储区,所述标记信息指示所述运行请求的位置信息;
33.所述第二进程根据调整后的第一信号量参数,获取所述第一消息队列中的运行请求,包括:
34.所述第二进程根据调整后的第一信号量参数,获取所述第一消息队列中的标记信息,并依据所述标记信息获取所述临时内存中的运行请求;
35.所述第二进程释放所述临时内存。
36.在一些实施例中,其中,所述方法还包括:
37.所述第二进程将所述图形处理器返回的运行结果发送至第一内存中与所述运行结果对应的第一进程对应的第二消息队列,所述第一内存为所述第一进程与所述第二进程的共享内存,所述第二消息队列与所述第一进程一一对应;
38.所述第二进程调整所述第二消息队列对应的第二信号量参数,所述第二信号量参数用于表征第二消息队列中可读取的运行结果的数量;
39.所述第一进程根据调整后的第二信号量参数,获取所述第二消息队列中的运行结果。
40.在一些实施例中,所述第一进程包括多个第一线程,所述第一线程与第一线程标识一一对应;所述运行结果具有第一线程标识;
41.所述第一进程根据调整后的第二信号量参数,获取所述第二消息队列中的运行结果,包括:
42.所述第一进程根据调整后的第二信号量参数,唤醒所述第一进程下多个第一线程,以使多个第一线程分别获取所述第二消息队列中与各所述第一线程的第一线程标识所对应的运行结果。
43.在一些实施例中,所述第一进程包括多个第一线程,所述第一线程与第一线程标识一一对应;所述运行结果具有第一线程标识;
44.所述第一进程根据调整后的第二信号量参数,获取所述第二消息队列中的运行结果,包括:
45.所述第一进程根据调整后的第二信号量参数以及预设的第一线程标识与容器之间的对应关系,将所述第二消息队列中的运行结果存储到与所述运行结果中的第一线程标识对应的容器中,所述容器是链表形式的存储结构;
46.所述第一进程唤醒与所述容器对应的第一线程,以使第一线程从对应的容器中获取与所述第一线程的第一线程标识对应的运行结果。
47.在一些实施例中,所述容器的数量为多个,且一个容器对应于多个第一线程标识。
48.在一些实施例中,所述第一进程响应于调用指令之前,所述方法还包括:
49.所述第二进程在所述第二进程中创建与所述图形处理器对应的第二线程;
50.所述第一进程向所述第二进程发送所述第一进程对应的连接请求,其中,所述连接请求表征与所述第二进程建立通信连接;
51.所述第二进程响应于所述第一进程对应的连接请求,在所述第二进程中创建与所述第一进程对应的第三线程;所述第三线程用于获取与其对应的第一进程发送的运行请求;
52.所述第二进程响应于所述第一进程对应的运行请求,通过所述第一进程对应的编程接口,调用图形处理器,包括:
53.所述第二进程中的第二线程响应于所述第三线程发送的运行请求,通过所述编程接口,调用图形处理器。
54.在一些实施例中,所述编程接口具有调用函数标识;所述第二进程响应于所述第一进程对应的运行请求,通过所述第一进程对应的编程接口,调用图形处理器,包括:
55.响应于所述编程接口对应的调用函数标识属于同步函数标识,所述第二进程根据替换库,调用与所述编程接口的调用函数标识对应的替换代码;所述替换代码用于将与所述调用函数标识对应的编程接口的同步功能代码替换为异步功能代码,所述替换库中包括多个替换代码;
56.所述第二进程通过所述第一进程对应的编程接口的替换代码,调用图形处理器,并接收所述图形处理器返回的异步通知,所述异步通知用于指示第二进程继续运行第一进程发送的运行请求。
57.在一些实施例中,所述运行请求中包括所述编程接口的接口信息,所述第二进程响应于所述第一进程对应的运行请求,通过所述第一进程对应的编程接口,调用图形处理器,包括:
58.所述第二进程响应于所述第一进程对应的运行请求中的接口信息,确定所述第一进程对应的编程接口,并通过所述第一进程对应的编程接口,调用图形处理器。
59.在一些实施例中,所述编程接口为统一计算设备架构驱动应用程序编程接口。
60.在一些实施例中,所述第一进程的数量为多个。
61.第二方面,本技术提供一种中央处理器,所述中央处理器用于实现如第一方面任一项所述的方法。
62.第三方面,本技术提供一种控制芯片,所述控制芯片中包括如第二方面所述的中央处理器、以及图形处理器。
63.第四方面,本技术提供一种车辆,所述车辆中设置有如第三方面所述的控制芯片。
64.第五方面,本技术提供一种电子设备,包括:存储器,中央处理器、以及图形处理器;
65.存储器;用于存储所述中央处理器可执行指令的存储器;
66.其中,所述中央处理器,用于根据所述可执行指令执行如第一方面任一项所述的方法。
67.第六方面,本技术提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如第一方面任一项所述的方法。
68.第七方面,本技术一种计算机程序产品,所述计算机程序产品包括计算机程序,该计算机程序被处理器执行时实现第一方面中任一项所述的方法。
69.本技术提供的图形处理器的调用方法、中央处理器及设备,所述方法应用于中央处理器,所述中央处理器中运行有第一进程、以及第二进程,所述方法包括:所述第一进程响应于调用指令,所述调用指令用于指示调取与所述第一进程的执行任务对应的编程接口,调用与所述编程接口对应的劫持代码,所述劫持代码用于指示发出运行请求;所述第一进程运行所述劫持代码,向第二进程发送所述第一进程对应的运行请求,所述运行请求用于指示第二进程调用所述编程接口;所述第二进程响应于所述第一进程对应的运行请求,通过所述第一进程对应的编程接口,调用图形处理器,并由图形处理器执行第一进程的执行任务,进而提高执行任务的处理效率。
附图说明
70.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本技术的实施例,并与说明书一起用于解释本技术的原理。
71.图1为本技术实施例提供的一种图形处理器的调用方法的流程示意图;
72.图2为本技术实施例提供的第一种应用场景示意图;
73.图3为本技术实施例提供的一种向图形处理器发送存储数据的方法的流程示意图;
74.图4为本技术实施例提供的一种第一进程与第二进程进行数据传输的场景示意图;
75.图5为本技术实施例提供的一种第一进程向第二进程发送运行请求的方法的流程示意图;
76.图6为本技术实施例提供的第二种应用场景示意图;
77.图7为本技术实施例提供的又一种第一进程向第二进程发送运行请求的方法的流程示意图;
78.图8为本技术实施例提供的一种第二进程向第一进程返回运行结果的方式的流程示意图;
79.图9为本技术实施例提供的第三种应用场景示意图;
80.图10为本技术实施例提供的第四种应用场景示意图;
81.图11为本技术实施例提供的一种第一进程与第二进程建立通信连接的方法的流程示意图;
82.图12为本技术实施例提供的第五种应用场景示意图;
83.图13为本技术实施例提供的一种第二进程调用图形处理器的方法的流程示意图;
84.图14为本技术实施例提供的一种图形处理器工作的流程示意图;
85.图15为本技术实施例中提供的一种电子设备的结构示意图。
86.通过上述附图,已示出本技术明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本技术构思的范围,而是通过参考特定实施例为本领域技术人员说明本技术的概念。
具体实施方式
87.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本技术相一致的所有实施方式。相反,它们仅是与本技术的一些方面相一致的装置和方法的例子。
88.随着人工智能以及深度学习领域的不断发展,在采用上述技术进行相关计算或者处理时,通常需要消耗中央处理器较多的计算资源。受中央处理器的运行资源的限制,当计算任务需要大量计算资源时,中央处理器无法及时提供计算任务所对应的计算结果,处理效率较低。
89.图形处理器(graphics processing unit,gpu),是一种具有强大计算能力的微处理器,可用于协助中央处理器(central processing unit,cpu)执行图像处理等计算任务。
如何通过调用图形处理器来提高计算任务的处理效率是一个急需解决的问题。
90.一个示例中,中央处理器中需要调用图形处理器的进程可以通过直接调用图形处理的编程接口来实现对图形处理器的调用。然而,受gpu硬件资源的限制,现有的gpu不支持多个进程同时访问,进而造成了gpu中大量计算资源的浪费。
91.本技术提供的图形处理器的调用方法、中央处理器及设备,用以解决上述至少一项技术问题。
92.下面以具体地实施例对本技术的技术方案以及本技术的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本技术的实施例进行描述。
93.图1为本技术实施例提供的一种图形处理器的调用方法的流程示意图。本实施例所提供的方法应用于中央处理器,其中,中央处理器中运行有第一进程、以及一个第二进程。在一些实施例中,本技术实施例提供的图形处理器的调用方法还可以应用于嵌入式设备,例如,xavier芯片,该芯片中集成有gpu以及cpu,可搭载于车辆中,用于处理来自车辆雷达、摄像头、激光雷达和超声波系统的自主驾驶数据。
94.本实施例中提供的方法包括以下步骤:
95.s101、第一进程响应于调用指令,调用指令用于指示调取与第一进程的执行任务对应的编程接口,调用与编程接口对应的劫持代码,劫持代码用于指示发出运行请求。
96.示例性地,目前在进程需要调用图形处理器时,通常都是通过调用图形处理器的编程接口,并且通过对该编程接口进行解析并执行该编程接口的执行代码来实现的,其中,编程接口的执行代码可以理解为图形处理器的开发者所提供的编程接口的具体执行逻辑。本实施例中,在第一进程在执行过程中,当需要调用图形处理器的编程接口时,此时,第一进程响应于调用指令,直接调用于该编程接口对应的劫持代码,其中,该劫持代码用于表征向第二进程发送运行请求。即,在本步骤中,第一进程响应于调用该第一进程的执行任务对应的编程接口的调用指令时,此时,第一进程实际调用的为该编程接口对应的劫持代码。
97.一个示例中,编程接口为统一计算设备架构驱动应用程序编程接口。
98.一个示例中,为了使第一进程在调用该第一进程的执行任务对应的编程接口时,去执行该编程接口对应的劫持文件,可以通过将该接口对应的执行文件进行劫持处理。举例来说,相关技术中,在图形处理器的开发者所提供的编程接口的执行代码全部存储于libcuda.so库中,在具体调用某一图形处理器的编程接口时,第一进程通过对调用编程接口的指令进行解析之后,会通过libcuda.so库去查找当前需要调用的编程接口对应的执行代码。而本实施例中,为了使第一进程在响应调用指令时可以调用该编程接口对应的劫持代码,可以替换libcuda.so库中所包含的执行代码,将每一编程接口对应的执行代码替换为劫持代码,进而,在第一进程响应于调用指令时,具体执行的代码为劫持代码而并非原先的执行代码。
99.s102、第一进程运行劫持代码,向第二进程发送第一进程对应的运行请求,运行请求用于指示第二进程调用编程接口。
100.示例性地,在第一进程运行劫持代码之后,第一进程会向第二进程发送用于指示第二进程调用编程接口的运行请求。也就是说,第一进程通过执行步骤s101与步骤s102将原本需要调用编程接口的请求发送给第二进程,以使得第二进程调用原本第一进程需要调
用的编程接口。
101.s103、第二进程响应于第一进程对应的运行请求,通过第一进程对应的编程接口,调用图形处理器。
102.示例性地,本实施例中的第二进程可以接收第一进程发送的运行请求,并且基于接收到的第一进程对应的运行请求,调用运行请求所对应的编程接口,进而实现对图形处理器的调用。
103.一个示例中,中央处理器中运行有多个第一进程。多个第一进程都可以通过图1所示的实施例中的步骤s101-步骤s103实现对图形处理器的调用。具体地,当第二进程接收到多个第一进程发送的运行请求时,可以基于多个第一进程发送运行请求的时间顺序,依次响应各第一进程对应的运行请求。或者,各第一进程发送的运行请求中还包括有该运行请求对应的优先级等级,第二进程可以基于优先级等级的排列顺序,响应各第一进程发送的运行请求。
104.一个示例中,在运行请求中包括编程接口的接口信息,举例来说,接口信息可以包括编程接口的标识、编程接口所需的参数等。在第二进程接收到运行请求之后,会响应于第一进程对应的运行请求中的接口信息,并对接收到的接口信息进行解析,确定第一进程需要调用的编程接口,之后,第二进程通过确定出的编程接口调用图形处理器。
105.一个示例中,在运行请求中还包括有图形处理器中的计算单元的参数(例如,kernel参数),当第二进程接收到第一进程发送的计算单元的参数时,可以基于接收到的计算单元的参数,实现对图形处理器中的计算单元的调用。一种可能的情况中,运行请求中的计算单元的参数包含在启动该计算单元的函数中,第一进程需要依据第二进程解析得到的指针长度以及二维指针的个数,在该计算单元的函数中确定出需要调用的计算单元的参数。
106.举例来说,图2为本技术实施例提供的第一种应用场景示意图。如图2所示,中央处理器中包括第二进程以及3个不同的第一进程,图中分别用第一进程1、第一进程2以及第一进程3表示。3个第一进程可以通过向第二进程发送运行请求之后,之后由第二进程实现对图形处理器的调用,进而实现了多个第一进程对图形处理器的调用。
107.本实施例中,在中央处理器中运行有第一进程以及一个第二进程。当存在第一进程需要调用图形处理器时,第一进程响应于调用指令,会调用与调用指令中的编程接口所对应的劫持代码,之后第一进程通过运行劫持代码,向第二进程发送运行请求,并通过该运行请求指示第二进程调用原本第一进程需要调用的编程接口,进而由图形处理器来执行对应的执行任务,以提高执行任务的处理效率。并且,本实施例提供的方法也适用于多个第一进程需要调用图形处理器的应用场景。当中央处理器中存在多个需要调用图形处理器的第一进程时,原本多个第一进程需要调用图形处理器的执行步骤,都由第二进程去执行,即由第二进程去实现多个第一进程对图形处理器的调用。而对于图形处理器而言,当前只有第二进程在对图形处理器进行调用,实现了多个第一进程同时调用图形处理器的效果,提高了图形处理器的资源利用率。
108.在一些实施例中,调用指令指示调用的编程接口具有调用函数标识,其中,调用函数标识用于指示函数类型;函数类型包括:普通类型以及隐藏类型,其中,普通类型的编程接口所对应的执行代码为开源代码。此外,本实施例中还设置有预设劫持库。其中,预设劫
持库可存储于中央处理器的内存中或者该中央处理器所处的电子设备的内存中,此处对预设劫持库的存储位置不做具体限制。预设劫持库中包括多个劫持代码,并且劫持代码与编程接口之间一一对应。
109.一个示例中,劫持代码与编程接口之间可以通过设置相同的调用函数标识来建立对应关系。当第一进程确定需要调用的编程接口的函数类型为普通类型时,此时,可以依据该调用函数标识,在预设劫持库中查找与该编程接口的调用函数标识所对应的劫持代码。
110.在一种可能的情况中,隐藏类型的编程接口所对应的执行代码为不开源的,用户只能解析到隐藏类型的编程接口的函数指针,其中,函数指针用于指向该编程接口的执行代码,也就是说,在进程调用隐藏类型的编程接口时,此时需要先确定编程接口所对应的函数指针,并基于函数指针,确定出该编程接口对应的执行代码。因此,针对于隐藏类型的编程接口,预设劫持库中还设置有多个劫持指针以及每一劫持指针所对应的劫持代码,并且,每一劫持指针还对应一个调用函数标识。
111.当第一进程确定需要调用的编程接口的函数类型为隐藏类型时,此时第一进程需要在预设劫持库中确定与该编程接口的调用函数标识对应的劫持指针,并依据该劫持指针确定出与该劫持指针对应的劫持代码。
112.本实施例中,在第一进程响应于调用指令,调用与编程接口对应的劫持代码时,会基于调用指令所对应的编程接口的函数类型,采用不同的方式,确定出该编程接口对应的劫持代码,以确保第一进程向第二进程发送运行请求的准确性。
113.在一些实施例中,图3为本技术实施例提供的一种向图形处理器发送存储数据的方法的流程示意图。当调用指令中的执行任务用于表征第一进程向图形处理器中的显存发送存储数据时,此时,执行任务中包括第一虚拟地址,其中,第一虚拟地址用于对于第一进程,存储数据的存储地址。当第一进程需要通过调用图形处理器的编程接口向图形处理器发送存储数据时,此时,在上述图1所示的图形处理器的调用方法的基础上,在步骤s102之后,还包括以下步骤:
114.s201、第一进程响应于调用指令,调用指令用于指示调取与第一进程的执行任务对应的编程接口,调用与编程接口对应的劫持代码,劫持代码用于指示发出运行请求。
115.示例性地,步骤s201的具体原理可以参见图1中的步骤s101,此处不再赘述。
116.s202、第一进程运行劫持代码,向第二进程发送第一进程对应的运行请求,运行请求用于指示第二进程调用编程接口。
117.示例性地,步骤s202的具体原理可以参见图1中的步骤s101,此处不再赘述。
118.s203、响应于第一虚拟地址位于第一内存所对应的地址范围中,第一进程依据预设的映射关系将第一虚拟地址转换为第二虚拟地址,并向第二进程发送第二虚拟地址;第二虚拟地址用于表征对于第二进程,存储数据的存储地址;第一内存为第一进程与第二进程的共享内存。
119.示例性地,本实施例中,在第一进程需要向图形处理器发送存储数据时,此时,由于第一进程对图形处理器的编程接口的调用都由第二进程去执行,因此,第一进程还需要将存储数据发送至第二进程,以使第二进程在调用图形处理器的编程接口时,可以将第二进程获取到的存储数据发送至图形处理器。此外,还设置有第一内存,并将第一内存作为第一进程与第二进程的共享内存。
120.若第一进程确定执行任务中所包含的第一虚拟地址位于第一内存的地址范围之内,由于对于同一存储空间而言,不同进程在同一存储空间存储数据时所确定的存储地址不同,因此,第一进程还需要将存储数据所对应的第一虚拟地址转换为第二进程能够识别的地址。具体地,第一进程可以基于预设的映射关系,将存储数据所对应的第一虚拟地址转换为第二虚拟地址,第二虚拟地址用于表征对于第二进程而言,存储数据的存储地址,之后,第一进程将第二虚拟地址发送至第二进程以使第二进程可以通过第二虚拟地址在第一内存中获取到存储数据。在第二进程调用该第一进程发送的运行请求中的编程接口时,会将得到的存储数据发送至图形处理器。
121.一个示例中,第一进程与第二进程之间的共享内存,可以为第二进程创建的。当第二进程从共享内存中获取到存储数据之后,第二进程可以释放该共享内存,节省内存资源。
122.此处,需要说明的是,第一进程与第二进程的共享内存(即,第一内存)可以为第一进程申请创建的,也可以由第二进程申请创建,此处不做具体限制。
123.s204、第二进程依据第二虚拟地址,获取存储数据。
124.示例性地,当第二进程接收到第一进程发送的第二虚拟地址之后,会在第一内存中查找与第二虚拟地址对应的存储数据,即此时第一进程需要向图形处理器的显存发送的存储数据。
125.s205、响应于第一进程对应的运行请求,第二进程通过第一进程对应的编程接口,调用图形处理器,并将存储数据发送至图形处理器。
126.示例性地,在第二进程调用该第一进程发送的运行请求中的编程接口时,会将得到的存储数据发送至图形处理器。
127.本实施例中,在第一进程需要向图形处理器发送存储数据时,若第一进程确定存储数据所对应的第一虚拟地址位于第一内存的地址范围时,第一进程可以将第一虚拟地址转换为第二虚拟地址,进而第二进程可以基于第二虚拟地址需第一内存中获取存储数据,并且,在第二进程接收到该第一进程的运行请求时,会在调用运行请求中的接口的同时,向图形处理器发送存储数据。
128.在一些实施例中,在图3所示的方法的基础上,本实施例中所提供的向图形处理器发送存储数据的方法还包括以下步骤:第一进程响应于第一虚拟地址位于第一内存所对应的地址范围外,将依据第一虚拟地址获取的存储数据发送至第一内存;第二进程从第一内存中获取存储数据。
129.示例性地,若第一进程确定存储数据的第一虚拟地址的存储位置不位于第一内存中,即存储数据并未保存在第一进程与第二进程的共享内存中时,此时第一进程可以将该存储数据存储至第一内存中。之后,第二进程可以从第一内存中获取到存储数据。一个示例中,第二进程在从第一内存中获取存储数据时,第一进程可以向第二进程发送存储数据在第一内存中的存储地址,之后第二进程可以基于第一进程发送的存储地址得到第一内存中的存储数据。
130.一个示例中,当第一进程向第一内存发送存储数据时,此时,可以考虑将存储数据一次性全部存放到第一内存中。
131.或者,一个示例中,第一内存包括第一子内存以及第二子内存;第一进程将获取到的存储数据划分为多个子存储数据,并将多个子存储数据依次交替传输至第一子内存和第
二子内存。第二进程从第一子内存和第二子内存中交替获取多个子存储数据。
132.示例性地,第一进程可以将存储数据拆分为多个子存储数据,之后,依次交替将多个子存储数据存储至第一内存中已经划分好的第一子内存以及第二子内存中。之后,第二进程也可以交替的从第一内存中划分的第一子内存以及第二子内存中获取第一进程交替发送的多个子存储数据,进而提高数据发送效率。
133.举例来说,图4为本技术实施例提供的一种用于第一进程与第二进程进行数据传输的示意图。图中,将第一进程与第二进程共享的第一内存划分为两个子内存,即第一子内存以及第二子内存。并且,将存储数据拆分为多个子存储数据。在第一进程向第一内存中发送存储数据时,可以将多个子存储数据交替发送至第一内存中的第一子内存和第二子内存。并且,同时第二进程也可以依次交替的从第一子内存与第二子内存中获取子存储数据。
134.例如,当存储数据被划分为子存储数据1、子存储数据2、子存储数据3以及子存储数据4时,此时,首先将子存储数据1与子存储数据2依次传输至第一子内存以及第二子内存,之后,第二进程也可以从第一子内存中获取到子存储数据1,并且在第二进程获取到子存储数据1之后,第一进程可以将子存储数据3存储至第一子内存,同时,在第一进程在发送子存储数据3时,第二进程可以继续从第二子内存中获取存储数据2,进而,通过上述第一进程交替存储子存储数据,第二进程交替获取第一内存中的子存储数据的方式,可以节省第一进程与第二进程间数据传输的时间,并且,采用将第一内存划分为两个子内存的方式,还可以避免第一内存占用内存空间较大的问题,节省了内存资源。
135.在一些实施例中,在执行图1中的步骤s102时,即当第一进程向第二进程发送第一进程对应的运行请求时,具体地,可以通过以下步骤执行,如图所示,图5为本技术实施例提供的一种第一进程向第二进程发送运行请求的方法的流程示意图。
136.步骤s1021、第一进程将第一进程对应的运行请求发送至第一内存中与第一进程对应的第一消息队列;第一内存为第一进程与第二进程的共享内存,第一消息队列与第一进程一一对应。
137.示例性地,在本实施例中,在第一进程与第二进程共享的第一内存中设置有第一消息队列,其中,第一进程与第一消息队列一一对应。第一消息队列可用于接收与该消息队列对应的第一进程发送的运行请求。举例来说,图6为本技术实施例提供的第二种应用场景示意图,其中,包括3个第一进程,并且,每一第一进程对应有各自的第一消息队列。图6中,第一进程1对应第一消息队列1;第一进程2对应第一消息队列2;第一进程3对应第一消息队列3。其中,各第一进程可以通过其对应的第一消息队列向第二进程发送运行请求。
138.步骤s1022、第一进程调整第一消息队列对应的第一信号量参数,第一信号量参数用于表征第一消息队列中可读取的运行请求的数量;
139.示例性地,第一消息队列还对应设置有第一信号量参数,其中,第一信号量参数可用于表征在第一消息队列中所保存的运行请求的数量,第二进程可以基于第一信号参数的数值来确定当前第一消息队列中是否存在运行请求。当第一进程将需要发送的运行请求发送至第一进程对应的第一消息队列之后,第一进程对第一信号量参数进行调整,将第一信号量参数调整为当前第一消息队列中的运行请求的数量,进而通知第二进程去第一消息队列中获取运行请求。
140.步骤s1023、第二进程根据调整后的第一信号量参数,获取第一消息队列中的运行
请求。
141.示例性地,第二进程通过监测第一信号量参数,可以确定当前消息队列中是否存在运行请求。在第一进程向第一消息队列中存入运行请求,并且调整第一信号量参数之后,第二进程可以基于调整后的信号量参数去第一消息队列中获取运行请求。
142.举例来说,第一消息队列初始时可以将其对应的第一信号量参数设置为0,之后,当第一进程向第一消息队列发送4个运行请求之后,可以将第一信号量参数设置为4,之后,第二进程监测到第一信号量参数的取值不等于0,则去第一消息队列中依次获取运行请求。并且,当第二进程从第一消息队列中取出运行请求之后,还可以对应调整第一信号量参数的取值,例如,当第二进程从第一消息队列中取出一个运行请求之后,可以对第一信号参数进行减1处理,即将第一信号量参数从数值4调整为数值3。
143.本实施例中,第一进程可以通过第一消息队列向第二进程发送运行请求。并且,第一进程可以基于调整第一消息队列的信号量通知第二进程去第一消息队列中获取运行请求。
144.在一个示例中,在第一进程向第一消息队列中发送运行请求时,具体地,还可以对运行请求所占内存值进行判断。第一进程响应于运行请求所占内存值小于等于第一值,第一进程将运行请求发送至第一消息队列。
145.示例性地,当第一进程确定运行请求中所对应的内存值小于等于第一值时,此时第一进程可直接将运行请求发送至第一内存中与该第一进程对应的第一消息队列。
146.在另一个示例中,图7为本技术实施例提供的又一种第一进程向第二进程发送运行请求的方法的流程示意图。
147.s301、响应于运行请求所占内存值大于第一值,第一进程将运行请求发送至第一内存中的临时内存中,并生成标记信息发送至第一消息队列;其中,临时内存为第一进程申请的临时存储区,标记信息指示运行请求的位置信息。
148.示例性地,在第一进程向第一消息队列中发送运行请求时,若第一进程确定运行请求所占用的内存值大于第一值,则第一进程会在第一内存中申请一块临时内存,之后,第一进程可以将运行请求发送至临时内存中。并且,在第一进程申请临时内存成功之后,还会基于临时内存的位置信息生成标记信息存放至第一进程对应的第一消息队列中,以使第二进程在获取到第一消息队列中的标记信息之后,可以基于标记信息中临时内存的位置信息去临时内存中获取运行请求。
149.s302、第一进程调整第一消息队列对应的第一信号量参数,第一信号量参数用于表征第一消息队列中可读取的运行请求的数量。
150.s303、第二进程根据调整后的第一信号量参数,获取第一消息队列中的标记信息,并依据标记信息获取临时内存中的运行请求。
151.示例性地,第二进程在确定第一进程调整第一消息队列的第一信号量参数之后,第二进程去第一消息队列中获取标记信息,并且依据标记信息,确定该标记信息对应的运行请求的地址,之后依据确定出的地址,获取运行请求。
152.s304、第二进程释放临时内存。
153.示例性地,在第二进程获取到运行请求之后,会请求释放临时内存,或者通知第一进程,以使第一进程释放该临时内存,进而避免内存资源的浪费。
154.本实施例中,为了避免第一进程与第二进程之间通过第一消息队列传输运行请求时,第一消息队列占用的存储空间较大的现象,本技术中,在第一进程需要发送运行请求时,此时,第一进程会依据当前需要发送的运行请求所占用的内存值的大小,来确定运行请求的发送方式。若运行请求所占用的内存值较大,则第一进程可在第一内存中申请临时内存,用于存储运行请求,并且同时在第一消息队列中发送标记信息,以使第二进程在从第一消息队列中获取到标记信息之后,可以基于标记信息去临时内存中获取运行请求,避免了第一消息队列占用的内存较大的问题。
155.在一些实施例中,图8为本技术实施例提供的一种第二进程向第一进程返回运行结果的方式的流程示意图,在图1所示的方法的流程示意图的基础上,本技术还包括以下步骤:
156.s401、第二进程将图形处理器返回的运行结果发送至第一内存中与运行结果对应的第一进程对应的第二消息队列,其中,第一内存为第一进程与第二进程的共享内存,第二消息队列与第一进程一一对应。
157.示例性地,步骤s401可执行于图1中的步骤s103之后。本实施例中,第二进程接收到图形处理器所返回的运行结果之后,第二进程也可以通过设置消息队列的方式向第一进程发送运行结果。具体地,在第一进程与第二进程共享的第一内存中,设置有多个第二消息队列,且第二消息队列与第一进程之间一一对应。当第二进程获取到图形处理器返回的运行结果之后,会将该运行结果发送至与该运行结果对应的第一进程对应的第二消息队列中。
158.一个示例中,第二进程获取到的运行结果中包含有第一进程的标识,第二进程可以基于运行请求所包含的第一进程的标识,确定第一进程对应的第二消息队列,之后,第二进程可以将运行结果发送至第二消息队列。
159.举例来说,图9为本技术实施例提供的第三种应用场景示意图。图中,一个第一进程对应一个第一消息队列和一个第二消息队列,第一消息队列可用于存放第一进程发送第二进程的运行请求,第二消息队列可用于存放第二进程返回给该第一进程的运行结果。如图9所示,第一进程1对应第一消息队列1以及第二消息队列1。第一进程2对应第一消息队列2以及第二消息队列2。
160.s402、第二进程调整第二消息队列对应的第二信号量参数,第二信号量参数用于表征第二消息队列中可读取的运行结果的数量。
161.示例性地,第二进程可以通过调整第二消息队列对应的第二信号量参数来通知第一进程在第二消息队列中获取运行结果,其中,第二信号量参数可用于表征当前第二消息队列中可读取的运行结果的数量。
162.s403、第一进程根据调整后的第二信号量参数,获取第二消息队列中的运行结果。
163.示例性地,在第一进程监测到第二信号量参数被第一进程调整之后,则此时第一进程从第二消息队列中获取运行请求。
164.一个示例中,第一进程包括多个第一线程,第一线程与第一线程标识一一对应;运行结果具有第一线程标识;第一进程根据调整后的第二信号量参数,唤醒第一进程下多个第一线程,以使多个第一线程分别获取第二消息队列中与各第一线程的第一线程标识所对应的运行结果。即,第一线程为第一进程中用于请求调用图形处理器的请求线程。
165.示例性地,本示例中,在第一进程包括多个第一线程,其中,每一第一线程对应设置有第一线程标识,即第一线程与第一线程标识之间一一对应。此外,在运行结果具有第一线程标识;此时,在执行步骤s403时,此时,第一进程根据第二信号量参数,唤醒第一进程下多个第一线程,以使多个第一线程分别获取第二消息队列中与各第一线程的第一线程标识所对应的运行结果。
166.图10为本技术实施例提供的第四种应用场景示意图。如图10所示,图10中第一进程中包括多个第一线程(图中用第一线程n表示,其中,n为正整数)。第一进程中的第一线程可以响应于调用请求之后,通过第一进程对应的第一消息队列向第二进程发送运行请求,并且,在第二进程响应于运行请求并获取到图形处理器返回的运行结果之后,第二进程将运行请求发送至该第一进程对应的第二消息队列。并且,在第二进程对第二消息队列的第二信号量参数进行调整之后,该第二消息队列对应的多个第一线程会被唤醒,之后,多个第一线程会在第二消息队列中分别获取与各自的第一线程号所对应的运行结果。
167.一个示例中,第一进程根据调整后的第二信号量参数,获取第二消息队列中的运行结果,具体可通过以下方式实现:第一进程根据调整后的第二信号量参数以及预设的第一线程标识与容器之间的对应关系,将第二消息队列中的运行结果存储到与运行结果中的第一线程标识对应的容器中,容器是链表形式的存储结构;第一进程唤醒与容器对应的第一线程,以使第一线程从对应的容器中获取与第一线程的第一线程标识对应的运行结果。
168.示例性地,由于多个第一线程被唤醒之后,由于第二消息队列同时只能由一个第一线程所访问,多个第一线程需要竞争第二消息队列的锁,才可实现第二消息队列的访问,并且,在第二消息队列中存取数据时,需要按照存入顺序,按顺序的取出。因此,容易导致第一进程中的第一线程在第二消息队列中取数据的结果变慢。为了解决上述技术问题,本示例中,还设置有与第二消息队列对应的容器。
169.在第二进程将运行结果存储至第二消息队列,并对第二消息队列的第二信号量参数进行调整之后,第一进程根据调整后的第二信号量参数以及预设的第一线程标识与容器之间的对应关系,将第二消息队列中的运行结果存储到与运行结果中的第一线程标识对应的容器中,其中,容器是链表形式的存储结构。也就是说,第一进程可以将从第二消息队列中取出的运行请求,存储到与该运行请求中的第一线程标识对应的容器中。当需要向容器中存储多个运行请求时,此时多个运行请求可以以链表的形式存储在容器中。之后,第一进程还会基于容器与第一线程标识之间的对应关系,唤醒对应的第一线程,以使第一线程去容器中获取与其具有同一第一线程标识的运行结果。
170.需要说明的是,本实施例中,容器数量可以为多个。例如,一个第二消息队列可以对应设置多个容器。并且,一个容器可以对应多个第一线程标识。举例来说,第一进程中包括有9个第一线程,分别用数字1-9来标识各第一线程对应的第一线程标识,并且,该第一进程还对应设置有3个容器,其中,第一个容器可以存储第一线程标识为1-3的运行结果;第二个容器可以存储第一线程标识为4-6的运行结果;第三个容器可以存储第一线程标识为7-9的运行结果。另一个示例中,第一线程标识与容器之间对应关系可以采用哈希的方式,此处不做具体限制。
171.本实施例中,通过设置容器的方式存储运行请求,可以避免多个第一线程竞争同一第二消息队列时所带来的资源开销,并且,在容器中采用链表形式的存储结构,可以使得
第一线程在容器中获取运行结果时,无需按照存储顺序依次提取,提高了运行结果获取的效率。
172.在一些实施例中,图11为本技术实施例提供的一种第一进程与第二进程建立通信连接的方法的流程示意图。在图1中的步骤s101之前,该方法还包括以下步骤:
173.s501、第二进程在第二进程中创建与图形处理器对应的第二线程。
174.示例性地,本实施例中,在第一进程向第二进程发送运行请求之前,第一进程与第二进程之间还需要建立通信连接。在建立通信连接时,首先在第二进程中创建第二线程,其中,第二线程可用于实现对图形处理器的编程接口的调用。此外,第二线程的数量可以依据图形处理器的数量确定,例如,可以设置为一个第二线程对应一个图形处理器。
175.s502、第一进程向第二进程发送第一进程对应的连接请求,其中,连接请求表征与第二进程建立通信连接。
176.示例性地,每当中央处理器中创建一个第一进程时,第一进程都会向第二进程发送用于请求与第二进程建立连接的连接请求。需要说明的是,本实施例中,对第一进程与第二进程之间的通信方式可以为websocket的通信方式,但不限制为此通信方式。
177.s503、第二进程响应于第一进程对应的连接请求,在第二进程中创建与第一进程对应的第三线程;第三线程用于获取与其对应的第一进程发送的运行请求。
178.示例性地,在第二进程接收到第一进程发送的连接请求,并于第一进程建立通信连接后,会在第二进程中创建第三线程,其中,该第三线程可用于接收与其对应的第一进程发送的运行请求,即第三线程为用于接收第一进程发送的运行请求的接收线程。例如,第三线程可用于监听与其对应的第一进程的第一消息队列中获取运行请求。
179.一个示例中,当第二进程对应多个图形处理器时,此时,运行请求中还包括需要调用的图形处理器的标识。之后,第三线程在获取到运行请求之后,会基于运行请求中所包含的图形处理器的标识,将该运行请求发送至该图形处理器所对应的第二线程中。之后,第二线程响应于第三线程发送的运行请求,调用图形处理器,即第二线程为用于解析处理第三线程发送的运行请求的处理线程。
180.一个示例中,在第一进程需要调用图形处理器中的内核时,还会将需要内核参数也写入运行请求中。
181.一个示例中,在第二进程与第一进程建立通信连接之后,第二进程还会记录该第一进程所占用的内存、所占用的图形处理器资源等第一进程运行过程中的日志数据。
182.举例来说,图12为本技术实施例提供的第五种应用场景示意图。图中包括两个图形处理器(图中用图形处理器1以及图像处理器2表示),针对每一图形处理器在第二进程中设置与图形处理器一一对应的第二线程(图中图形处理器1与第二线程1对应,图形处理器2与第二线程2对应)。并且,在第二进程中还设置又与第一进程一一对应的第三线程,第三线程在获取到第一进程发送的运行请求之后,可以将该运行请求发送至需要调用的图形处理器所对应的第二线程,之后,由第二线程实现对图形处理器的调用。当第一进程1需要调用图形处理器1时,第一进程1会通过第一消息队列1将运行请求发送至第一进程1对应的第三线程1,之后第三线程1确定接收到的运行请求需要调用图形处理器1时,此时将运行请求发送至第二线程1,以使第二线程1基于运行请求完成对图形处理器1的调用。
183.本实施例中,在第二进程中,通过在第二进程中设置与第一进程一一对应的第三
线程来接收第一进程发送的运行请求之后,第三线程将运行请求发送给该运行请求中所表征的需要调用的图形处理器所对应的第二线程,之后由第二线程去调用运行请求中所表征的需要调用的图形处理器,进而提高图形处理器资源利用率。
184.在一些实施例中,图13为本技术实施例提供的一种第二进程调用图形处理器的方法的流程示意图。如图13所示,当编程接口具有调用函数标识时,在执行步骤s103时,可采用如下方式实现:
185.s1031、响应于编程接口对应的调用函数标识属于同步函数标识,第二进程根据替换库,调用与编程接口的调用函数标识对应的替换代码;替换代码用于将与调用函数标识对应的编程接口的同步功能代码替换为异步功能代码,替换库中包括多个替换代码。
186.示例性地,在实际应用中,图形处理器的编程接口还可以划分为同步类型以及异步类型。其中,同步类型的编程接口需要等待图形处理器本次任务执行完之后,才会令中央处理器中的进程再次对图形处理器进行调用。而对于异步类型的编程接口而言,则不需要等待图形处理器完成本次任务,就可以通知中央处理器中的进程再次对图形处理器进行调用。
187.举例来说,异步类型的编程接口允许图形处理器计算任务以及其余设备向图形处理器中拷贝数据的任务同时执行。图14为本技术实施例提供的一种图形处理器工作的流程示意图。图中,横轴代表时间。若目前需要有拷贝任务1、计算任务2以及拷贝任务3,需要在图形处理器中执行。若在调用编程接口为同步类型的编程接口,则此时,需要等一个任务执行结束之后才可以执行下一个任务,如图所示,3个任务在图形处理器中依照时间顺序依次执行。
188.若调用的图形处理器的接口为异步类型的接口,则此时,在图形处理器中可以将这3个任务中的每一任务都拆分为3个子任务,例如,将拷贝任务1拆分为拷贝子任务11、拷贝子任务12以及拷贝子任务13;将计算任务2拆分为计算子任务21、计算子任务22以及计算子任务23;将拷贝任务3拆分为拷贝子任务31、拷贝子任务32以及拷贝子任务33。之后,这3个任务所包含的子任务可以交替执行。例如,图中,拷贝子任务11、计算子任务21、拷贝子任务31按照时间顺序执行;拷贝子任务12、计算子任务22、拷贝子任务32按照时间顺序执行;拷贝子任务13、计算子任务23、拷贝子任务33按照时间顺序执行。并且,在计算子任务21执行的同时,图形处理器还可以同时执行拷贝子任务12;在拷贝子任务31执行的同时,图形处理器还可以同时执行计算子任务22以及拷贝子任务13;在拷贝子任务32执行的同时,图形处理器还可以同时执行计算子任务23。通过比对采用异步类型的接口与同步类型接口在执行任务时所耗费的时长,可以发现采用异步类型的接口可以降低执行任务耗费的时长,提高图形处理器的使用效率。
189.因此,当第二进程正在调用的编程接口为同步类型的接口时,在图形处理器未返回运行结果之前,第二进程会处于阻塞状态。为了确保第二进程可以继续执行已经接收到的第一进程发送的其余运行请求,提高图形处理器的使用效率,本实施例中的编程接口具有调用函数标识,并且在中央处理器中还可以预先设置有替换库,其中,替换库中包括有多个替换代码,其中,替换代码与编程接口的调用函数标识之间一一对应。
190.在第二进程接收到第一进程发送的运行请求时,会确定运行请求中所指示调用的编程接口所对应的调用函数标识是否为同步函数标识。若第二进程确定接收到的运行请求
中的编程接口的调用函数标识为同步函数标识,则此时,第二进程依据设置的替换库,在替换库中查找该编程接口的调用函数标识对应的替换代码,其中,该替换代码可以将需要调用的编程接口的同步功能代码替换为异步功能代码,进而使得第二进程最终实际调用的编程接口为具有异步功能的接口。
191.需要说明的是,在设置替换库中的异步功能代码时,可以为所有的具有同步函数标识的编程接口均设置一个对应的异步功能代码,或者也可以设置为部分具有同步函数标识的编程接口对应设置其对应的异步功能代码。
192.在实际应用中,当中央处理器中的第一进程需要向图形处理器拷贝数据时,由于异步拷贝需要拷贝的数据存储在页锁定内存,以确保在异步拷贝的过程中数据所在页不被置换。因此,若拷贝的数据所存储的内存并非页锁定内存时,此时,只能进行同步拷贝,在此时,即使第二进程确定调用的编程接口的调用函数标识属于同步函数标识时,还会进一步对需要拷贝的数据所处的内存类型进行判断,若内存类型为页锁定内存,则可直接基于替换库中的替换代码实现对图形处理器的调用。若内存类型不是页锁定内存时,则此时仍然执行原编程接口所对应的代码,即不会执行上述替换过程。
193.s1032、第二进程通过第一进程对应的编程接口的替换代码,调用图形处理器,并接收图形处理器返回的异步通知,异步通知用于指示第二进程继续运行第一进程发送的运行请求。
194.示例性地,第二进程在获取到第一进程对应的编程接口的替换代码之后,会基于该替换代码对图形处理器进行调用,并且,在第二进程调用图形处理器之后,会接收到图形处理器的返回的异步通知,进而在第二进程接收到异步通知之后,会继续对接收到运行请求进行处理。
195.本实施例中,在第二进程响应运行请求时,为了避免当第二进程调用的编程接口为同步类型的接口时,第二进程会被阻塞,无法继续执行已经接收到的其它运行请求,因此第二进程在实际调用编程接口时,实际执行的是,替换库中与该编程接口对应的替换代码,进而通过执行替换代码,第二进程最终调用的编程接口为具有异步功能的编程接口的代码功能。并且,之后,第二进程会接收到图形处理器所返回的异步通知,以使得第二进程可继续执行其余运行请求,进而减少第二进程被阻塞所导致的图形处理器利用率较低的问题。
196.图15为本技术实施例中提供的一种电子设备的结构示意图,如图15所示,该电子设备包括:
197.图形处理器(图中未示出),中央处理器291,电子设备还包括了存储器(memory)292;还可以包括通信接口(communication interface)293和总线294。其中,中央处理器291、存储器292、通信接口293、可以通过总线294完成相互间的通信。通信接口293可以用于信息传输。中央处理器291可以调用存储器294中的逻辑指令,以执行上述实施例的方法。
198.此外,上述的存储器292中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。
199.存储器292作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序,如本技术实施例中的方法对应的程序指令/模块。中央处理器291通过运行存储在存储器292中的软件程序、指令以及模块,从而执行功能应用以及数据处理,即实现上述方法实施例中的方法。
200.存储器292可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端设备的使用所创建的数据等。此外,存储器292可以包括高速随机存取存储器,还可以包括非易失性存储器。
201.本技术提供一种中央处理器,中央处理器用于实现如上述任一实施例提供的方法。
202.本技术提供一种控制芯片,其中,控制芯片中包括上述本技术提供的中央处理器、以及图形处理器。
203.本技术提供一种车辆,车辆中设置有上述本技术提供的控制芯片。
204.本技术提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,计算机执行指令被处理器执行时用于实现上述任一实施例提供的方法。
205.本技术一种计算机程序产品,计算机程序产品包括计算机程序,该计算机程序被处理器执行时实现任一实施例提供的方法。
206.本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本技术的其它实施方案。本技术旨在涵盖本技术的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本技术的一般性原理并包括本技术未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本技术的真正范围和精神由所附的权利要求书指出。
207.应当理解的是,本技术并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本技术的范围仅由所附的权利要求书来限制。

技术特征:
1.一种图形处理器的调用方法,其中,所述方法应用于中央处理器,所述中央处理器中运行有第一进程、以及第二进程,所述方法包括:所述第一进程响应于调用指令,所述调用指令用于指示调取与所述第一进程的执行任务对应的编程接口,调用与所述编程接口对应的劫持代码,所述劫持代码用于指示发出运行请求;所述第一进程运行所述劫持代码,向第二进程发送所述第一进程对应的运行请求,所述运行请求用于指示第二进程调用所述编程接口;所述第二进程响应于所述第一进程对应的运行请求,通过所述第一进程对应的编程接口,调用图形处理器。2.根据权利要求1所述的方法,其中,所述编程接口具有调用函数标识,所述调用函数标识用于指示函数类型;所述第一进程调用与所述编程接口对应的劫持代码,包括:响应于所述编程接口的函数类型为普通类型,所述第一进程根据预设劫持库,调用与所述编程接口的调用函数标识对应的劫持代码,其中,所述预设劫持库中包括多个劫持代码。3.根据权利要求2所述的方法,其中,所述方法,还包括:响应于所述编程接口的函数类型为隐藏类型,所述第一进程根据预设劫持库,确定与所述编程接口的调用函数标识对应的劫持指针,并基于所述劫持指针,调用所述劫持指针对应的劫持代码,所述劫持指针用于指示所述编程接口对应的劫持代码的位置。4.根据权利要求1所述的方法,其中,所述执行任务用于表征第一进程向所述图形处理器中的显存发送存储数据,所述执行任务包括:第一虚拟地址,所述第一虚拟地址用于表征对于所述第一进程,所述存储数据的存储地址;所述方法还包括:响应于所述第一虚拟地址位于第一内存所对应的地址范围中,所述第一进程依据预设的映射关系将所述第一虚拟地址转换为第二虚拟地址,并向所述第二进程发送所述第二虚拟地址;所述第二虚拟地址用于表征对于所述第二进程,所述存储数据的存储地址;所述第一内存为所述第一进程与所述第二进程的共享内存;所述第二进程依据所述第二虚拟地址,获取所述存储数据;所述第二进程响应于所述第一进程对应的运行请求,通过所述第一进程对应的编程接口,调用图形处理器,包括:响应于所述第一进程对应的运行请求,所述第二进程通过所述第一进程对应的编程接口,调用图形处理器,并将所述存储数据发送至所述图形处理器。5.根据权利要求4所述的方法,其中,所述方法还包括:响应于所述第一虚拟地址位于第一内存所对应的地址范围外,所述第一进程将依据所述第一虚拟地址获取的存储数据发送至所述第一内存;所述第二进程从所述第一内存中获取所述存储数据。6.根据权利要求5所述的方法,其中,所述第一内存包括第一子内存以及第二子内存;所述第一进程将依据所述第一虚拟地址获取的存储数据发送至所述第一内存,包括:所述第一进程将获取到的存储数据划分为多个子存储数据,并将所述多个子存储数据依次交替传输至所述第一子内存和所述第二子内存;所述第二进程从所述第一内存中获取所述存储数据,包括:
所述第二进程从所述第一子内存和所述第二子内存中交替获取所述多个子存储数据。7.根据权利要求1所述的方法,其中,所述第一进程向第二进程发送所述第一进程对应的运行请求,包括:所述第一进程将所述第一进程对应的运行请求发送至第一内存中与所述第一进程对应的第一消息队列;所述第一内存为所述第一进程与所述第二进程的共享内存,所述第一消息队列与所述第一进程一一对应;所述第一进程调整所述第一消息队列对应的第一信号量参数,所述第一信号量参数用于表征第一消息队列中可读取的运行请求的数量;所述第二进程根据调整后的第一信号量参数,获取所述第一消息队列中的运行请求。8.根据权利要求7所述的方法,其中,所述第一进程将所述第一进程对应的运行请求发送至第一内存中与所述第一进程对应的第一消息队列,包括:响应于所述运行请求所占内存值小于等于第一值,所述第一进程将所述运行请求发送至所述第一消息队列。9.根据权利要求8所述的方法,其中,所述方法还包括:响应于所述运行请求所占内存值大于第一值,所述第一进程将所述运行请求发送至所述第一内存中的临时内存中,并生成标记信息发送至所述第一消息队列;其中,所述临时内存为所述第一进程申请的临时存储区,所述标记信息指示所述运行请求的位置信息;所述第二进程根据调整后的第一信号量参数,获取所述第一消息队列中的运行请求,包括:所述第二进程根据调整后的第一信号量参数,获取所述第一消息队列中的标记信息,并依据所述标记信息获取所述临时内存中的运行请求;所述第二进程释放所述临时内存。10.根据权利要求1所述的方法,其中,所述方法还包括:所述第二进程将所述图形处理器返回的运行结果发送至第一内存中与所述运行结果对应的第一进程对应的第二消息队列,所述第一内存为所述第一进程与所述第二进程的共享内存,所述第二消息队列与所述第一进程一一对应;所述第二进程调整所述第二消息队列对应的第二信号量参数,所述第二信号量参数用于表征第二消息队列中可读取的运行结果的数量;所述第一进程根据调整后的第二信号量参数,获取所述第二消息队列中的运行结果。11.根据权利要求10所述的方法,其中,所述第一进程包括多个第一线程,所述第一线程与第一线程标识一一对应;所述运行结果具有第一线程标识;所述第一进程根据调整后的第二信号量参数,获取所述第二消息队列中的运行结果,包括:所述第一进程根据调整后的第二信号量参数,唤醒所述第一进程下多个第一线程,以使多个第一线程分别获取所述第二消息队列中与各所述第一线程的第一线程标识所对应的运行结果。12.根据权利要求10所述的方法,其中,所述第一进程包括多个第一线程,所述第一线程与第一线程标识一一对应;所述运行结果具有第一线程标识;所述第一进程根据调整后的第二信号量参数,获取所述第二消息队列中的运行结果,
包括:所述第一进程根据调整后的第二信号量参数以及预设的第一线程标识与容器之间的对应关系,将所述第二消息队列中的运行结果存储到与所述运行结果中的第一线程标识对应的容器中,所述容器是链表形式的存储结构;所述第一进程唤醒与所述容器对应的第一线程,以使第一线程从对应的容器中获取与所述第一线程的第一线程标识对应的运行结果。13.根据权利要求12所述的方法,其中,所述容器的数量为多个,且一个容器对应于多个第一线程标识。14.根据权利要求1所述的方法,其中,所述第一进程响应于调用指令之前,所述方法还包括:所述第二进程在所述第二进程中创建与所述图形处理器对应的第二线程;所述第一进程向所述第二进程发送所述第一进程对应的连接请求,其中,所述连接请求表征与所述第二进程建立通信连接;所述第二进程响应于所述第一进程对应的连接请求,在所述第二进程中创建与所述第一进程对应的第三线程;所述第三线程用于获取与其对应的第一进程发送的运行请求;所述第二进程响应于所述第一进程对应的运行请求,通过所述第一进程对应的编程接口,调用图形处理器,包括:所述第二进程中的第二线程响应于所述第三线程发送的运行请求,通过所述编程接口,调用图形处理器。15.根据权利要求1所述的方法,其中,所述编程接口具有调用函数标识;所述第二进程响应于所述第一进程对应的运行请求,通过所述第一进程对应的编程接口,调用图形处理器,包括:响应于所述编程接口对应的调用函数标识属于同步函数标识,所述第二进程根据替换库,调用与所述编程接口的调用函数标识对应的替换代码;所述替换代码用于将与所述调用函数标识对应的编程接口的同步功能代码替换为异步功能代码,所述替换库中包括多个替换代码;所述第二进程通过所述第一进程对应的编程接口的替换代码,调用图形处理器,并接收所述图形处理器返回的异步通知,所述异步通知用于指示第二进程继续运行第一进程发送的运行请求。16.根据权利要求1所述的方法,其中,所述运行请求中包括所述编程接口的接口信息,所述第二进程响应于所述第一进程对应的运行请求,通过所述第一进程对应的编程接口,调用图形处理器,包括:所述第二进程响应于所述第一进程对应的运行请求中的接口信息,确定所述第一进程对应的编程接口,并通过所述第一进程对应的编程接口,调用图形处理器。17.根据权利要求1-16任一项所述的方法,其中,所述编程接口为统一计算设备架构驱动应用程序编程接口。18.根据权利要求1-16任一项所述的方法,其中,所述第一进程的数量为多个。19.一种中央处理器,其中,所述中央处理器用于实现如权利要求1-18任一项所述的方法。
20.一种电子设备,其中,包括:存储器,中央处理器、以及图形处理器;存储器;用于存储所述中央处理器可执行指令的存储器;其中,所述中央处理器,用于根据所述可执行指令执行如权利要求1-18任一项所述的方法。21.一种计算机可读存储介质,其中,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如权利要求1-18任一项所述的方法。

技术总结
本申请提供的图形处理器的调用方法、中央处理器及设备,所述方法应用于中央处理器,所述中央处理器中运行有第一进程、以及第二进程,所述方法包括:所述第一进程响应于调用指令,所述调用指令用于指示调取与所述第一进程的执行任务对应的编程接口,调用与所述编程接口对应的劫持代码,所述劫持代码用于指示发出运行请求;所述第一进程运行所述劫持代码,向第二进程发送所述第一进程对应的运行请求,所述运行请求用于指示第二进程调用所述编程接口;所述第二进程响应于所述第一进程对应的运行请求,通过所述第一进程对应的编程接口,调用图形处理器,进而由图形处理器处理执行任务,以提高执行任务的处理效率。以提高执行任务的处理效率。以提高执行任务的处理效率。


技术研发人员:孙庞博 吴昊 靳江明
受保护的技术使用者:北京图森智途科技有限公司
技术研发日:2022.03.24
技术公布日:2023/10/7
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐