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

文档序号:8942920阅读:来源:国知局
理资源以执行应用程序的任务的所需能力的列表。在一个实施例中,应用程序可要求所请 求的处理资源同时在多个线程中执行所述任务。作为响应,在方框405,处理400的处理逻 辑可从所附接的物理计算装置中选择一组物理计算装置。所述选择可根据计算能力要求与 保存在能力数据结构中的计算能力之间的匹配来确定。在一个实施例中,处理400的处理 逻辑可按照由能力要求所提供的提示,进行所述匹配。
[0051] 处理400的处理逻辑可按照在物理计算装置和计算能力要求之间匹配的计算能 力的数目,确定匹配分数。在一个实施例中,处理400的处理逻辑可选择匹配分数最高的多 个物理计算装置。在另一个实施例中,如果能力要求中的每个能力都匹配,那么处理400的 处理逻辑可选择一个物理计算装置。在方框405,处理400的处理逻辑可确定多组匹配的物 理计算装置。在一个实施例中,按照每个装置的负载平衡能力,选择每组匹配的物理计算装 置。在方框407,在一个实施例中,处理400的处理逻辑可产生在方框405选择的每组物理 计算装置的计算装置标识符。处理400的处理逻辑随后通过调用的API,把一个或多个所产 生的计算装置标识符返回给应用程序。应用程序可按照计算装置标识符,选择哪些处理资 源用于执行任务。在一个实施例中,对于每个接收到的能力要求,处理400的处理逻辑可在 方框407产生最多一个计算装置标识符。
[0052] 在方框409,在一个实施例中,处理400的处理逻辑可按照对应的计算装置标识 符,分配资源以初始化在方框405选择的一组物理计算装置的逻辑计算装置。逻辑计算装 置可以是包括一个或多个物理计算装置的一个计算装置组。处理400的处理逻辑可响应于 来自接收与在方框405的选择相对应的一个或多个计算装置标识符的应用程序的API请 求,进行初始化逻辑计算装置。处理400的处理逻辑可创建关于应用程序的逻辑计算装置 的上下文对象。可按照当创建上下文对象时在API请求中规定的参数,按次序地(例如,同 步地)或者无序地(例如,异步地)执行作用于上下文对象的计算存储对象、计算程序对象 和/或计算程序可执行代码的命令。可利用API请求,为上下文对象启动作用于计算存储 对象、计算程序或计算内核的概要命令(profiling command)。在一个实施例中,上下文对 象与运行应用程序的主系统中的一个应用程序线程相关。在一个逻辑计算装置中,或者跨 不同的逻辑计算装置同时执行处理任务的多个线程可以基于独立的上下文对象。
[0053] 在一个实施例中,处理400的处理逻辑可以基于包括clCreateContext, clRetainContext 和 clReleaseContext 的多个 API。API clCreateContext 创建计算上 下文。计算上下文可对应于计算上下文对象。API clRetainContext通过把由上下文 识别的特定计算上下文用作clRetainContext的输入自变量,而递增实例的数目。API clCreateContext进行隐含的保留。这非常有益于第三方库,第三方库一般获得由应 用程序传给它们的上下文。不过,应用程序也可删除上下文,而不通知所述库。允许多 个实例附接到上下文和脱离上下文解决了库使用的计算上下文不再有效的问题。如果 clRetainContext的输入自变量不对应于有效的计算上下文对象,那么clRetainContext 返回CU_INVALID_C0NTEXT。API clReleaseContext使实例与有效的计算上下文分 离。如果clReleaseContext的输入自变量不对应于有效的计算上下文对象,那么 clReleaseContext 返回 CU_INVALID_C0NTEXT〇
[0054] 图5是图解说明在逻辑计算装置中执行计算可执行代码的例证处理500的实施例 的流程图。在一个实施例中,处理500可由数据处理系统中的运动时层,例如图1的计算运 行时层109执行。在方框501,处理500的处理逻辑可分配逻辑计算装置中的一个或多个 计算存储对象(例如,流),以执行计算可执行代码。计算存储对象可包括表示例如图像存 储对象或者阵列存储对象的一个或多个数据元素。阵列存储对象可以是数据元素的一维集 合。图像存储对象可以是保存二维、三维或者其它多维数据,诸如纹理、帧缓冲器或图像的 集合。处理任务可由通过利用计算存储API,其中包括从输入的计算存储对象读取和写入输 出的计算存储对象,作用于计算存储对象或流的计算程序可执行代码执行。在一个实施例 中,计算存储对象可附着于数据对象,诸如缓冲器对象,纹理对象或渲染缓冲器对象,以便 利用计算存储API更新数据对象。数据对象可以与激活对数据对象的图形数据处理操作, 诸如文本渲染的API相关。
[0055] 当分配计算存储对象时,处理500的处理逻辑可按照API中的指定,确定分配应 存在于何处。例如,可在主存储器,诸如图1的主系统101的主存储器,和/或计算装置存 储器,诸如图2的全局存储器或常数存储器217之外分配计算存储对象。在主存储器中分 配的计算存储对象需要高速缓存在计算装置存储器中。处理500的处理逻辑可利用非阻塞 API接口,例如,根据所产生的事件对象,异步地把数据载入所分配的计算存储对象中,所述 事件对象包括指示数据是否已被载入计算存储对象中的同步数据。在一个实施例中,处理 500的处理逻辑可调度当读取自或写入到所分配的计算存储对象时的存储器访问操作。处 理500的处理逻辑可映射所分配的流存储器,以形成应用程序的逻辑地址。在一个实施例 中,处理500的处理逻辑可根据来自在主处理器中运行的应用程序,诸如图1的应用程序 103的API请求,执行方框501的操作。
[0056] 在方框503,按照一个实施例,处理500的处理逻辑可创建逻辑计算装置(例如,计 算装置组)的计算程序对象。计算程序对象可包括代表数据并行程序的输出函数或入口点 的一组计算内核。计算内核可包括能够在计算单元上执行以完成数据并行任务(例如,函 数)的计算程序可执行代码的指针。每个计算内核可以与一组函数自变量关联,所述一组 函数自变量包括为函数输入或输出分配的计算存储对象或流,诸如在方框501分配的流。
[0057] 在方框509,处理500的处理逻辑可把计算程序二进制代码和/或计算程序源代 码载入计算程序对象中。计算程序二进制代码可包括描述将在计算装置上运行的计算程序 可执行代码的比特。计算程序二进制代码可以是计算程序可执行代码,和/或将被转换成 计算程序可执行代码的计算程序源代码的中间表示。在一个实施例中,计算程序可执行代 码可包括与例如目标物理计算装置(例如GPU或CPU)的类型,版本,和/或编译选项或标 记,诸如线程组大小和/或线程组维数有关的描述数据。计算程序源代码可以是计算程序 可执行代码编译自的源代码。处理500的处理逻辑可在方框509载入与计算程序源代码对 应的多个计算程序可执行代码。在一个实施例中,处理500的处理逻辑可从应用程序或者 通过计算库,诸如图1的计算应用程序库105载入计算程序可执行代码。计算程序可执行 代码可以和对应的计算程序源代码一起被加载。处理500的处理逻辑可在方框505,为计算 程序对象设置函数自变量。在一个实施例中,处理500的处理逻辑可按照来自应用程序的 API请求,执行方框503、505和509的操作。
[0058] 在方框511,处理500的处理逻辑可更新执行队列,以用逻辑计算装置执行计算内 核对象。处理500的处理逻辑可响应于来自应用程序或计算应用程序库,诸如图1的应用 程序103或计算应用程序库105,的对计算运行时,例如,图1的计算运行时109,的具有适 当自变量的API调用,执行计算内核。执行计算内核可包括执行与计算内核相关的计算程 序可执行代码。在一个实施例中,处理500的处理逻辑可产生执行计算内核的计算内核执 行实例。对执行计算内核的计算运行时,诸如图1的计算运行时109,的API调用本质上可 以是异步的。执行实例可用可由计算运行时,诸如图1的计算运行时109,返回的计算事件 对象来识别。计算内核执行实例可被添加到执行队列中,以执行计算内核实例。
[0059] 在一个实施例中,对执行计算内核的计算运行时的API调用可包括作为线程组在 计算处理器上同时并行执行的线程的数目。API调用可包括要使用的计算处理器的数目。 计算内核执行实例可包括指示执行对应的计算程序可执行代码的希望优先权的优先权值。 计算内核执行实例还可包括识别前一执行实例和/或完成所述执行的预期线程总数和线 程组的数目的事件对象。线程组的数目和线程的总数可在API调用中规定。在一个实施例 中,事件对象可以指示包括事件对象的执行实例和由该事件对象识别的另一个执行实例之 间的执行顺序关系。可能要求在事件对象识别的另一个执行实例结束执行之后,执行包括 该事件对象的执行实例。事件对象可被称为queue_after_event_ob ject。在一个实施例中, 执行队列可包括用于执行对应的计算程序可执行代码的多个计算内核执行实例。用于计算 程序可执行代码的一个或多个计算内核执行实例可被调度,以便在执行队列中执行。在一 个实施例中,处理500的处理逻辑响应于来自应用程序的API请求,更新执行队列。执行队 列可由应用程序所运行于的主数据系统托管。
[0060] 在方框513,处理500的处理逻辑可从执行队列中选择计算内核执行实例以便执 行。在一个实施例中,处理500的处理逻辑可按照对应的逻辑计算装置,选择要被同时执行 的多于一个的计算内核执行实例。处理500的处理逻辑可确定计算内核执行实例是否是根 据其与执行队列中的其它执行实例的相关优先权和依赖关系而从执行队列中选择的。计算 内核执行实例可通过按照载入计算内核对象中的可执行代码来执行其对应的计算内核对 象而被执行。
[0061] 在方框517,在一个实施例中,处理500的处理逻辑可选择载入到与所选择的计算 内核实例对应的计算内核对象中的多个可执行代码中的一个,以便在与计算内核对象的逻 辑计算装置相关的物理计算装置中执行。处理500的处理逻辑可为一个计算内核执行实 例,选择将并行地在多于一个的物理计算装置中执行的多于一个的可执行代码。所述选择 可基于与和所选计算内核执行实例相关的逻辑计算装置对应的物理计算装置的当前执行 状态。物理计算装置的执行状态可包括运行的线程的数目,局部存储器使用水平和处理器 使用水平(例如,单位时间的峰值运算次数)等。在一个实施例中,所述选择可以基于预定 的使用水平。在另一个实施例中,所述选择可以基于与计算内核执行实例相关的线程的数 目和线程组的数
当前第3页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1