多处理器上的并行运行时执行.pdf

上传人:a1 文档编号:1071214 上传时间:2018-03-29 格式:PDF 页数:36 大小:2.10MB
返回 下载 相关 举报
摘要
申请专利号:

CN200880011684.8

申请日:

2008.04.09

公开号:

CN101802789A

公开日:

2010.08.11

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效IPC(主分类):G06F 9/50申请日:20080409|||公开

IPC分类号:

G06F9/50; G06F9/45

主分类号:

G06F9/50

申请人:

苹果公司

发明人:

阿夫泰伯·穆恩史; 杰里米·萨德梅尔

地址:

美国加利福尼亚州

优先权:

2007.04.11 US 60/923,030; 2007.04.20 US 60/925,620; 2007.05.03 US 11/800,319

专利代理机构:

北京东方亿思知识产权代理有限责任公司 11258

代理人:

李晓冬;南霆

PDF下载: PDF下载
内容摘要

公开了对调度队列中的多个可执行体进行调度以在诸如CPU或GPU之类的一个或多个物理计算装置中并发地执行的方法和设备。针对与所述一个或多个物理计算装置不同的一种类型的物理计算装置,从具有现有可执行体的源在线编译一个或多个可执行体。判断与所调度的可执行体相应的元素之间的依赖关系来选择在多于一个的物理计算装置中通过多个线程所要并发地执行的可执行体。如果GPU忙于图形处理线程,则被初始化用于在物理计算装置的GPU中执行可执行体的线程被初始化用于在物理计算装置中的另一CPU中的执行。API函数的现有可执行体和源被存储在API库中,以在多个物理计算装置中执行包括现有可执行体和从源在线编译出的可执行体在内的多个可执行体。

权利要求书

1: 一种计算机实现的方法,包括: 响应于来自在第一处理单元中运行的应用程序的第一API请求,加载用于所述应用程序的数据处理任务的一个或多个可执行体;以及 响应于来自所述应用程序的第二API请求,为第二处理单元选择所述一个或多个可执行体中的一个可执行体。
2: 根据权利要求1所述的计算机实现的方法,其中所述第一处理单元和所述第二处理单元是中央处理单元(CPU)或图形处理单元(GPU)。
3: 根据权利要求1所述的计算机实现的方法,其中所述一个或多个可执行体中的所选择的一个可执行体与所述第二API请求相关联。
4: 根据权利要求1所述的计算机实现的方法,其中所述一个或多个可执行体包括所述一个或多个可执行体中的至少一个可执行体的描述数据,所述描述数据包括所支持的处理单元的版本和类型。
5: 根据权利要求1所述的计算机实现的方法,其中所述一个或多个可执行体包括源,所述源被编译来生成所述一个或多个可执行体。
6: 根据权利要求5所述的计算机实现的方法,其中所述源是经由所述第一API从所述应用程序加载的。
7: 根据权利要求5所述的计算机实现的方法,其中所述源是从与所述一个或多个可执行体相关联的库加载的。
8: 根据权利要求4所述的计算机实现的方法,其中所述加载包括: 比较所述描述数据和所述第二处理单元的信息;以及 为所述第二处理单元,从所述源在线编译出所述一个或多个可执行体中的所述一个可执行体。
9: 根据权利要求8所述的计算机实现的方法,其中所述一个或多个可执行体中的所述一个可执行体与所述第一API请求相关联。
10: 根据权利要求8所述的计算机实现的方法,其中所述编译基于:所述比较指示所述一个或多个可执行体中的所述至少一个可执行体并非对于所述第二处理单元是最优的。
11: 根据权利要求8所述的计算机实现的方法,其中所述编译基于:所述比较指示所述一个或多个可执行体中的所述至少一个可执行体不支持所述第二处理单元。
12: 根据权利要求8所述的计算机实现的方法,其中所述编译包括: 生成所述一个或多个可执行体中的所述一个可执行体的更新后的描述数据,所述更新后的描述数据包括所述第二处理单元的版本;以及 存储所述一个或多个可执行体中的所述一个可执行体,所述一个或多个可执行体中的所述一个可执行体包括所述更新后的描述数据。
13: 根据权利要求12所述的计算机实现的方法,其中所述一个或多个可执行体中的所述一个可执行体被存储来替换所述一个或多个可执行体中的所述至少一个可执行体。
14: 根据权利要求1所述的计算机实现的方法,其中所述一个或多个可执行体包括所述一个或多个可执行体中的所述一个可执行体的描述数据,并且其中,所述选择是基于所述描述数据的。
15: 根据权利要求14所述的计算机实现的方法,其中所述一个或多个可执行体中所选择的一个可执行体基于所述描述数据而与用于所述第二处理单元的所述一个或多个可执行体中最新的版本相关联。
16: 根据权利要求14所述的计算机实现的方法,其中所述一个或多个可执行体中所选择的一个可执行体基于所述描述数据而与用于所述第二处理单元的所述一个或多个可执行体中最新的版本相关联。
17: 一种计算机实现的方法,包括: 从在第一处理单元中运行的应用程序生成第一API请求,用来加载用于所述应用程序的数据处理任务的一个或多个可执行体;以及 从所述应用程序生成第二API请求,用来从所述一个或多个可执行体中选择一个可执行体用以在所述第二处理单元中执行。
18: 根据权利要求17所述的计算机实现的方法,其中所述第一处理单元和所述第二处理单元是中央处理单元(CPU)或图形处理单元(GPU)。
19: 根据权利要求17所述的计算机实现的方法,其中所述第一API请求与从中编译出所述一个或多个可执行体的源相关联。
20: 根据权利要求19所述的计算机实现的方法,其中所选择的可执行体是从所述源被离线编译出的。
21: 根据权利要求17所述的计算机实现的方法,其中所选择的可执行体是响应于所述第一API请求而被离线编译出的。
22: 根据权利要求17所述的计算机实现的方法,其中所述一个或多个可执行体包括所选择的可执行体的描述数据,所述描述数据包括与所述第二处理单元兼容的版本和类型。
23: 一种计算机实现的方法,包括: 加载从源编译出的可执行体,用于处理单元执行目标处理单元中的数据处理任务; 检测所述处理单元和所述目标处理单元之间的差异;以及 响应于检测到所述差异,基于所述差异为所述目标处理单元编译所述源。
24: 根据权利要求23所述的计算机实现的方法,其中所述可执行体是从所述源离线编译出的。
25: 根据权利要求23所述的计算机实现的方法,其中所述差异基于与所述可执行体相关联的描述数据,所述描述数据包括所支持的处理单元的版本和类型。
26: 根据权利要求23所述的计算机实现的方法,其中所述可执行体包括所述源。
27: 根据权利要求23所述的计算机实现的方法,其中所述目标处理单元是中央处理单元(CPU)或图形处理单元(GPU)。
28: 一种计算机实现的方法,包括: 响应于来自应用程序的API请求,利用包括多个可执行体的任务来更新与多个处理单元相关联的任务队列; 确定在所述多个处理单元中执行所述任务的条件;以及 基于所述条件来选择所述多个可执行体中的一个可执行体用以在所述多个处理单元中执行。
29: 根据权利要求28所述的计算机实现的方法,其中所述多个可执行体中的所选择的可执行体是通过所述多个处理单元中的多个线程来并发地执行的。
30: 根据权利要求28所述的计算机实现的方法,其中所述多个处理单元是中央处理单元(CPU)或图形处理单元(GPU)。
31: 根据权利要求28所述的计算机实现的方法,其中所述条件包括具有输出存储流的所述队列中的另一任务执行完毕,所述输出存储流是所述任务的输入存储流。
32: 根据权利要求28所述的计算机实现的方法,其中所述条件基于与所述任务相关联的事件指示符,所述事件指示符用于指示所述队列中的另一任务的完成,所述事件指示符与所述API请求相关联。
33: 根据权利要求28所述的计算机实现的方法,其中所述条件包括满足预定准则的所述多个处理单元的执行状况。
34: 根据权利要求33所述的计算机实现的方法,其中所述预定准则包括根据所述API请求与所述任务相关联的线程的预期数目。
35: 根据权利要求33所述的计算机实现的方法,其中所述一个或多个可执行体中的所述一个可执行体是根据所述多个可执行体中所包括的描述数据来选择的。
36: 根据权利要求35所述的计算机实现的方法,其中所述选择包括根据所述描述数据来判断所述一个或多个可执行体中的所述一个可执行体与所述多个处理单元相兼容。
37: 一种计算机实现的方法,包括: 响应于来自包括源的应用程序的API请求,加载所述源来执行数据处理功能; 自动确定多种类型的目标数据处理单元来执行所述数据处理功能; 为所确定的类型的目标数据处理单元中的至少一个目标数据处理单元,从所述源编译可执行体;以及 通过在所确定的类型的所述目标数据处理单元中的至少一个目标数据处理单元中执行所述可执行体,来执行所述数据处理功能。
38: 根据权利要求37所述的计算机实现的方法,其中与多个目标处理单元相对应的多个可执行体是从所述源编译出的,并且其中所述多个目标处理单元对应于逻辑计算装置。
39: 根据权利要求38所述的计算机实现的方法,其中所述目标处理单元是CPU或GPU。
40: 根据权利要求38所述的计算机实现的方法,其中所述目标处理单元根据所述逻辑计算装置进行负载均衡。
41: 根据权利要求38所述的计算机实现的方法,其中所述目标处理单元与所述逻辑计算装置相关联。
42: 根据权利要求41所述的计算机实现的方法,其中所述目标数据处理单元中的所述至少一个目标数据处理单元在与所述逻辑计算装置相对应的所述目标数据处理单元内进行负载均衡。
43: 一种计算机实现的方法,包括: 从源编译出用于一种类型的处理单元的用于执行数据处理功能的可执行体;以及 将所述源和所编译出的可执行体存储在API库中,响应于来自在与所述一个或多个处理单元分离的主处理单元中运行的应用程序的、对所述API库的请求,所述源和所述编译出的可执行体将由所述类型的一个或多个处理单元从所述API库中取出,以用于基于所述源和所述编译出的可执行体来执行可执行体,以执行所述数据处理功能。
44: 根据权利要求43所述的计算机实现的方法,其中所述一个或多个处理单元是CPU或GPU。
45: 根据权利要求43所述的计算机实现的方法,还包括存储与所编译出的可执行体相关联的描述数据,所述描述数据包括所述处理单元的所述类型。
46: 根据权利要求43所述的计算机实现的方法,其中所述可执行体是在所述主处理单元中被离线编译出的。
47: 一种计算机实现的方法,包括: 在主处理单元中执行应用程序来执行数据处理功能;以及 经由API库根据API请求,从所述API库取出源和为一种类型的处理单元编译出的可执行体,以用于由与所述主处理单元分离的、所述类型的一个或多个处理单元来执行所编译出的可执行体,以执行所述数据处理功能。
48: 根据权利要求47所述的计算机实现的方法,其中所述取出包括取出与所述可执行体相关联的描述数据,所述描述数据包括所述处理单元的所述类型。
49: 根据权利要求47所述的计算机实现的方法,其中所述取出包括取出与所编译出的可执行体相关联的描述数据,所述描述数据包括所述处理单元的所述类型。
50: 根据权利要求47所述的计算机实现的方法,还包括: 根据与所述类型的所述一个或多个处理单元相关联的队列,来调度所编译出的可执行体以用于执行; 检测所述一个或多个处理单元的执行状况; 根据所检测出的执行状况来选择所述一个或多个处理单元;以及 将所编译出的可执行体加载到所述一个或多个处理单元,所述一个或多个处理单元具有并发地执行所编译出的可执行体的多个线程。
51: 根据权利要求50所述的计算机实现的方法,其中所述一个或多个处理单元是CPU或GPU。
52: 一种包含可执行指令的机器可读介质,所述可执行指令使得数据处理系统执行一种方法,所述方法包括: 响应于来自在第一处理单元中运行的应用程序的第一API请求,加载用于所述应用程序的数据处理任务的一个或多个可执行体;以及 响应于来自所述应用程序的第二API请求,为第二处理单元选择所述一个或多个可执行体中的一个可执行体。
53: 根据权利要求52所述的机器可读介质,其中所述第一处理单元和所述第二处理单元是中央处理单元(CPU)或图形处理单元(GPU)。
54: 根据权利要求52所述的机器可读介质,其中所述一个或多个可执行体中的所选择的一个可执行体与所述第二API请求相关联。
55: 根据权利要求52所述的机器可读介质,其中所述一个或多个可执行体包括所述一个或多个可执行体中的至少一个可执行体的描述数据,所述描述数据包括所支持的处理单元的版本和类型。
56: 根据权利要求52所述的机器可读介质,其中所述一个或多个可执行体包括源,所述源被编译来生成所述一个或多个可执行体。
57: 根据权利要求56所述的机器可读介质,其中所述源是经由所述第一API从所述应用程序加载的。
58: 根据权利要求56所述的机器可读介质,其中所述源是从与所述一个或多个可执行体相关联的库加载的。
59: 根据权利要求55所述的机器可读介质,其中所述加载包括: 比较所述描述数据和所述第二处理单元的信息;以及 为所述第二处理单元,从所述源在线编译出所述一个或多个可执行体中的所述一个可执行体。
60: 根据权利要求59所述的机器可读介质,其中所述一个或多个可执行体中的所述一个可执行体与所述第一API请求相关联。
61: 根据权利要求59所述的机器可读介质,其中所述编译基于:所述比较指示所述一个或多个可执行体中的所述至少一个可执行体并非对于所述第二处理单元是最优的。
62: 根据权利要求59所述的机器可读介质,其中所述编译基于:所述比较指示所述一个或多个可执行体中的所述至少一个可执行体不支持所述第二处理单元。
63: 根据权利要求59所述的机器可读介质,其中所述编译包括: 生成所述一个或多个可执行体中的所述一个可执行体的更新后的描述数据,所述更新后的描述数据包括所述第二处理单元的版本;以及 存储所述一个或多个可执行体中的所述一个可执行体,所述一个或多个可执行体中的所述一个可执行体包括所述更新后的描述数据。
64: 根据权利要求63所述的机器可读介质,其中所述一个或多个可执行体中的所述一个可执行体被存储来替换所述一个或多个可执行体中的所述至少一个可执行体。
65: 根据权利要求62所述的机器可读介质,其中所述一个或多个可执行体包括所述一个或多个可执行体中的所述一个可执行体的描述数据,并且其中,所述选择是基于所述描述数据的。
66: 根据权利要求65所述的机器可读介质,其中所述一个或多个可执行体中所选择的一个可执行体基于所述描述数据而与用于所述第二处理单元的所述一个或多个可执行体中最新的版本相关联。
67: 根据权利要求65所述的机器可读介质,其中所述一个或多个可执行体中所选择的一个可执行体基于所述描述数据而与用于所述第二处理单元的所述一个或多个可执行体中最新的版本相关联。
68: 一种包含可执行指令的机器可读介质,所述可执行指令使得数据处理系统执行一种方法,所述方法包括: 从在第一处理单元中运行的应用程序生成第一API请求,用来加载用于所述应用程序的数据处理任务的一个或多个可执行体;以及 从所述应用程序生成第二API请求,用来从所述一个或多个可执行体中选择一个可执行体用以在所述第二处理单元中执行。
69: 根据权利要求68所述的机器可读介质,其中所述第一处理单元和所述第二处理单元是中央处理单元(CPU)或图形处理单元(GPU)。
70: 根据权利要求68所述的机器可读介质,其中所述第一API请求与从中编译出所述一个或多个可执行体的源相关联。
71: 根据权利要求70所述的机器可读介质,其中所选择的可执行体是从所述源被离线编译出的。
72: 根据权利要求68所述的机器可读介质,其中所选择的可执行体是响应于所述第一API请求而被离线编译出的。
73: 根据权利要求68所述的机器可读介质,其中所述一个或多个可执行体包括所选择的可执行体的描述数据,所述描述数据包括与所述第二处理单元兼容的版本和类型。
74: 一种包含可执行指令的机器可读介质,所述可执行指令使得数据处理系统执行一种方法,所述方法包括: 加载从源编译出的可执行体,用于处理单元执行目标处理单元中的数据处理任务; 检测所述处理单元和所述目标处理单元之间的差异;以及 响应于检测到所述差异,基于所述差异为所述目标处理单元编译所述源。
75: 根据权利要求74所述的机器可读介质,其中所述可执行体是从所述源离线编译出的。
76: 根据权利要求74所述的机器可读介质,其中所述差异基于与所述可执行体相关联的描述数据,所述描述数据包括所支持的处理单元的版本和类型。
77: 根据权利要求74所述的机器可读介质,其中所述可执行体包括所述源。
78: 根据权利要求74所述的机器可读介质,其中所述目标处理单元是中央处理单元(CPU)或图形处理单元(GPU)。
79: 一种包含可执行指令的机器可读介质,所述可执行指令使得数据处理系统执行一种方法,所述方法包括: 响应于来自应用程序的API请求,利用包括多个可执行体的任务来更新与多个处理单元相关联的任务队列; 确定在所述多个处理单元中执行所述任务的条件;以及 基于所述条件来选择所述多个可执行体中的一个可执行体用以在所述多个处理单元中执行。
80: 根据权利要求79所述的机器可读介质,其中所述多个可执行体中的所选择的可执行体是通过所述多个处理单元中的多个线程来并发地执行的。
81: 根据权利要求79所述的机器可读介质,其中所述多个处理单元是中央处理单元(CPU)或图形处理单元(GPU)。
82: 根据权利要求79所述的机器可读介质,其中所述条件包括具有输出存储流的所述队列中的另一任务执行完毕,所述输出存储流是所述任务的输入存储流。
83: 根据权利要求79所述的机器可读介质,其中所述条件基于与所述任务相关联的事件指示符,所述事件指示符用于指示所述队列中的另一任务的完成,所述事件指示符与所述API请求相关联。
84: 根据权利要求79所述的机器可读介质,其中所述条件包括满足预定准则的所述多个处理单元的执行状况。
85: 根据权利要求84所述的机器可读介质,其中所述预定准则包括根据所述API请求与所述任务相关联的线程的预定数目。
86: 根据权利要求84所述的机器可读介质,其中所述一个或多个可执行体中的所述一个可执行体是根据所述多个可执行体中所包括的描述数据来选择的。
87: 根据权利要求86所述的机器可读介质,其中所述选择包括根据所述描述数据来判断所述一个或多个可执行体中的所述一个可执行体与所述多个处理单元相兼容。
88: 一种包含可执行指令的机器可读介质,所述可执行指令使得数据处理系统执行一种方法,所述方法包括: 响应于来自包括源的应用程序的API请求,加载所述源来执行数据处理功能; 自动确定多种类型的目标数据处理单元来执行所述数据处理功能; 为所确定的类型的目标数据处理单元中的至少一个目标数据处理单元,从所述源编译可执行体;以及 通过在所确定的类型的所述目标数据处理单元中的至少一个目标数据处理单元中执行所述可执行体,来执行所述数据处理功能。
89: 根据权利要求88所述的机器可读介质,其中与多个目标处理单元相对应的多个可执行体是从所述源编译出的,并且其中所述多个目标处理单元对应于逻辑计算装置。
90: 根据权利要求89所述的机器可读介质,其中所述目标处理单元是CPU或GPU。
91: 根据权利要求89所述的机器可读介质,其中所述目标处理单元根据所述逻辑计算装置进行负载均衡。
92: 根据权利要求89所述的机器可读介质,其中所述目标处理单元与所述逻辑计算装置相关联。
93: 根据权利要求92所述的机器可读介质,其中所述目标数据处理单元中的所述至少一个目标数据处理单元在与所述逻辑计算装置相对应的所述目标数据处理装置内进行负载均衡。
94: 一种包含可执行指令的机器可读介质,所述可执行指令使得数据处理系统执行一种方法,所述方法包括: 从源编译出用于一种类型的处理单元的用于执行数据处理功能的可执行体;以及 将所述源和所编译出的可执行体存储在API库中,响应于来自在与所述一个或多个处理单元分离的主处理单元中运行的应用程序的、对所述API库的请求,所述源和所述编译出的可执行体将由所述类型的一个或多个处理单元从所述API库取出,以用于基于所述源和所述编译出的可执行体来执行可执行体,以执行所述数据处理功能。
95: 根据权利要求94所述的机器可读介质,其中所述一个或多个处理单元是CPU或GPU。
96: 根据权利要求94所述的机器可读介质,还包括存储与所编译出的可执行体相关联的描述数据,所述描述数据包括所述处理单元的所述类型。
97: 根据权利要求94所述的机器可读介质,其中所述可执行体是在所述主处理单元中被离线编译出的。
98: 一种包含可执行指令的机器可读介质,所述可执行指令使得数据处理系统执行一种方法,所述方法包括: 在主处理单元中执行应用程序来执行数据处理功能;以及 经由API库根据API请求,从所述API库取出源和为一种类型的处理单元编译出的可执行体,以用于由与所述主处理单元分离的、所述类型的一个或多个处理单元来执行所编译出的可执行体,以执行所述数据处理功能。
99: 根据权利要求98所述的机器可读介质,其中所述取出包括取出与所述可执行体相关联的描述数据,所述描述数据包括所述处理单元的所述类型。
100: 根据权利要求98所述的机器可读介质,其中所述取出包括取出与所编译出的可执行体相关联的描述数据,所述描述数据包括所述处理单元的所述类型。
101: 根据权利要求98所述的机器可读介质,还包括: 根据与所述类型的所述一个或多个处理单元相关联的队列,来调度所编译出的可执行体以用于执行; 检测所述一个或多个处理单元的执行状况; 根据所检测出的执行状况来选择所述一个或多个处理单元;以及 将所编译出的可执行体加载到所述一个或多个处理单元,所述一个或多个处理单元具有并发地执行所编译出的可执行体的多个线程。
102: 根据权利要求101所述的机器可读介质,其中所述一个或多个处理单元是CPU或GPU。
103: 一种包含可执行指令的机器可读介质,所述可执行指令使得数据处理系统执行一种方法,所述方法包括: 在主处理器上通过API接收调用,来执行具有多个线程的应用程序; 调度所述多个线程以用于在中央处理单元(CPU)上和图形处理单元(GPU)上的并行执行,所述主处理器与所述中央处理单元和所述图形处理单元耦合,其中如果所述GPU忙于图形处理线程,则被调度用于在所述GPU上执行的线程可以被调度用于在所述中央处理器上执行。
104: 根据权利要求103所述的介质,其中所述多个线程异步并且并行地执行,并且其中,所述中央处理单元是单核或多核通用微处理器,并且其中,所述方法由操作系统(OS)组件来执行。
105: 根据权利要求104所述的介质,其中所述OS组件判断所述多个线程之间是否存在依赖性,并且根据所述依赖性来调度依赖的线程。
106: 根据权利要求103所述的介质,其中,所述API与源相关联,并且其中,所述调度包括从所述源在线编译出分离的可执行体,用于在所述CPU和所述GPU中执行所述多个线程。
107: 一种包含可执行指令的机器可读介质,所述可执行指令使得数据处理系统执行一种方法,所述方法包括: 在主处理器上通过API由应用程序进行调用来执行所述应用程序,所述应用程序具有多个线程; 由所述应用程序对所述多个线程进行初始化以用于在中央处理单元(CPU)上和图形处理单元(GPU)上并行执行,所述CPU和所述GPU与所述主处理器耦合,其中如果所述GPU忙于图形处理线程,则被初始化用于在所述GPU上执行的线程可以被初始化用于在所述CPU上执行。
108: 根据权利要求107所述的介质,其中所述初始化包括通过API进行调用来分配存储流以及分配计算内核。
109: 一种设备,包括 用于响应于来自在第一处理单元中运行的应用程序的第一API请求,加载用于所述应用程序的数据处理任务的一个或多个可执行体的装置;以及 用于响应于来自所述应用程序的第二API请求,为第二处理单元选择所述一个或多个可执行体中的一个可执行体的装置。
110: 一种设备,包括: 用于从在第一处理单元中运行的应用程序生成第一API请求,用来加载用于所述应用程序的数据处理任务的一个或多个可执行体的装置;以及 用于从所述应用程序生成第二API请求,用来从所述一个或多个可执行体中选择一个可执行体用以在所述第二处理单元中执行的装置。
111: 一种设备,包括: 用于加载从源编译出的可执行体,用于处理单元执行目标处理单元中的数据处理任务的装置; 用于检测所述处理单元和所述目标处理单元之间的差异的装置;以及 用于响应于检测到所述差异,基于所述差异为所述目标处理单元编译所述源的装置。
112: 一种设备,包括: 用于响应于来自应用程序的API请求,利用包括多个可执行体的任务来更新与多个处理单元相关联的任务队列的装置; 用于确定在所述多个处理单元中执行所述任务的条件的装置;以及 用于基于所述条件来选择所述多个可执行体中的一个可执行体用以在所述多个处理单元中执行的装置。
113: 一种设备,包括: 用于响应于来自包括源的应用程序的API请求,加载所述源来执行数据处理功能的装置; 用于自动确定多种类型的目标数据处理单元来执行所述数据处理功能的装置; 用于为所确定的类型的目标数据处理单元中的至少一个目标数据处理单元从所述源编译可执行体的装置;以及 用于通过在所确定类型的所述目标数据处理单元中的至少一个标数据处理单元中执行所述可执行体来执行所述数据处理功能的装置。
114: 一种设备,包括: 用于从源编译出用于一种类型的处理单元的用于执行数据处理功能的可执行体的装置;以及 用于将所述源和所编译出的可执行体存储在API库中的装置,响应于来自在与所述一个或多个处理单元分离的主处理单元中运行的应用程序的、对所述API库的请求,所述源和所述编译出的可执行体将由所述类型的一个或多个处理单元从所述API库取出,以用于基于所述源和所述编译出的可执行体来执行可执行体,以执行所述数据处理功能。
115: 一种设备,包括: 用于在主处理单元中执行应用程序来执行数据处理功能的装置;以及 用于经由API库根据API请求,从所述API库取出源和为一种类型的处理单元编译出的可执行体,以用于由与所述主处理单元分离的、所述类型的一个或多个处理单元来执行所编译出的可执行体,以执行所述数据处理功能的装置。
116: 一种并行计算体系结构,包括: 主处理器 耦合到所述主处理器的图形处理单元(GPU); 耦合到所述主处理器的中央处理单元(CPU);以及 耦合到所述主处理器、所述CPU、所述GPU中的至少一者的存储器,所述存储器存储至少部分地在所述主处理器上执行的系统程序,所述系统程序加载用于处理器的从程序源编译出的可执行体,所述系统程序检测所述CPU和所述GPU中一者与所述处理器之间的差异,所述系统程序将所述程序源编译成用于所述CPU和所述GPU中所述一者的新可执行体,并且所述系统程序调度要在所述CPU和所述GPU中所述一者中被执行的所述新可执行体。
117: 根据权利要求116所述的设备,其中所述可执行体是从所述程序源被离线编译出的。
118: 根据权利要求116所述的设备,其中所述差异基于与所述可执行体相关联的描述数据,所述描述数据包括所支持的处理器的版本和类型。
119: 根据权利要求116所述的设备,其中所述可执行体包括所述程序源。
120: 根据权利要求109所述的设备,其中所述可执行体包括所述程序源。

说明书


多处理器上的并行运行时执行

     相关申请的交叉引用

    本申请与Aaftab Munshi等在2007年4月11日提交的标题为“DATAPARALLEL COMPUTING ON MULTIPLE PROCESSORS”(多处理器上的数据并行计算)的美国临时专利申请No.60/923,030和Aaftab Munshi在2007年4月20日提交的标题为“PARALLEL RUNTIME EXECUTION ONMULTIPLE PROCESSORS”(多处理器上的并行运行时执行)的美国临时专利申请No.60/925,620相关,并且要求这两者的权益,这两者通过引用被结合于此。

    【技术领域】

    本发明一般地涉及数据并行计算,更具体而言,本发明涉及跨CPU(中央处理单元)和GPU(图形处理单元)两者的数据并行运行时执行。

    背景技术

    随着GPU继续演进成高性能并行计算装置,越来越多的应用被写入以在与通用计算装置类似的GPU中执行数据并行计算。如今,这些应用被设计成在使用供应商特定接口的特定GPU上运行。因此,它们既不能在数据处理系统具有GPU和CPU两者时平衡(leverage)CPU,也不能在这样的应用正运行在来自不同供应商的GPU上时被平衡。

    然而,随着越来越多的CPU包括多个核心来执行数据并行模型的计算,通过可用的CPU和/或GPU的任一者可以支持越来越多的处理任务。传统上,GPU和CPU是通过相互不兼容的分开的编程环境来配置的。大多数GPU需要供应商特定的专用程序。结果,应用很难在处理资源方面平衡CPU和GPU两者,例如具有数据并行计算能力的GPU连同多核CPU。

    因此,需要现代的数据处理系统来克服以上问题以允许应用在能够执行任务的任何可用处理资源(例如CPU或一个或多个GPU)中执行该任务。

    【发明内容】

    本发明的一个实施例包括响应于来自主处理单元中运行的应用的API请求,加载用于该应用的数据处理任务的一个或多个可执行体的方法和设备。响应于来自该应用的另一API请求,所加载的可执行体中的一个被选择以在附接到该主处理单元的诸如CPU或GPU之类的另一处理单元中被执行。

    在一个可替换实施例中,主处理单元中运行的应用程序生成API请求,以用来加载用于数据处理任务的一个或多个可执行体。然后,由该应用程序生成第二API,用来选择所加载的可执行体中的一个以用于在附接到该主处理单元的诸如CPU或GPU之类的另一处理单元中执行。

    在一个可替换实施例中,用于目标处理单元的源在运行时期间基于加载到处理单元的可执行体被编译。处理单元和目标处理单元可以是中央处理单元(CPU)或图形处理单元(GPU)。处理单元和目标处理单元之间的差异被检测以从所加载的可执行体取出源。

    在一个可替换实施例中,响应于来自应用的API请求,利用包括多个可执行体的新任务来更新与诸如CPU或GPU之类的多个处理单元相关联的任务队列。判断对在多个处理单元中执行来自队列的新任务进行调度的条件。基于所判断出的条件,选择与新任务相关联的多个可执行体中的一个以用于执行。

    在一个可替换实施例中,响应于来自应用的API请求,从该应用加载用于执行数据处理功能的源,以在诸如CPU或GPU之类的多个目标数据处理单元的一个或多个中执行可执行体。自动确定多种类型的目标数据处理单元。基于目标处理单元的一个或多个中所要执行的所确定的类型来编译可执行体。

    在一个可替换实施例中,源和针对多个处理单元编译出的一个或多个相应的可执行体被存储在API库中来实现API函数。响应于从主处理器(host processor)中运行的应用对API库的请求,从API库中取出该源和该API函数的一个或多个相应可执行体。针对这多个单元中未包括的附加处理单元,从所取出的源在线编译出附加可执行体。根据API函数,在附加处理单元中和一个或多个处理单元中一起并发地执行附加可执行体和一个或多个所取出的可执行体。

    在一个可替换实施例中,在主处理器上接收API调用来执行应用,该应用具有多个用于执行的线程。主处理器耦合CPU和GPU。这多个线程被异步调度以用于CPU和GPU上的并行执行。如果GPU忙于图形处理线程,则被调度要在GPU上执行的线程可以在CPU中被执行。

    在一个可替换实施例中,在主处理器上接收API调用来执行应用,该应用具有多个用于执行的线程。主处理器耦合到CPU和GPU。这多个线程被异步初始化以用于CPU和GPU上的并行执行。如果GPU忙于图形处理线程,则被初始化要在GPU上执行的线程可以在CPU中被执行。

    从附图和以下详细描述中,本发明的其他特征将显而易见。

    【附图说明】

    在附图的示图中通过示例而非限制来图示本发明,相似的标号表示相似的元素,附图中:

    图1是图示出用于配置包括CPU和/或GPU的计算装置来执行应用的数据并行计算的系统的一个实施例的框图;

    图2是图示出具有多个并行操作来并发地执行多个线程的计算处理器的计算装置的示例的框图;

    图3是图示出经由计算装置标识符被配置为逻辑计算装置的多个物理计算装置的一个实施例的框图;

    图4是图示出通过匹配从应用接收到的能力需求来利用计算装置标识符配置多个物理计算装置的处理的一个实施例的流程图;

    图5是图示出在逻辑计算装置中执行计算可执行体的处理的一个实施例的流程图;

    图6是图示出加载可执行体的运行时处理的一个实施例的流程图,该处理包括针对被确定来执行该可执行体的一个或多个物理计算装置来编译源;

    图7是图示出从执行队列中选择计算内核执行实例以在与和该执行实例相关联的逻辑计算装置相对应的一个或多个物理计算装置中执行的处理的一个实施例的流程图;

    图8A是图示出建立API(应用编程接口)库的处理的一个实施例的流程图,该处理根据多个物理计算装置将用于一个或多个API的多个可执行体和源存储在库中;

    图8B是图示出应用执行多个可执行体中的一个和基于API请求从API库所取出的相应源的处理的一个实施例的流程图;

    图9是图示出多个物理计算装置中所要执行的计算内核可执行体的计算内核源的示例的样本源代码;

    图10是图示出通过调用API来配置用于在多个物理计算装置中执行多个可执行体中的一个的逻辑计算装置的示例的样本源代码;

    图11图示出可以与在此所述的实施例结合使用的、具有多个CPU和GPU(图形处理单元)的典型计算机系统的一个示例。

    【具体实施方式】

    在此描述用于多处理器上的数据并行计算的方法和设备。在以下描述中,阐述了大量特定细节以提供对本发明实施例的透彻说明。然而,对于本领域技术人员显而易见的是,可以实行本发明实施例而不用这些特定细节。在其它实例中,没有详细示出公知的组件、结构和技术以免使对本描述的理解模糊。

    在说明书中,提及“一个实施例”或“实施例”意味着结合该实施例描述的具体特征、结构或特征可以包括在本发明的至少一个实施例中。在说明书中的各个地方出现的短语“在一个实施例中”不一定涉及同一个实施例。

    通过包括硬件(例如,电路、专用逻辑等)、软件(例如在通用计算机系统或专用机器上运行的软件)或这两者的组合的处理逻辑来执行以下示图中所描述的处理。尽管以下根据某些顺序操作来描述处理,但是应当明白,可以以不同的顺序来执行所述操作中的某些操作。并且,可以并行地而不是顺序地执行某些操作。

    图形处理单元(GPU)可以是执行诸如2D、3D图形操作之类的高效图形操作和/或数字视频相关功能的专用图形处理器。GPU可以包括用来执行诸如位块传输(blitter)操作、纹理映射、多边形渲染(rendering)、像素着色(shading)和顶点着色之类的图形操作的专门的(可编程的)硬件。已知GPU从帧缓冲器中获取数据并且将像素混合到一起来将图像背景渲染到该帧缓冲器中以用于显示。GPU还可以控制该帧缓冲器并且允许该帧缓冲器被用来刷新诸如CRT或LCD显示器之类的显示器,CRT或LCD显示器是需要至少20Hz的速率的刷新(例如,每1/30秒,利用来自帧缓冲器的数据刷新该显示器)的短存留显示器。通常,GPU可以从与GPU耦合的CPU获取图形处理任务,通过显示控制器向显示装置输出光栅图形图像。在本说明书中提及的“GPU”可以是如Lindholdm等的美国专利No.7015913“Method and Apparatus for Multitheraded Processing of Data In aProgrammable Graphics Processor”(用于可编程图形处理器中的数据的多线程处理的方法和设备)和Swan等的美国专利No.6970206“Method forDeinterlacing Interlaced Video by A Graphics Processor”(用于通过图形处理器对交织后的视频进行去交织的方法)中所描述的图像处理器或可编程图形处理器,这两个专利被通过引用结合于此。

    在一个实施例中,多个不同类型的处理器(例如CPU或GPU)可以并发地执行一个或多个应用的数据并行处理任务来增大数据处理系统中可用处理资源的利用效率。数据处理系统的处理资源可以是基于多个物理计算装置的。物理计算装置可以是CPU或GPU。在一个实施例中,数据并行处理任务可以委托给多种类型的处理器,例如能够执行该任务的CPU或GPU。数据处理任务可以从处理器要求某些特定处理能力。处理能力例如可以是专用纹理(texturing)硬件支持、双精度浮点运算、专用本地存储器、流数据缓存或同步原语(synchronization primitives)。不同类型的处理器可以提供不同但是重叠的处理能力集。例如,CPU和GPU两者都能执行双精度浮点计算。在一个实施例中,应用能够平衡可用的CPU或GPU中的任一者来执行数据并行处理任务。

    在另一实施例中,可以在运行时期间自动执行对用于数据并行处理任务的多种不同类型的处理资源的选择和分配。应用可以通过API(应用程序接口)向数据处理系统的运行时平台发送包括数据处理任务所希望的能力需求列表的提示。相应地,运行时平台可以确定多个当前可用的、具有与所接收到的提示相匹配的能力的CPU和/或GPU来委托该应用的数据处理任务。在一个实施例中,该能力需求列表可以依赖于基础的数据处理任务。能力需求列表可以适用例如包括来自不同供应商的具有不同版本的GPU和多核CPU的不同处理器集合。因此,可以防止应用提供以特定类型CPU或GPU为目标的程序。

    图1是图示出用于配置包括CPU和/或GPU的计算装置来执行应用的数据并行计算的系统的一个实施例的框图。系统100可以实现并行计算体系结构。在一个实施例中,系统100可以是包括一个或多个主处理器的图形系统,这些主处理器通过数据总线113与一个或多个中央处理器117和诸如媒体处理器115之类的一个或多个其它处理器耦合。多个主处理器可以在托管系统(hosting system)101中被连到一起。这多个中央处理器117可以包括来自不同供应商的多核CPU。媒体处理器可以是具有专用纹理渲染硬件的GPU。另一媒体处理器可以是支持专用纹理渲染硬件和双精度浮点体系结构两者的GPU。多个GPU可以连接到一起以用于可扩缩连接接口(SLI)或CrossFire配置。

    在一个实施例中,托管系统101可以支持软件栈,软件栈包括软件栈组件,例如应用103、计算平台层111、计算运行时层109、计算编译器107和计算应用库105。应用103可以通过API(应用程序接口)调用与其它栈组件连接。可以为托管系统101中的应用103并发地运行一个或多个线程。计算平台层111可以维护数据结构、或计算装置数据结构,存储每个附接的物理计算装置的处理能力。在一个实施例中,应用可以通过计算平台层111来取出有关托管系统101的可用处理资源的信息。应用可以通过计算平台层111来选择和指定用于执行处理任务的能力需求。因此,计算平台层111可以针对该处理任务来确定物理计算装置的配置以从所附接的CPU 117和/或GPU 115中分配和初始化处理资源。在一个实施例中,计算平台层111可以针对与所配置的一个或多个实际的物理计算装置相对应的应用来生成一个或多个逻辑计算装置。

    计算运行时层109可以根据所配置的用于应用103的处理资源,例如一个或多个逻辑计算装置来管理处理任务的执行。在一个实施例中,执行处理任务可以包括创建代表处理任务的计算内核对象和分配例如保存可执行体、输入/输出数据等的存储资源。被加载用于计算内核对象的可执行体可以是计算内核对象。计算可执行体可以被包括在诸如CPU或GPU之类的计算处理器中所要执行的计算内核对象中。计算运行时层109可以与所分配的物理装置进行交互来执行处理任务的实际执行。在一个实施例中,计算运行时层109可以根据针对处理任务而配置的每个处理器(例如,CPU或GPU)的运行时状态来协调执行来自不同应用的多个处理任务。计算运行时层109可以基于运行时状态从被配置来执行处理任务的物理装置中选择一个或多个处理器。执行处理任务可以包括并发地在多个物理处理装置中执行一个或多个可执行体的多个线程。在一个实施例中,计算运行时层109可以通过监视每个处理器的运行时执行状况来跟踪所执行的每个处理任务的状况。

    运行时层可以从应用103加载与处理任务相对应的一个或多个可执行体。在一个实施例中,计算运行时层109自动地从计算应用库105加载执行处理任务所需要的附加可执行体。计算运行时层109可以从应用103或计算应用库105中加载计算内核对象的可执行体及其相应的源程序两者。计算内核对象的源程序可以是计算内核程序。根据被配置为包括多种类型和/或不同版本的物理计算装置的逻辑计算装置,可以基于单个源程序来加载多个可执行体。在一个实施例中,计算运行时层109可以激活计算编译器107来将所加载的源程序在线编译成最优用于被配置来执行可执行体的目标处理器(例如,CPU或GPU)的可执行体。

    除了根据相应源程序的现有可执行体以外,在线编译出的可执行体还可以被存储以用于将来的调用。此外,计算可执行体可以被离线编译并且经由API调用被加载到计算运行时109。计算应用库105和/或应用103可以响应于来自应用的库API请求来加载相关联的可执行体。可以为计算应用库105或应用103动态更新新编译出的可执行体。在一个实施例中,计算运行时109可以用通过新升级版本的计算装置的计算编译器107在线编译出的新可执行体来替换应用中的现有计算可执行体。计算运行时109可以插入在线编译出的新可执行体来更新计算应用库105。在一个实施例中,计算运行时109可以在加载处理任务的可执行体时调用计算编译器107。在另一个实施例中,计算编译器107可以被离线调用来建立用于计算应用库105的可执行体。计算编译器107可以编译并且链接计算内核程序来生成计算内核可执行体。在一个实施例中,计算应用库105可以包括多个用来支持例如开发工具箱和/或图像处理的函数。每个库函数可以对应于针对多个物理计算装置的计算应用库105中所存储的计算源程序和一个或多个可执行体。

    图2是图示出具有多个计算处理器的计算装置的示例的框图,这多个计算处理器并行地进行操作来并发地执行多个线程。每个计算处理器可以并行地(或并发地)执行多个线程。可以并行执行的线程可以称为线程块。计算装置可以具有能被并行执行的多个线程块。例如,示出在计算装置205中,M个线程作为一个线程块执行。多个线程块中的线程,例如,计算处理器_1 205的线程1和计算处理器_L 203的线程N,可以在一个计算装置上分别的计算处理器上或在多个计算装置上并行地执行。在多个计算处理器上的多个线程块可以并行地执行计算内核可执行体。多于一个计算处理器可以是基于例如ASIC(专用集成电路)装置的单个芯片的。在一个实施例中,可以在跨越多个芯片的多于一个的计算处理器上并发地执行来自应用的多个线程。

    计算装置可以包括一个或多个计算处理器,例如计算处理器_1 205和计算处理器_L 203。本地存储器可以与计算处理器耦合。可以由与计算处理器耦合的本地存储器来支持在计算处理器中运行的单个线程块中线程之间的共享存储器。跨越不同的线程块的多个线程,例如线程1 213和线程N209可以共享与计算装置201耦合的流存储器217中所存储的流。流可以是计算内核可执行体能够对其进行操作的元素的集合,例如图像流或变量流。变量流可以被分配用于存储处理任务期间对其进行操作的全局变量。图像流可以是可用于图像缓冲、纹理缓冲或帧缓冲的缓冲器。

    在一个实施例中,计算处理器的本地存储器可以实现为专用本地存储装置,例如处理器_1的本地共享存储器219和处理器_L的本地共享存储器211。在另一实施例中,计算处理器的本地存储器可以实现为用于计算装置的一个或多个计算处理器2的流存储器的流读-写缓存,例如用于计算装置201中的计算处理器205203的流数据缓存215。在另一实施例中,本地存储器可以实现在与本地存储器耦合的计算处理器中运行的线程块中的线程之间共享的专用本地存储装置,例如与计算处理器_1 205耦合的本地共享存储器219。专用本地存储装置可以不被跨越不同线程块的线程共享。如果计算处理器(例如处理器_1 205m)的本地存储器被实现为流读-写缓存(例如,流数据缓存215),则在本地存储器中声明的变量可以被从流存储器217中分配并且被存储到所实现的实现本地存储器的流读-写缓存(例如,流数据缓存215)中。当例如流读-写缓存和专用本地存储装置对于相应的计算装置都不可用时,线程块内的线程可以共享流存储器217中所分配的本地变量。在一个实施例中,每个线程与私有(private)存储器相关联,私有存储器用来存储由线程中所调用的函数使用的线程私有变量。例如,私有存储器1 211可以只被线程1 213访问。

    图3是图示出经由计算装置标识符而被配置为逻辑计算装置的多个物理计算装置的一个实施例的框图。在一个实施例中,应用303和平台层305可以在主CPU 301中运行。应用303可以是图1的应用103中的一个。托管系统101可以包括主CPU 301。物理计算装置Physical_Compute_Device-1305...Physical_Compute_Device-N 311中的每一个可以是图1的CPU 117或GPU 115中的一个。在一个实施例中,计算平台层111可以响应于来自应用303的API请求来生成计算装置标识符307,以用于根据API请求中所包括的能力需求的列表来配置数据并行处理资源。计算装置标识符307可以涉及根据计算平台层111进行的配置来选择实际的物理计算装置Physical_Compute_Device-1305...Physical_Compute_Device-N 311。在一个实施例中,逻辑计算装置309可以代表与主CPU 301分离的一组所选择的实际物理计算装置。

    图4是图示出用于通过匹配从应用接收到的能力需求、利用计算装置标识符来配置多个物理计算装置的处理的实施例的流程图。可以根据图1的系统100,在由托管系统101托管的数据处理系统中执行处理400。数据处理系统可以包括托管平台层(例如图1的计算平台层111)的主处理器和多个附接到主处理器的物理计算装置(例如,图1的CPU 117和GPU115)。

    在块401中,在一个实施例中,处理400可以建立代表与一种或多种相应的能力相关联的多个物理计算装置的数据结构(或计算装置数据结构)。各个物理计算装置可以附接到执行处理400的处理系统。诸如CPU或GPU之类的物理计算装置的能力或计算能力可以包括物理计算装置是否支持处理特征、存储器访问机制或指定扩展。处理特征可以与专用纹理硬件支持、双精度浮点运算或同步支持(例如互斥)有关。物理处理装置的存储器访问机制可以与变量流缓存的类型、图像流缓存的类型或专用本地存储器支持有关。数据处理系统的系统应用可以响应于将新的物理计算装置附接到数据处理系统来更新数据结构。在一个实施例中,可以预先确定物理计算装置的能力。在另一实施例中,数据处理系统的系统应用可以在运行时期间发现新附接的物理处理装置。该系统应用可以取出新发现的物理计算装置的能力,来更新代表所附接的物理计算装置及它们的相应能力的数据结构。

    根据一个实施例,在块403,处理400可以接收来自应用的计算能力需求。该应用可以通过调用API向系统应用发送计算能力需求。该系统应用可以与该应用的托管系统中的软件栈的平台层相对应。在一个实施例中,计算能力需求可以标识用于请求处理资源来执行该应用的任务的所需能力的列表。在一个实施例中,该应用可以要求所请求的资源在多个线程中并发地执行任务。作为响应,在块405,处理400可以从所附接的物理计算装置中选择一组物理计算装置。可以基于计算能力需求与能力数据结构中所存储的计算能力之间的匹配来确定选择。在一个实施例中,处理400可以根据通过能力需求提供的提示来执行匹配。

    处理400可以根据物理计算装置和计算能力需求之间所匹配的计算能力的数目来确定匹配评分。在一个实施例中,处理400可以选择具有最高匹配评分的多个物理计算装置。在另一实施例中,如果能力需求中的每个能力都被匹配,则处理400可以选择物理计算装置。处理400可以在块405,确定多组匹配物理计算装置。在一个实施例中,根据负载均衡能力来选择每组匹配物理装置。在一个实施例中,在块407,处理400可以为块405处所选择的每组物理计算装置生成计算装置标识符。处理400可以通过调用API向应用返回所生成的一个或多个计算装置标识符。应用可以根据计算装置标识符来选择采用哪些处理资源来执行任务。在一个实施例中,处理400在块407可以为所接收到的每个能力需求生成最多一个计算装置标识符。

    在一个实施例中,在块409,处理400可以根据相应的计算装置标识符来分配用于初始化块405处所选择的一组物理计算装置的逻辑计算装置的资源。处理400可以根据块405处的选择,响应于来自已经接收到一个或多个计算装置标识符的应用的API请求来执行对逻辑计算装置的初始化。处理400可以在该应用的逻辑计算装置上创建上下文对象。在一个实施例中,上下文对象与该应用上运行的托管系统中的一个应用线程相关联。并发地执行一个逻辑计算装置中或跨越不同的逻辑计算装置的处理任务的多个线程可以基于分开的上下文对象。

    在一个实施例中,处理400可以基于包括cuCreateContext、cuRetainContext和cuReleaseContext的多个API。API cuCreateContext创建计算上下文。计算上下文可以对应于计算上下文对象。API cuRetainContext使用由上下文标识的具体计算上下文作为cuRetainContext的输入自变量来递增实例的数目。API cuCreateContext进行隐式保留。这对于通常获得由应用传递给它们的上下文的第三方库很有帮助。然而,有可能该应用会删除上下文而不通知库。允许多个实例附接到上下文并且从上下文释放解决了由库使用的计算上下文不再有效的问题。如果cuRetainContext的输入自变量与有效计算上下文对象不相对应,则cuRetainContext返回CU_INVALID_CONTEXT。API cuReleaseContext从有效计算上下文中释放实例。如果cuReleaseContext的输入自变量与有效的计算上下文对象不相对应,则cuReleaseContext返回CU_INVALID_CONTEXT。

    图5是图示出在逻辑计算装置中执行计算可执行体的处理的实施例的流程图。在一个实施例中,可以由数据处理系统中的运行时层(例如,图1的计算运行时层109)来执行处理500。在块501处,处理500可以为逻辑计算装置上要运行的计算可执行体分配一个或多个流。处理任务可以由对流进行操作的计算可执行体来执行。在一个实施例中,处理任务可以包括输入流和输出流。处理500可以将所分配的流存储器映射到应用的逻辑地址或从其映射到所分配的流存储器。在一个实施例中,处理500可以基于来自应用的API请求来执行块501的操作。

    在块503处,根据一个实施例,处理500可以创建逻辑计算装置的计算内核对象。计算内核对象可以是针对用于执行函数的相应处理任务的相关联的流和可执行体而创建的对象。处理500可以在块505为计算内核对象建立函数自变量。函数自变量可以包括为函数输入或输出分配的流,例如块501处分配的流。处理500可以在块507处将计算内核可执行体和/或计算内核源加载到计算内核对象中。计算内核可执行体可以是根据逻辑计算装置要被执行用于执行与内核对象相关联的相应处理任务的可执行体。在一个实施例中,计算内核可执行体可以包括例如与目标物理计算装置的类型、版本和/或编译选项相关联的描述数据。计算内核源可以是从其编译出计算内核可执行体的源代码。处理500可以在块507加载与计算内核源相对应的多个计算内核可执行体。处理500可以从应用或通过诸如图1的计算应用库105之类的计算库来加载计算内核可执行体。计算内核可执行体可以利用相应计算内核源来加载。在一个实施例中,处理500可以根据来自应用的API请求执行块503、505和507处的操作。

    在块511,处理500可以更新执行队列来利用逻辑计算装置执行计算机内核对象。处理500可以利用计算运行时(例如,图1的计算运行时109)的合适的自变量、响应于来自应用或计算应用库(例如,图1的应用103或计算应用库105)的API调用来执行计算内核。在一个实施例中,处理500可以生成执行计算内核的计算内核执行实例。对用于执行计算内核的计算运行时(例如图1的计算运行时109)的API调用本身实际上可以是异步的。执行实例可以由可由计算运行时(例如,图1的计算运行时109)返回的计算事件对象来标识。计算内核执行实例可以被添加到用于执行计算内核实例的执行队列。在一个实施例中,对用于执行计算内核实例的执行队列的API调用可以包括计算处理器上同时并行执行的线程的数目和要使用的计算处理器的数目。计算内核执行实例可以包括指示所希望的用于执行相应计算内核对象的优先顺序的优先值。计算内核执行实例也可以包括标识之前的执行实例的事件对象和/或用于执行该执行的预期数目的线程和预期数目的线程块。可以在API调用中指定线程块的数目和线程的数目。在一个实施例中,事件对象可以指示包括该事件对象的执行实例与由事件对象标识的另一执行实例之间的执行顺序关系。可以要求包括事件对象的执行实例在由该事件对象标识的另一执行实例完成执行之后被执行。事件对象可以称为queue_after_event_object。在一个实施例中,执行队列可以包括多个用于执行相应的计算内核对象的计算内核执行实例。用于一个计算内核对象的一个或多个计算内核执行实例可以被调度用于执行队列中的执行。在一个实施例中,处理500可以响应于来自应用的API请求来更新该执行队列。该执行队列可以由该应用所运行于的托管数据系统来托管。

    在块513,处理500可以从用于执行的执行队列中选择计算内核执行实例。在一个实施例中,处理500可以根据相应逻辑计算装置来选择多于一个要被并发执行的计算内核执行实例。处理500可以判断:是否基于计算内核执行实例与执行队列中其他执行实例相关联的优先顺序和依赖关系而从执行队列中选择了计算内核执行实例。可以通过根据加载到相应计算内核对象的可执行体来执行该计算内核对象,从而执行计算内核执行实例。

    在块517,在一个实施例中,处理500可以选择加载到与所选择的计算内核实例相对应的计算内核对象的多个可执行体中的一个可执行体,以用于在与该计算内核对象的逻辑计算装置相关联的物理计算装置中执行。处理500可以针对一个计算内核执行实例选择要在多于一个物理计算装置中并行执行的多于一个可执行体。该选择可以基于与和所选择的计算内核实例相关联的逻辑计算装置相对应的物理计算装置的当前执行状况。物理计算装置的执行状况可以包括运行的线程的数目、本地存储器利用水平和处理器利用水平(例如,每单位时间的操作的峰值数目)等。在一个实施例中,该选择可以是基于预定的利用水平的。在另一个实施例中,该选择可以是基于与计算内核执行实例相关联的线程的数目和线程块的数目。处理500可以从物理计算装置取出执行状况。在一个实施例中,处理500可以执行用于从执行队列中选择计算内核执行实例的操作,以在块513 517处与托管系统中运行的应用异步地执行。

    在块519,处理500可以检查被调度用于该执行队列中的执行的计算内核执行实例的状况。可以由唯一的计算事件对象来标识各个执行实例。当相应的计算内核执行实例根据计算运行时(例如,图1的运行时109)被排队时,事件对象可以被返回给调用用于执行该执行实例的API的应用或计算应用库(例如,图5的应用103或计算应用库105)。在一个实施例中,处理500可以响应于来自应用的API请求来进行执行状况检查。处理500可以通过查询标识该计算内核执行实例的计算事件对象的状况来确定执行计算内核执行实例的完成。处理500可以等待直到计算内核执行实例的执行被完成为止,以返回来自应用的API调用。处理500可以基于事件对象来控制从各种流的处理执行实例读和/或写。

    在块521,根据一个实施例,处理500可以取出执行计算内核执行实例的结果。随后,处理500可以清理被分配用于执行该计算内核执行实例的处理资源。在一个实施例中,处理500可以将保存执行计算内核可执行体的结果的流存储器拷贝到本地存储器中。处理500可以删除在块501处所分配的变量流或图像流。处理500可以删除用于在计算内核执行被完成时删除的内核事件对象。如果与特定计算内核对象相关联的各个计算内核执行实例已经被完整执行,则处理500可以删除特定计算内核对象。在一个实施例中,处理500可以基于由应用发起的API请求来执行块521处的操作。

    图6是图示出加载可执行体的运行时处理的实施例的流程图,该运行时处理包括将源编译用于被确定来执行该可执行体的一个或多个物理计算装置。处理600可以作为图5的块507处的处理500的一部分而被执行。在一个实施例中,处理600可以在块601处为各个与逻辑计算装置相关联的物理计算装置选择一个或多个与该物理计算装置相兼容的现有计算内核可执行体。计算内核可执行体可以在相兼容的物理计算装置中被执行。该现有计算内核可执行体可以从应用或通过例如图1的计算应用库105的计算库获得。所选择的计算内核可执行体中的每一个计算内核可执行体可以由至少一个物理计算装置执行。在一个实施例中,该选择可以是基于与现有计算内核可执行体相关联的描述数据的。

    如果存在被选择的现有计算内核对象,则处理600可以在块603处判断所选择的计算内核可执行体中的任何一者是否对于物理计算装置是最优的。该判断例如可以是基于物理计算装置的版本的。在一个实施例中,如果描述数据中的目标物理计算装置的版本与物理计算装置的版本相匹配,则处理600可以判断出现有计算内核可执行体对于该物理计算装置是最优的。

    在块605,在一个实施例中,处理600可以使用在线编译器(例如图1的计算编译器107)来从相应的计算机内核源建立对于物理计算装置最优的新的计算内核可执行体。如果在块603处发现所选择的计算内核可执行体中没有计算内核可执行体对于物理计算装置是最优的,则处理600可以执行在线建立。在一个实施例中,如果在块601处发现现有计算内核可执行体中没有计算内核可执行体与物理计算装置相兼容,则处理600可以执行在线建立。计算内核源可以从应用或通过诸如图1的计算应用库105之类的计算库来获得。

    如果块605处的建立是成功的,则在一个实施例中,处理600可以在块607处将新建立的计算内核可执行体加载到相应的计算内核对象中。否则,处理600可以在块609处将所选择的计算内核可执行体加载到内核对象。在一个实施例中,如果计算内核可执行体还未被加载,则处理600可以将计算内核可执行体加载到计算内核对象。在另一实施例中,如果计算内核对象的现有计算内核可执行体中没有与物理计算装置相兼容的计算内核可执行体,并且相应计算内核源不可获得,则处理600可以生成错误消息。

    图7是图示出从执行队列中选择计算内核执行实例以在与和该执行实例相关联的逻辑计算装置相对应的一个或多个物理计算装置中执行的处理的一个实施例的流程图。处理700可以作为图5的块513处的处理500的一部分被执行。在一个实施例中,处理700可以在块701处标识执行队列中当前所调度的计算内核执行实例之间的依赖条件。计算内核执行实例的依赖条件可以防止计算内核执行实例的执行,如果该条件未完成的话。在一个实施例中,依赖关系可以是基于由输出流馈送的输入流之间的关系的。在一个实施例中,处理700可以根据执行实例的相应函数的输入流和输出流来检测执行实例之间的依赖关系。在另一个实施例中,具有较低优先级的执行实例可以与具有高优先级的另一执行具有依赖关系。

    在块703,在一个实施例中,处理700可以从多个被调度的计算内核执行实例中选择没有任何未完成的依赖条件的计算内核执行实例用于执行。该选择可以是基于被指派给执行实例的优先级的。在一个实施例中,所选择的计算内核执行实例可以与多个计算内核执行实例中的最高优先级相关联而没有未完成的依赖条件。在块705,处理700可以取出与所选择的计算内核执行实例相对应的物理计算装置的当前执行状况。在一个实施例中,物理计算装置的执行状况可以是从预定的存储位置中取出的。在另一实施例中,处理700可以向物理计算装置发送状况请求来接收执行状况报告。处理700可以在块707处基于所取出的执行状况,指派物理计算装置中的一个或多个来执行所选择的计算内核执行实例。在一个实施例中,物理计算装置可以根据与其他物理计算装置的负载均衡而被指派用于执行。所选择的物理计算装置可以与满足预定标准(例如,在预定处理器利用水平和/或存储器利用水平以下)的执行状况相关联。在一个实施例中,预定标准可以依赖于与所选择的计算内核执行实例相关联的线程的数目和线程块的数目。处理700可以将用于相同的执行实例或多个实例的分开的计算内核可执行体加载到一个或多个所指派的物理计算装置,以在多个线程中并行执行。

    图8A是图示出建立API(应用编程接口)库的处理的一个实施例的流程图,该处理根据多个物理计算装置将用于一个或多个API的多个可执行体和源存储在库中。处理800A可以在块801处被离线执行以将API函数的源代码加载到数据处理系统中。源代码可以是在一个或多个物理计算装置中所要执行的计算内核源。在一个实施例中,处理800A可以在块803处针对API函数指派多个目标物理计算装置。可以根据类型(例如,CPU或GPU)、版本或供应商来指派目标物理计算装置。处理800A可以在块805处针对各个所指派的目标物理计算装置将源代码编译成可执行体,例如,计算内核可执行体。在一个实施例中,处理800A可以基于在线编译器(例如图1的计算编译器107)来离线执行编译。在块807,处理800A可以将API函数的源代码与针对所指派的目标物理计算装置所编译出的相应可执行体存储到API库中。在一个实施例中,可以存储各个可执行体与描述数据,描述数据例如包括目标物理计算装置的类型、版本和供应商和/或编译选项。通过运行时期间的处理(例如,图5的处理500)可以取出描述数据。

    图8B是图示出应用执行多个可执行体中的一个和基于API请求从API库所取出的相应源的处理的一个实施例的流程图。在一个实施例中,处理800B在包括API库(例如,图1的计算应用库105)的数据处理系统中(例如,图1的托管系统101中)运行应用程序(例如,图1的应用103)。在块811处,处理800B可以基于API请求从API库中取出源(例如,计算内核源)和一个或多个相应可执行体(例如,计算内核可执行体),例如图5的块507处的处理500。各个可执行体可以与一个或多个目标物理计算装置相关联。在一个实施例中,计算内核可执行体可以与多种版本的物理计算装置后向兼容。在块813处,处理800B可以在多个物理计算装置中执行基于API请求所取出的可执行体中的一个来执行相关联的API函数,例如图5的块517处的处理500。处理800B可以与在块813处执行API函数异步地在块809处执行应用。

    图9是图示出多个物理计算装置中所要执行的计算内核可执行体的计算内核源的示例的样本源代码。示例900可以是具有包括变量901和流903的自变量(arguments)的API函数。示例900可以是基于诸如图1的系统101之类的并行计算环境的编程语言。在一个实施例中,可以利用被设计来实现在此所述实施例中的一个或多个实施例的附加扩展和限制,根据ANSI(美国国家标准学会)C标准来指定并行编程语言。这些扩展可以包括用来指定计算装置中所要执行的计算内核函数的函数限定符(qualifier),例如限定符905。计算内核函数可以不由其它计算内核函数调用。在一个实施例中,可以由并行程序语言的主函数(host function)来调用计算内核函数。主函数可以是常规的ANSI C函数。主函数可以在与执行计算内核函数的计算装置相分离的主处理器中被执行。在一个实施例中,这些扩展可以包括本地限制符,以描述需要被分配到与由线程块的所有线程共享的计算装置相关联的本地存储器中的变量。可以在计算内核函数内部声明本地限制符。对并行编程语言的限制可以在编译器时间或运行时间期间被增强以在这些限制被违反时,生成错误状况,例如,输出错误消息或退出执行。

    图10是图示出通过调用API来配置用于在多个物理计算装置中计算多个可执行体中的一个的逻辑计算装置的示例的样本源代码。示例1000可以由附接了多个物理计算装置的主机系统(例如,图1的托管系统101)中运行的应用来执行。示例1000可以指定并行编程语言的主函数。示例1000中的处理操作可以通过诸如图5的处理500之类的处理、作为API调用被执行。分配流1001和加载流图像1003的处理操作可以通过图5的块501处的处理500被执行。创建计算内核对象1005的处理操作可以通过图5的块503处的处理500被执行。处理操作1007可以将诸如图9的示例900之类的计算内核源加载到所创建出的计算内核对象。处理操作1009可以从所加载的计算内核源中显式地建立计算内核可执行体。在一个实施例中,处理操作1009可以将所建立的计算内核可执行体加载到所创建的计算内核对象。随后,处理操作1011可以显式地选择所建立的计算内核可执行体以用于执行所创建的计算内核对象。

    在一个实施例中,处理操作1013可以附加变量和流作为所创建的计算内核对象的函数自变量。处理操作1013可以通过图5的框505处的处理500被执行。处理操作1015可以执行所创建的计算内核对象。在一个实施例中,处理操作1015可以通过图5的块511处的处理500被执行。处理操作1015可以使得执行队列被利用与所创建的计算内核对象相应的计算内核执行实例而被更新。处理操作1017可以同步地等待所创建的计算内核对象的执行的完成。在一个实施例中,处理操作1019可以从计算内核对象的执行中取出结果。随后,处理操作1021可以清理所分配的用于执行计算内核对象的资源,例如事件对象、所创建的计算内核对象和所分配的存储器。在一个实施例中,处理操作1017可以基于内核事件对象是否被设置。处理操作1017可以通过图5的块519处的处理500被执行。

    图11示出可以与本发明一个实施例一起使用的计算机系统的一个示例。首先,系统1100可以被实现为图1中所示的系统的一部分。注意,尽管图11图示出计算机系统的各种组件,但是其不意图代表互连这些组件的任何具体的体系结构或方式,因为这些细节对于本发明并没有密切的关系。还要明白,还可以与具有更少组件或可能更多组件的网络计算机和其他数据处理系统(例如,手持计算机、个人数字助理(PDA)、蜂窝电话、娱乐系统、消费电子设备等)一起来实现本发明的一个或多个实施例。

    如图11中所示,作为一种形式的数据处理系统的计算机系统1101包括:耦合到诸如CPU和/或GPU之类的(一个或多个)微处理器1105的总线1103、ROM(只读存储器)1107、易失性RAM 1109和非易失性存储器1111。微处理器1103可以从存储器1107、1109、1111取出指令并且执行这些指令来执行上述操作。总线1103将这各种组件互连到一起,并且还将这些组件1105、1107、1109和1111与显示控制器和显示装置1113以及外围装置互连,外围装置例如是可以是鼠标、键盘、调制解调器、网络接口、打印机的输入/输出(I/O)装置和本领域公知的其他装置。通常输入/输出装置915通过输入/输出控制器1117耦合到该系统。易失性RAM(随机存取存储器)1109通常被实现为持续地需要电力以刷新或维护存储器中的数据的动态RAM(DRAM)。与显示装置1108耦合的显示控制器可以可选地包括一个或多个GPU来处理显示数据。可选地,可以提供GPU存储器1111来支持显示装置1108中所包括的GPU。

    海量存储装置1111通常是在即使电力被从系统移除后仍然能够维护数据(例如,大量数据)的磁硬盘驱动器或磁光驱或光驱或DVD RAM或闪存或其它类型的存储系统。通常,海量存储装置1111也将可以是随机存取存储器,尽管这不被要求。尽管图11示出海量存储装置1111是直接耦合到数据处理系统中的其余组件的本地装置,然而,将明白,本发明可以利用远离该系统的非易失性存储器,例如通过诸如调制解调器或以太网接口或无线连网接口之类的网络接口耦合到数据处理系统的网络存储装置。总线1103可以包括通过本领域公知的各种桥接器、控制器和/或适配器相互连接的一个或多个总线。

    可以利用诸如专用逻辑电路之类的逻辑电路或利用微控制器或执行程序代码指令的其他形式的处理核心来实现上述内容的部分。因此,可以利用诸如机器可执行指令之类的程序代码来执行通过上述讨论所教导的处理,机器可执行指令使得执行这些指令的机器执行某些功能。在该上下文中,“机器”可以是将中间形式(或“抽象”)指令转换成处理器指定指令(例如,诸如“虚拟机”(例如,Java虚拟机)、解释程序、共通语言运行时(Common Language Runtime)、高级语言虚拟机等的抽象执行环境)和/或被设计来执行指令的半导体芯片(例如,用晶体管实现的“逻辑电路”)上所部署的电子电路,例如专用处理器和/或通用处理器。通过以上讨论所教导的处理还可以由被设计来执行这些处理(或这些处理的一部分)的电子电路(代替机器或与机器结合)来执行,而不用执行程序代码。

    制造品可以被用来存储程序代码。存储程序代码的制造品可以被实现为,但不限于,适于存储电子指令的一个或多个存储器(例如,一个或多个闪存、随机存取存储器(静态、动态或其它))、光盘、CD-ROM、DVD ROM、EPROM、EEPROM、磁的或光的卡或其它类型的机器可读介质。也可以(例如经由通信链路(例如,网络连接))通过传播介质中所实现的数据信号来从远程计算机(例如,服务器)将程序代码下载到请求计算机(例如,客户端)。

    按照对计算机存储器内的数据比特的操作的算法和符号表述表示了先前的详细描述。这些算法描述和表述是数据处理领域中的那些技术人员向本领域其它技术人员最有效地传达它们工作的基本内容所使用工具。这里,算法一般被设想为导致所希望的结果的自洽操作序列。这些操作是需要对物理量的物理操作的那些操作。通常,但不一定是必须的,这些量采用能够被存储、被转送、被组合、被比较或以其他方式被操作的电信号或磁信号的形式。有时候,特别是为了共同使用的原由,已被证实将这些信号提作比特、值、元素、符号、字符、术语、数字等是方便的。

    然而,应该注意的是,所有这些以及相似的术语中的全部术语与适当地物理量相关联并且仅仅是适用这些量的方便标签。除非特别指明或者以其他方式从以上讨论显而易见,可以明白,在整个说明书中,利用诸如“处理”或“计算”或“判断”或“显示”等的术语的讨论,涉及计算机系统或类似的电子计算装置的动作和处理,计算机系统或类似的电子计算装置操作被表示为计算机系统的寄存器和存储器内的物理(电子)量的数据并且将它们变换成被类似地表示为计算机系统存储器或寄存器或其它这样的信息存储装置、发送或显示装置内的物理量的数据。

    本发明还涉及用于执行在此所述的操作的设备。该设备可以被特别构建用于所需要的目的,或其可以包括被计算机内所存储的计算机程序有选择地激活或重新配置的通用计算机。这样的计算机程序可以被存储在计算机可读存储介质中,计算机可读存储介质例如是但不限于任何类型的盘(包括软盘、光盘、CD-ROM和磁光盘、只读存储器(ROM)、RAM、EPROM、EEPROM、磁卡或光卡)或适于存储电子指令的任何类型的介质,并且它们各自耦合到计算机系统总线。

    这里表示的处理和显示不是固有地与任何具体计算机或其它设备有关。各自通用系统可以与根据在此的教导的程序一起使用,或者可以证实构建更加专门的设备来执行所述操作是方便的。从以下描述中,用于各种这样的系统的所需要的结构是明显的。此外,本发明并不是关于任何具体编程语言来描述的。可以理解,各种编程语言都可以用来实现如在这里所述的发明的教导。

    以上讨论仅仅描述了本发明的某些示例性实施例。本领域技术人员将容易从这样的讨论认识到,可以对附图和权利要求进行各种修改而不偏离本发明的精神和范围。

    

多处理器上的并行运行时执行.pdf_第1页
第1页 / 共36页
多处理器上的并行运行时执行.pdf_第2页
第2页 / 共36页
多处理器上的并行运行时执行.pdf_第3页
第3页 / 共36页
点击查看更多>>
资源描述

《多处理器上的并行运行时执行.pdf》由会员分享,可在线阅读,更多相关《多处理器上的并行运行时执行.pdf(36页珍藏版)》请在专利查询网上搜索。

公开了对调度队列中的多个可执行体进行调度以在诸如CPU或GPU之类的一个或多个物理计算装置中并发地执行的方法和设备。针对与所述一个或多个物理计算装置不同的一种类型的物理计算装置,从具有现有可执行体的源在线编译一个或多个可执行体。判断与所调度的可执行体相应的元素之间的依赖关系来选择在多于一个的物理计算装置中通过多个线程所要并发地执行的可执行体。如果GPU忙于图形处理线程,则被初始化用于在物理计算装置。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1