用于在多处理器上进行数据并行计算的应用编程接口的制作方法_5

文档序号:8942920阅读:来源:国知局
大小可以等于N个整数的乘积LfL 2*-*!^。为不同计 算单元编译的可执行代码可以与不同的局部线程组数相关。如果对于可执行代码规定了局 部线程组数,那么处理800的处理逻辑可按照多个计算单元的所确定的最佳线程组大小, 诸如例如基于在方框803对最佳线程组大小的确定,指定线程组大小。
[0076] 处理800的处理逻辑可对照目标计算单元的在运行时期间内的许可线程组大小, 检查指定的线程组大小。例如,计算单元会受取决于可用资源的最大运行时线程组大小的 限制。处理800的处理逻辑可调整指定的线程组大小,以满足目标计算装置的运行时资源 约束。在一些实施例中,当未规定多维局部线程组数时,处理800的处理逻辑可进行确定, 以在方框811识别最佳的线程组大小。
[0077] 在方框813,处理800的处理逻辑可按照线程组大小,划分线程的总数,以同时在 数据并行任务的多个计算单元中执行。可执行代码可以大小等于对应的线程组大小的一组 线程,在计算单元中并行执行。一组线程的大小可以是该组中的线程的数目。处理800的 处理逻辑可把数据并行任务分解成能够跨一个或多个计算单元同时执行的适当的多维块 或者线程组。
[0078] 在一个实施例中,可用两个不同的线程变量,全局线程ID (标识符)和局部线程 ID,识别执行可执行代码的线程。全局线程ID可用起始于(0,0,···,0)的多维值规定,并根 据全局线程数(G 1, G2,…,Gn)变成(G1-I, G2-2,…,Gn-I)。类似地,局部线程ID可用起始于 (0, 0,…,0)的多维值规定,并根据局部线程组数(L1, L2,…,Ln)变成(L「l,L2-2,…,Ln-I)。 线程的全局线程ID和局部线程ID可以是具有相同维数的多维值。
[0079] 图9A是图解说明通过按照多个物理计算装置把一个或多个API的源代码和多个 可执行代码保存在库中来构建API库的处理过程900的一个实施例的流程图。可以离线进 行处理900A,在方框901把API函数的源代码载入到数据处理系统中。源代码可以是在一 个或多个物理计算装置中执行的计算内核源代码。在一个实施例中,在方框903,处理900A 可指定API函数的多个目标物理计算装置。可按照类型,诸如CPU或GPU,版本或厂家,指定 目标物理计算装置。在方框905,处理900A可把源代码编译成每个指定的目标物理计算装 置的可执行代码,诸如计算内核可执行代码。在一个实施例中,处理900A可根据在线编译 器,诸如图1的计算编译器107,离线进行编译。
[0080] 在方框907,处理900A可把API函数的源代码和为指定的目标物理计算装置编译 的对应可执行代码保存在API库中。单一可执行代码的一个或多个API函数可以自API库 中输出,以适应运行于主处理器中的主应用程序,诸如图1的应用程序103,的源代码。例 如,应用程序可利用OpenCL API作为常规的"C"函数调用,执行可执行代码(或者计算内 核)。在一个实施例中,每个可执行代码可以与包括例如目标物理计算装置的类型、版本和 厂家,和/或编译选项的描述数据一起被保存。描述数据可由运行时期间的处理,诸如图5 的处理500,获取。
[0081] 图9B是图解说明应用程序执行根据API请求从API库中获取的多个可执行代码 之一连同对应的源代码的处理900B的一个实施例的流程图。在一个实施例中,处理900B 在包括API库,诸如图1的计算应用程序库105,的数据处理系统,诸如图1的主系统101, 中运行应用程序,诸如图1的应用程序103。在方框911,处理900B可根据API请求,从API 库获取源代码,诸如计算内核源代码,和一个或多个对应的可执行代码,诸如计算内核可执 行代码,诸如在图5的方框507的处理500。每个可执行代码可与一个或多个目标物理计算 装置相关联。在一个实施例中,计算内核可执行代码可以向下兼容多个版本的物理计算装 置。在方框913,处理900B可在多个物理计算装置中执行基于API请求获取的可执行代码 之一,以执行相关的API函数,诸如在图5的方框517的处理500。处理900B可异步运行方 框909的应用程序,以在方框913执行API函数。
[0082] 图10是图解说明将在多个物理计算装置中执行的计算程序可执行代码的计算程 序源代码的例子的样本源代码。例子1000可代表具有包括变量1001和流(或计算存储对 象)1003的自变量的API函数。例子1000可以基于并行计算环境,诸如图1的系统101,的 编程语言。在一个实施例中,可按照具有被设计来实现这里描述的一个或多个实施例的附 加扩展和限制的ANSI (美国国家标准委员会)C标准,指定并行编程语言。所述扩展可包括 用于指定将在计算装置中执行的计算内核函数的函数限定符,诸如限定符1005。计算内核 函数不可被其它计算内核函数调用。在一个实施例中,计算内核函数可被并行程序语言中 的主函数调用。主函数可以是常规的ANSI C函数。可在与执行计算内核函数的计算装置 分离的主处理器中执行主函数。在一个实施例中,所述扩展可包括描述需要在与计算装置 相关的局部存储器中分配以便由线程组的所有线程共用的变量的局部限定符。局部限定符 可在计算内核函数内声明。在编译器时间或运行时期间,可强制执行并行编程语言的限制, 以便在所述限制被违反时,产生错误条件,诸如输出错误消息或退出执行。
[0083] 图IIA-IIC包括图解说明通过调用API来配置在多个物理计算装置中执行多个可 执行代码之一的逻辑计算装置的例子的样本源代码。例子1100A-1100C可由在与多个物理 计算装置附接的主系统,诸如图1的主系统101,中运行的应用程序执行。例子1100A-1100C 可规定并行编程语言的主函数。诸如图4的处理400和/或图5的处理500之类的处理可 以API调用的形式执行例子1100A-1100C中的处理操作。从计算装置、计算装置组或逻辑计 算装置1101创建上下文对象的处理操作可在图4的方框411,由处理400的处理逻辑执行。 分配输入/输出图像存储对象(例如,计算存储对象)的处理操作可在图5的方框501,由 处理500的处理逻辑执行。
[0084] 现在参见图11B,分配和载入阵列存储对象1103b的处理操作可在图5的方框 501,由处理500的处理逻辑执行。创建计算程序对象1105的处理操作可在图5的方框503, 由处理500的处理逻辑执行。处理操作1107可把计算程序源代码,诸如图9的例子900,载 入所创建的计算程序对象中。处理操作1109可明确地由载入的计算程序源代码,构建计算 程序可执行代码。在一个实施例中,处理操作1109可把已构建的计算程序可执行代码载入 所创建的计算程序对象中。随后,处理操作1111可创建指向所构建的用于调度计算装置上 的执行的计算程序可执行代码的计算内核对象。
[0085] 现在参见图11C,在一个实施例中,处理操作1113可以以所创建的计算内核对象 的函数自变量的形式,附加变量和计算存储对象。处理操作1113可在图5的方框505,由处 理500的处理逻辑执行。处理操作1115可执行所创建的计算内核对象。在一个实施例中, 处理操作1115可在图5的方框511,由处理500的处理逻辑执行。处理操作1115可使执行 队列被与所创建的计算内核对象对应的计算内核执行实例更新。处理操作1117可同步等 待执行所创建的计算内核对象的完成。在一个实施例中,处理操作1119可获取执行计算内 核对象的结果。随后,处理操作1121可清除为执行计算内核对象而分配的资源,诸如事件 对象、所创建的计算内核对象和所分配的存储器。在一个实施例中,可根据是否设定了内核 事件对象,异步执行处理操作1117。处理操作1117可在图5的方框519,由处理500的处 理逻辑执行。
[0086] 图12示出可以与本发明的一个实施例一起使用的计算机系统1200的一个例子。 例如,系统1200可被实现成图1中所示的系统的一部分。注意,尽管图12图解说明计算 机系统的各个组件,不过并不意图代表互连各个组件的任何特殊体系结构或方式,因为这 样的细节与本发明关系不大。另外要认识到具有较少组件,或者可能具有更多组件的网络 计算机和其它数据处理系统(例如,手持计算机,个人数字助手(PDA),蜂窝电话机,娱乐系 统,消费性电子装置等)也可一起用于实现本发明的一个或多个实施例。
[0087] 如图12中所示,作为一种形式的数据处理系统的计算机系统1200包括与诸如CPU 和/或GPU之类的微处理器(一个或多个)1203、R0M(只读存储器)1207、易失性RAM 1205 和非易失性存储器1206耦接的总线1202。微处理器1203可从存储器1207、1205、1206获取 指令,并利用高速缓存1204执行所述指令,从而实现上述操作。总线1202把这些各个组件 相互连接在一起,还使这些组件1203、1207、1205和1206与显示控制器和显示装置1208互 连,并与诸如输入/输出(I/O)装置之类的外设互连,所述输入/输出(I/O)装置可以是鼠 标、键盘、调制解调器、网络接口、打印机和本领域中公知的其它装置。一般来说,输入/输 出装置1210通过输入/输出控制器1209与系统耦接。易失性RAM (随机存取存储器)1205 一般被实现成动态RAM(DRAM),动态RAM持续需要电力,以刷新或保持存储器中的数据。与 显示装置1208耦接的显示控制器可任选地包括一个或多个GPU,以处理显示数据。可选的 是,可以提供GPU存储器1211,以支持包括在显示装置1208中的GPU。
[0088] 大容量存储装置1206 -般是磁性硬盘驱动器,或者磁光驱动器,或者光学驱动器 或者DVD RAM,或者闪速存储器,或者即使在从系统除去电力之后仍然保持数据(例如,大 量数据)的其它各种存储器系统。通常,大容量存储装置1206也可以是随机存取存储器, 不过并不要求这样。尽管图12示出大容量存储装置1206是与数据处理系统中的其余组件 直接耦接的本地装置,不过要认识到本发明可以利用远离所述系统的非易失性存储器,诸 如通过网络接口,诸如调制解调器或以太网接口或无线联网接口,与数据处理系统耦接的 网络存储装置。如本领域中众所周知的,总线1202可包括通过各个桥接器、控制器和/或 适配器相互连接的一条或多条总线。
[0089] 上面说明的各个部分可用诸如专用逻辑电路之类的逻辑电路,或者用微控制器或 者执行程序代码指令的其它形式的处理核芯实现。上面的讨论所教导的处理可用诸如机器 可执行指令之类的程序代码实现,所述机器可
当前第5页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1