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

文档序号:8942920阅读:来源:国知局
目。处理500的处理逻辑可从物理计算装置获取执行状态。在一个实施例 中,处理500的处理逻辑可执行从执行队列中选择计算内核执行实例以便在方框513、517 与运行于主系统中的应用程序异步地执行的操作。
[0062] 在方框519,处理500的处理逻辑可检查被调度在执行队列中执行的计算内核执 行实例的执行状态。每个执行实例可用唯一的计算事件对象识别。当按照计算运行时,诸 如图1的运行时109,对对应的计算内核执行实例排队时,事件对象可被返回给调用API以 执行该执行实例的应用程序或计算应用程序库,诸如图1的应用程序103或者计算应用程 序库105。在一个实施例中,处理500的处理逻辑可响应于来自应用程序的API请求,进行 执行状态检查。处理500的处理逻辑可通过询问识别计算内核执行实例的计算事件对象的 状态,确定执行计算内核执行实例的完成。处理500的处理逻辑可等待,直到计算内核执行 实例的执行完成为止,才返回到来自应用程序的API调用。处理500的处理逻辑可根据计 算事件对象,控制处理读取和/或写入各个流的执行实例。
[0063] 在方框521,按照一个实施例,处理500的处理逻辑可获取执行计算内核执行实例 的结果。随后,处理500的处理逻辑可清除为执行计算内核执行实例而分配的处理资源。在 一个实施例中,处理500的处理逻辑可把保持执行计算内核可执行代码的结果的流存储器 复制到局部存储器中。处理500的处理逻辑可删除在方框501分配的变量流或图像流。处 理500的处理逻辑可删除用于检测计算内核执行何时完成的内核事件对象。如果与特定的 计算内核对象相关的每个计算内核执行实例都已完全被执行,那么处理500的处理逻辑可 删除该特定的计算内核对象。在一个实施例中,处理500的处理逻辑可根据由应用程序发 起的API请求,执行方框521的操作。
[0064] 图6是图解说明载入可执行代码的运行时处理600,包括编译为执行该可执行代 码而确定的一个或多个物理计算装置的源代码,的实施例的流程图。可在图5的方框507, 以处理500的一部分的形式执行处理600。在一个实施例中,对于和逻辑计算装置相关的每 个物理计算装置,处理600可在方框601选择与该物理计算装置兼容的一个或多个现有的 计算内核可执行代码。计算内核可执行代码可在兼容的物理计算装置中执行。可从应用程 序,或者通过计算库,诸如图1的计算应用程序库105获得现有的计算内核可执行代码。每 个所选择的计算内核可执行代码可由至少一个物理计算装置执行。在一个实施例中,所述 选择可以基于和现有的计算内核可执行代码相关的描述数据。
[0065] 如果存在所选择的现有计算内核对象,那么处理600可在方框603确定对于物理 计算装置来说,所选择的计算内核可执行代码任意之一是否是最佳的。例如,所述确定可以 基于例如物理计算装置的版本。在一个实施例中,如果描述数据中的目标物理计算装置的 版本与物理计算装置的版本匹配,那么处理600可确定对该物理计算装置来说,现有的计 算内核可执行代码是最佳的。
[0066] 在方框605,在一个实施例中,处理600可利用在线编译器,诸如图1的计算编译器 107,由对应的计算内核源代码建立对于物理计算装置最佳的新的计算内核可执行代码。如 果在方框603,发现对物理计算装置来说,所选择的计算内核可执行代码都不是最佳的,那 么处理600可执行在线构建。在一个实施例中,如果在方框601,发现现有的计算内核可执 行代码都不与物理计算装置兼容,那么处理600可执行在线构建。可从应用程序,或者通过 计算库,诸如图1的计算应用程序库105获得计算内核资源。
[0067] 如果在方框605的构建是成功的,那么在一个实施例中,在方框607,处理600可把 新构建的计算内核可执行代码载入到对应的计算内核对象中。否则,在方框609,处理600 可把所选择的计算内核可执行代码载入到内核对象中。在一个实施例中,如果计算内核可 执行代码还未被加载,处理600可把该计算内核可执行代码载入到计算内核对象中。在另 一个实施例中,如果计算内核对象的现有计算内核可执行代码都不与物理计算装置兼容并 且不可获得对应的计算内核源代码,则处理600可产生错误消息。
[0068] 图7是图解说明从执行队列中选择计算内核执行实例以便在和与执行实例相关 的逻辑计算装置对应的一个或多个物理计算装置中执行的处理700的一个实施例的流程 图。可在图5的方框513,以处理500的一部分的形式执行处理700。在一个实施例中,处理 700可在方框701,识别目前在执行队列中调度的计算内核执行实例之间的依赖条件。如果 计算内核执行实例的依赖条件未决的话,该依赖条件可阻止计算内核执行实例的执行。在 一个实施例中,依赖条件可以基于由输出流供给的输入流之间的关系。在一个实施例中,处 理700可按照执行实例的对应函数的输入流和输出流,检测执行实例之间的依赖条件。在 另一个实施例中,具有较低优先级的执行实例可具有与具有高优先级的另一个执行实例的 依赖关系。
[0069] 在方框703,在一个实施例中,处理700可从没有任何未决的依赖条件的多个被调 度的计算内核执行实例中选择供执行的计算内容执行实例。所述选择可以基于分配给执行 实例的优先级。在一个实施例中,所选择的计算内核执行实例可以与没有未决的依赖条件 的多个计算内核执行实例中的最高优先级相关联。在方框705,处理700可获取与所选择的 计算内核执行实例对应的一个或多个物理计算装置的当前执行状态。在一个实施例中,物 理计算装置的执行状态可以取自预定的存储位置。在另一个实施例中,处理700可向物理 计算装置发送状态请求,以接收执行状态报告。在方框707,处理700可根据获取的执行状 态,指定一个或多个物理计算装置来执行所选择的计算内核执行实例。在一个实施例中,可 按照与其它物理计算装置的负载均衡考虑因素,指定物理计算装置用于执行。所选择的物 理计算装置可以与满足一个或多个规定(例如,预定)标准,诸如低于预定的处理器使用水 平和/或存储器使用水平,的执行状态相关联。在一个实施例中,预定标准可以取决于与所 选择的计算内核执行实例相关的线程的数目和线程组的数目。处理700可把同一执行实例 或多个实例的独立计算内核可执行代码载入到一个或多个指定的物理计算装置中,以便在 多个线程中并行执行。
[0070] 图8是图解说明确定最佳的线程组大小以便在多个计算单元之间同时执行计算 内核对象的处理800的一个实施例的流程图。例证处理800可由包含硬件(电路,专用逻 辑等)、软件(诸如在专用机器上运行的软件)或这二者的组合的处理逻辑执行。例如,处 理800可由图1的系统100的某些组件执行,或者可在图5的方框523作为处理500的一 部分执行。在一个实施例中,在方框801,处理800的处理逻辑可根据编译自以不同计算单 元为目标的单一源代码的可执行代码,确定资源要求。可执行代码的资源要求可包括与可 执行代码的目标计算单元的寄存器、存储器和/或其它硬件组件有关的使用数据。单一的 源代码可被编译成载入到不同类型的计算单元中的不同可执行代码,以执行由所述单一源 代码指定的数据并行任务(或者函数)。在一些实施例中,处理800的处理逻辑可根据源代 码和用于执行编译自源代码的指令的目标计算单元,确定资源要求。
[0071] 处理800的处理逻辑可分析(和/或遍历)编译自以计算单元为目标的源代码的 可执行代码的中间表示,从而确定在目标计算单元中执行该可执行代码所需的资源。在分 析期间,处理800的处理逻辑可根据匹配最佳条件,识别一部分源代码,以重新编译所识别 的那部分源代码,从而减少在目标计算单元中执行所需的资源。例如,处理800的处理逻辑 可用常数值代替源代码中的变量。处理800的处理逻辑可按照对应的可执行代码的分析, 识别数据并行任务的维数。当所识别的维数不同于例如利用API指定的维数时,处理800 的处理逻辑可按照例如系统设置,选择所识别的维数和指定的维数之一。
[0072] 在方框803,在某一实施例中,处理800的处理逻辑可按照所确定的资源要求,确 定在多个计算单元之间并行执行可执行代码的最佳线程组大小。一组线程可在目标计算单 元中同时执行编译的可执行代码。最佳的线程组大小可以是在计算单元中执行可执行代码 以使该计算单元内的资源利用达到最大的线程组中的线程的数目。可利用完成数据并行任 务的时间量来测量计算单元的资源利用。在一些实施例中,处理800的处理逻辑可从计算 单元获取当前的资源利用状态,以确定可执行代码的最佳线程组大小。最佳线程组大小可 以基于与可执行代码要进行的数据并行任务相关的维数。维数可以是规定沿着数据并行任 务的多于一个的维度的迭代计算的数。例如,图像处理任务可与沿着图像宽度和图像高度 的^维相关联。
[0073] 在方框805,按照一个实施例,处理800的处理逻辑可确定在多个计算单元之间并 行执行编译自单一源代码的一个或多个可执行代码(或者计算内核)以完成数据并行任务 (或者函数)的线程的总数。处理800的处理逻辑可接收来自运行于主处理器(或者主处 理单元)中的应用程序,诸如图1的主系统101中的应用程序103,的API请求。API请求 可包括把多维值作为N个整数(G 1, G2,…,Gn)的数组的全局线程数。整数N是与数据并行 任务相关的维数。处理800的处理逻辑可计数来自于多维值的数组中的整数的数目,以确 定维数。响应于API请求,处理800的处理逻辑可按照N个整数的乘积,确定将 在多个计算单元之间执行可执行代码的线程的总数。
[0074] 在一个实施例中,处理800的处理逻辑可验证在方框807是否指定了局部线程组 数。局部线程组数可具有指定为N个整数(L 1, L2,…,Ln)的数组的多维值。在一个实施例 中,局部线程组数的维数可以等于进行数据并行任务的总线程数的维数。处理800的处理 逻辑可从程序内核对象获取局部线程组数,所述程序内核对象与源代码和/或目标计算单 元的编译自源代码的可执行代码相关。在一个实施例中,可利用API规定局部线程组数,以 编译源代码。如果能够获取局部线程组数,那么处理800的处理逻辑可验证局部线程组数 已被规定。在一些实施例中,可利用来自运行于主处理器中的应用程序的API请求,规定局 部线程组数。API请求可包括多维全局线程数和多维局部线程组数。
[0075] 在方框809,如果已经规定了局部线程组数,那么处理800的处理逻辑可按照规定 的局部线程组数,指定计算单元的线程组大小。在一个实施例中,与具有多维值(L 11L2,… ,LN)的局部线程组数对应的线程组
当前第4页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1