首页> 中国专利> 具有横跨多个处理器的数据并行线程之映射处理逻辑

具有横跨多个处理器的数据并行线程之映射处理逻辑

摘要

一种用以在处理核心上执行处理逻辑的复数资料并行线程的方法,包含将该复数资料并行线程群集成一个或更多工作群组,使来自该一个或更多工作群组的第一个工作群组关联于在该处理器核心上的操作系统线程,以及将来自该第一工作群组的线程配置成该操作系统线程内的使用者层级线程。在一范例中,一种方法使先前配置成用于GPU的GPU核函数能够在例如多核心CPU的CPU上执行。以此方法将大量资料并行线程映射至CPU以减少实例化在CPU上的耗成本的操作系统线程的数目,且达成有效的除错。

著录项

  • 公开/公告号CN102576314A

    专利类型发明专利

  • 公开/公告日2012-07-11

    原文格式PDF

  • 申请/专利权人 先进微装置公司;

    申请/专利号CN201080042528.5

  • 申请日2010-07-23

  • 分类号G06F9/46(20060101);G06F9/50(20060101);

  • 代理机构11314 北京戈程知识产权代理有限公司;

  • 代理人程伟;王锦阳

  • 地址 美国加利福尼亚州

  • 入库时间 2023-12-18 06:04:22

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2016-08-03

    授权

    授权

  • 2012-09-12

    实质审查的生效 IPC(主分类):G06F9/46 申请日:20100723

    实质审查的生效

  • 2012-07-11

    公开

    公开

说明书

技术领域

本揭示发明系一般地关于计算机处理器以及资料并行线程。

背景技术

计算机与其它此种数据处理装置系具有至少一个通常称为控制处 理单元(CPU)的控制处理器。此种计算机与处理装置亦可具有其它 用于各种型态的专用处理的处理器,例如图形处理单元(GPU)。举 例而言,GPU系设计成特别适用于图型处理。GPU一般包括理想地适 用于执行在平行资料流上相同的指令的多重处理组件,例如资料平行 处理。一般而言,CPU作为主机或控制处理器而使用,且将例如图形 处理的专用功能交给例如GPU的其它处理器。

由于已有多核心CPU可供使用(其中各个CPU具有多重处理核 心),在CPU中可具有亦可用于专门功能之实质的处理能力。多核心 CPU或GPU的一个或更多计算核心可以是相同芯片(例如AMD  FusionTM)之一部分或是在不同的芯片中(例如具有NVIDIA GPU的 Intel XeonTM)。近来,具有CPU与GPU两者特性之混合核心(例如 CellSPETM、Intel LarrabeeTM)已普遍的提倡于通用GPU(GPGPU) 类型的运算。该GPGPU类型运算提倡使用CPU主要地执行控制编码 并且卸载效能关键性的数据平行编码(performance critical data-parallel  code)至GPU。该GPU系主要地用来作为加速器。该多核心CPU与 GPGPU计算模型之组合包含作为加速目标的CPU核心与GPU核心两 者。在很多方面,许多多核心CPU的核心具有可比得上GPU的效能。 举例而言,许多CPU核心的每秒浮点运算(floating point operations per  second,FLOPS)现在系比得上一些GPU核心的每秒浮点运算。

已开发了用于具有CPU与GPU的异质计算平台的数个框架 (framework)。这些框架包含Stanford University所开发的BrookGPU、 NVIDIA所开发的CUDA,以及被称作Khronos Group的工业集团所开 发的OpenCL。OpenCL框架提供了一类似C的开发环境,使用者可以 使用该环境创造用于GPU的应用程序。举例而言,OpenCL让使用者 能够指定卸载一些计算(例如数据并行计算)至GPU的指令。OpenCL 亦提供了编译器与执行环境(runtime environment),在其中,可以在 异质计算系统内编译与执行编码。

因此,需要使CPU能力能够有效地使用于一般在GPU上处理的 功能的执行的方法和系统。

发明内容

本发明揭露用以在处理器核心上执行处理逻辑的复数资料并行线 程的系统与方法。该用以在处理器核心上执行处理逻辑的复数资料并 行线程的方法包含将该复数资料并行线程群集成一个或更多工作群 组,使来自该一个或更多工作群组的第一个工作群组关联于在该处理 器核心上的操作系统线程,以及将来自该第一工作群组的线程配置成 该操作系统线程内的使用者层级线程。该处理逻辑可包含先前配置成 在GPU上执行的GPU核函数。该处理核心可包含CPU核心,例如多 核心CPU的处理核心。

另一种实施例系用以执行GPU核函数的方法,其包含加载该GPU 核函数至主机处理器,形成一个或更多工作群组(其中,各工作群组 包括复数该资料并行线程),以及使该工作群组关联于耦合至该主机处 理器的一个或更多处理核心的操作系统线程。各该工作群组可关联于 一个或更多操作系统线程,且各个操作系统线程系配置成仅在一个处 理核心上执行。该方法亦可包含将各个该工作群组的资料并行线程配 置成各自关联的操作系统线程内的使用者层级线程的步骤。

另一种实施例系用于在处理核心上执行处理逻辑的复数资料并行 线程的系统。该系统包含:包含该处理核心的至少一个处理器、耦合 至该处理核心的至少一个内存与GPU核函数排程器。该GPU核函数 排程器系被配置成将该复数资料并行线程群集成一个或更多工作群 组,使来自于该一个或更多工作群组的第一工作群组关联于在该处理 核心上的操作系统线程,以及将来自于该第一工作群组的线程执行成 在该操作系统线程内的使用者层级线程。

另一种实施例系计算机程序产品包括纪录有计算机程序逻辑的计 算机可读取媒体以使至少一处理器将复数资料并行线程群集成一个或 更多工作群组,使来自于该一个或更多工作群组的第一工作群组关联 于在至少一个处理核心上的操作系统线程,以及将来自于该第一工作 群组的线程执行成在该操作系统线程内的使用者层级线程。

本发明的进一步实施例、特征及优势,连带本发明的各种实施例 的结构和运作,系在以下参考附加图标作详细地描述。

附图说明

合并至且构成本说明书的一部份的附加图标系例示本发明之实施 例,连同前述发明内容提供的一般叙述以及下列具体实施方式提供的 详细说明,以协助解释本揭示发明的原理,于该图标中:

第1图显示根据本揭示发明的实施例的异质计算系统。

第2图显示根据本揭示发明的实施例的GPU核函数排程器。

第3图系根据本揭示发明的实施例的在异质计算系统上用于执行 编码的程序。

第4图系关于本揭示发明的例示内存布局的描绘。

第5图系关于本揭示发明的在异质计算系统上用于排程工作项的 程序。

第6图系关于本揭示发明的线程排程的例示描绘。

具体实施方式

本发明的实施例可藉由让在CPU或GPU处理器上相同或相似的 编码基底的使用以及促进这些编码基底的除错可行而产生实质上的优 点。虽然本发明于此处系以用于特定应用的例示实施例来描述,应该 了解到本发明并不以此为限。所属领域的技术人员接收本发明之教示 将意识到在本叙述之范围内及本发明会有显著功用的其它领域中的其 它修正、应用和实施例。

本发明的实施例可使用于任何计算机系统、计算装置、娱乐系统、 媒体系统、游戏系统、通讯装置、个人数字助理或任何使用一个或更 多处理器的系统。本发明系特别有益于包括异质计算系统的系统。于 此处使用的术语「异质计算系统(heterogeneous computing system)」系 为有多种处理器可供使用的计算系统。

本发明的实施例能够使相同的编码基底在不同的处理器(例如 CPU和GPU)上被执行。本发明的实施例例如在具有多核心CPU及/ 或GPU的处理系统中可特别有利,因为对于一种类型处理器所开发的 编码可以微量的或无需额外的努力而配置在另一种类型的处理器上。 举例而言,利用本发明的实施例,开发来用于在GPU上执行的编码, 亦被称为GPU核函数,可以被配置成在CPU上执行。

又,本发明能够以有助于除错线程的方式将典型地包括大量资料 并行线程的GPU核函数配置于CPU及其它处理器上。

异质计算系统

依据本发明的一实施例作为范例的异质计算系统100系显示在第 1图中。异质计算系统100可包含一个或更多CPU,例如CPU 101, 以及一个或更多GPU,例如GPU 102。异质计算系统100复可包含至 少一系统内存103、至少一持续内存104、至少一系统总线105、至少 一输入/输出装置106、GPU核函数排程器109以及除错器108。

CPU 101可包含任何商业上可得的控制处理器或客制化的控制处 理器。CPU 101系例如执行用以控制异质计算系统100的操作的控制 逻辑。CPU 101系可为多核心CPU,例如具有二个CPU核心141和142 的多核心CPU。CPU 101除任何控制电路外,可包含CPU高速缓存, 例如CPU核心141和142各自的高速缓存143和144。CPU高速缓存 143和144可分别用于在CPU核心141和142上执行应用程序的期间 暂时性的保存指令及/或参数值。举例而言,CPU高速缓存143可以使 用于在CPU核心141上执行控制逻辑指令的期间暂时性的保存来自系 统内存103的一个或更多控制逻辑指令、变量的值或固定参数的值。 在一些实施例中,CPU 101亦可包含专用的向量指令处理单元。举例 而言,CPU核心142可包含可以有效地处理向量指令的数据流SIMD 延伸指令集(SSE)单元。熟知本领域技术的人士将了解到CPU 101 可包含多于或少于本实施例中所选择的CPU核心,而且亦可具有无高 速缓存或更多复杂的高速缓存阶层。

GPU 102可包含任何商业上可得的图形处理器或客制设计的图形 处理器。GPU 102例如可执行用于所选择的功能的专用编码。通常, GPU 102可使用于执行图形功能,例如绘图管线计算,比如几何计算 以及在显示器上影像的成像。

GPU 102可包含GPU全域高速缓存110和一个或更多计算单元 112和113。图形内存107可包含在GPU 102内或耦合至GPU 102。各 计算单元112和113系分别关联于GPU区域内存114和115。各计算 单元包含一个或更多GPU处理组件(processing elements,PE)。举例而 言,计算单元112包含GPU处理组件121和122,而计算单元113包 含GPU处理组件123和124。各处理组件121、122、123和124系分 别关联于至少一个私有内存(private memory,PM)131、132、133和 134。各GPU处理组件可包含一个或更多纯量与向量浮点单元。GPU 处理组件亦可包含特殊用途单元譬如逆平方根单元及正弦/余弦单元。 GPU全域高速缓存110可耦合至例如系统内存103的系统内存及/或例 如图形内存107的图形内存。

系统内存103可包含至少一个非持久性内存,例如动态随机存取 内存(DRAM)。系统内存103可在部份应用程序或其它处理逻辑的执 行期间,保存处理逻辑指令、常数值与变量值。举例而言,在一实施 例中,GPU核函数排程器109控制逻辑及/或其它处理逻辑在藉由CPU 101执行GPU核函数排程器109的期间可处于系统内存103内。在此 处使用之术语「处理逻辑」系指控制流指令、用以执行计算的指令以 及关于资源相关的存取的指令。

持续内存104包含一个或更多能储存数字资料的储存装置,例如 磁盘、光盘或闪存。持续内存104可例如至少储存GPU核函数排程器 109和除错器108的指令逻辑的一部分。举例而言,在异质计算系统 100激活时,操作系统和其它应用软件可从持续内存104加载至系统内 存103。

系统总线105可包含外围组件互连(Peripheral Component  Interconnect,PCI)总线、高级微控制器总线架构(Advanced  Microcontroller Bus Architecture,AMBA)总线、工业标准架构(Industry  Standard Architecture,ISA)总线或此类装置。系统总线105亦可包含网 络,例如局域网络(Local area network,LAN)。系统总线105包含耦合 包括异质计算系统100的组件在内的组件的功能性。

输入/输出接口106包含一个或更多接口以连接使用者的输入/输出 装置,例如键盘、鼠标、显示器及/或触控屏幕。举例而言,可透过连 接至使用者接口106的键盘和鼠标提供使用者的输入至异质计算系统 100。异质计算系统100的输出,例如GPU核函数排程器109和除错 器108的输出,可透过使用者接口106输出至显示器。

图形内存107系耦合至系统总线105和GPU 102。图形内存107 系通常使用于保存传输自系统内存103的数据以供GPU快速存取。举 例而言,在GPU 102和图形内存107之间的接口可以数倍地快于系统 总线接口105。

除错器108包含对应用编码和在异质计算系统100执行的其它处 理逻辑除错的功能。举例而言,除错器108可包含在应用编码及/或其 它处理逻辑的执行期间监测一个或更多变量的功能。在异质计算环境 中,除错器108可能需要有监测在CPU以及GPU上执行的应用编码 及其它处理逻辑的能力。

GPU核函数排程器109包含将特别写成在GPU上执行的功能或处 理逻辑排程在GPU上或在CPU上的功能。在下文关联于第2图时将 进一步地描述GPU核函数排程器。熟知本领域技术的人士将了解到除 错器108和GPU核函数排程器109可以用软件、韧体、硬件或上述三 者的任何组合加以实现。当以软件实现时,例如,GPU核函数排程器 109系可为以C或OpenCL写成的计算机程序,该计算机程序被编译与 执行时系处于系统内存103中。在原始码形式及/或经编译后可执行的 形式下,GPU核函数排程器109可被储存于持续内存104。在一实施 例中,一些或全部的GPU核函数排程器109及/或除错器108的功能系 特定为硬件描述语言,例如Verilog、RTL、netlists,以便最终能够透过 光罩著作/光罩的产生配置成制造程序,以产生具体化在此处所描述的 本发明的实施态样的硬件装置。

熟知本领域技术的人士将了解到异质计算系统100可包含比在第 1图中显示者更多或更少的组件。举例而言,异质计算系统100可包含 一个或更多网络接口及/或例如OpenCL框架的软件应用程序。

GPU核函数

在此处所使用的术语「GPU核函数」包括在GPU上执行一个或更 多功能或操作的编码及/或处理逻辑。举例而言,GPU核函数系针对矩 阵乘法、矩阵转置、重分(subdivision)、方程式求解及许多其它操作 而发展。在GPGPU模型中,举例而言,GPU核函数系为可藉由卸载 以在GPU上执行的功能及/或其它操作的编码片段。在典型的GPGPU 应用中,相同的GPU核函数编码将在多个平行数据流上同时执行。这 就是所谓的「资料平行」计算。举例而言,在相乘二个矩阵时,来自 该二个来源矩阵的相对应元素的多个配对(pair)可以利用不同的处理 核心同时相乘。虽然是简单的范例,矩阵乘法可例示在GPU上的资料 平行运算。

承上述的矩阵乘法的范例,对于结果矩阵的各元素的计算可视为 执行(线程)的独立的线程。对应于结果矩阵的各元素的线程可平行 执行。在GPU 102中,举例而言,线程可能在各处理组件121、122、 123和124上同时执行。

若欲相乘矩阵的多个配对,例如在图形应用中常见者,则可指派 矩阵的各个配对至计算组件,例如计算组件112与113。

可关联于GPU 102而描述GPU核函数的执行。GPU核函数一般 执行为平行的多个线程。各并行线程系为「工作项」。各工作项可在处 理组件(例如处理组件121、122、123和124)上执行。分配至计算单 元的工作项系所谓的「工作群组」。

一般而言,工作项间的同步化系限于单一工作群组内的工作项。 该限制系通常在具有大量线程的环境中执行,以便可有效地管理线程 的数量。然而,在一些实施例中,同步化可能不限于单一工作群组内 的工作项。

GPU核函数排程器

第2图例示了依据本发明的一实施例的GPU核函数排程器109的 组件。GPU核函数排程器109可包括编码分析器201、CPU内存映射 器203、工作群组排程器205以及线程排程器207。熟知本领域技术的 人员将意识到GPU核函数排程器109可包括额外的组件及/或组件201 至207的不同组合。

编码分析器201包含分析编码(例如OpenCL编码)的功能。编 码分析器201可识别编码片段及/或被分析的编码中的GPU核函数,其 可有利地被排程在CPU上或替代性的在GPU上。编码分析器201亦 可包含得知目标平台的详细说明的功能。举例而言,编码分析器201 可识别CPU核心的数量及在目标平台上可得的GPU核心。其亦可能 识别系统内存、高速缓存、全域GPU高速缓存等等的数量。

CPU内存映射器203包含判定可对其发送编码以执行的CPU的内 存可用性,以及准备用以执行映射的GPU核函数的CPU内存。

工作群组排程器205包含排成工作群组的功能。举例而言,工作 群组排程器205可判定可使用于执行各工作群组的GPU的计算单元的 适当集合(set)。在另一实施例中,工作群组排程器亦可判定GPU核 函数的工作项线程应该如何群集成工作群组,以便工作群组可指派至 在一个或更多CPU核心上的线程。工作群组排程器复可包含将GPU 核函数线程的工作群组映射至CPU或GPU核心的功能。

线程排程器207包含排程GPU核函数的线程至GPU或CPU的功 能。举例而言,线程排程器207依可符合线程的处理要求的方法可判 定对于处理单元121、122、123或124的线程的分配。在一实施例中, 线程排程器207判定可在GPU 102中的哪个处理组件上对各工作项进 行排程。在另一实施例中,线程排程器207对在CPU 101上的工作项 线程进行排程。举例而言,线程排程器207可将一个工作群组的工作 项线程排程在单一CPU核心上,例如CPU核心142。下文将关联于第 3至6图进一步描述依据本发明的实施例的模块201至207的功能性。

在CPU核心上映射并执行GPU核函数

第3图显示了依据本发明的实施例的用于在异质计算系统上执行 编码的程序300。程序300例如可在异质计算系统100上执行。在一实 施例中,程序300可代表GPU核函数排程器109的处理逻辑的流程。

在未丧失一般性的前提下,以下的叙述系主要基于OpenCL框架。 熟知本领域技术的人员将意识到本发明的实施例亦可使用其它发展及 执行框架加以实现,例如,但不限于CUDA框架、BrookGPU框架等 等。如先前所述,OpenCL提供了开发环境、编译器以及执行环境,在 其中,可以在异质计算系统内开发、编译与执行编码。

OpenCL亦提供了可被使用者应用程序所呼叫的内嵌的链接库函 数以及应用程序撰写接口(application programming interface,API)以 执行各种功能,例如配置GPU核函数在所选择的处理器上执行。一般 而言,OpenCL框架主要地在主机系统上执行并且藉由配置命令(例如, 包含GPU核函数的可执行编码)至各处理器以控制所耦合的处理器的 作业。举例而言,OpenCL可能主要地在CPU核心141上执行,并且 藉由配置命令给对应的装置执行以控制GPU 102与GPU核心141和 142的作业。

在步骤301中,加载用于一个或更多应用程序的编码。所加载的 编码可能是原始码或其它预先编译编码的形式,例如字节码。在一些 实施例中,编码亦可包含嵌入式编译函数。举例而言,可基于在应用 程序中的嵌入式函数的呼叫而从链接库中动态地连结一些函数。为了 叙述的目的,将假设所加载的编码系为例如OpenCL的程序语言的原 始码形式。此原始码最初可位于例如持续储存装置104。在步骤301 中加载编码时,此原始码可被加载进内存,例如,系统内存103。应该 注意到,所加载的编码可包含原始码、预先编译的编码及/或编译的二 进制的组合。举例而言,在其内可能实施程序300的OpenCL开发、 编译以及执行框架允许GPU核函数的原始码及/或编译的二进制的加 载。OpenCL程序例如可包含GPU核函数、控制流编码以及其它由GPU 核函数所呼叫的函数。

在步骤303中,系分析所加载的编码。此编码的分析可包含解析 编码。在一些实施例中,在步骤303中所分析的编码可包含有效的 OpenCL编码或在其它程序语言或框架中的编码,例如C。在分析步骤 303中,可判定所需求的CPU资源。举例而言,分析及/或解析可判定 需要于一个或更多CPU核心上进行排程的线程(工作项)的总数。又, 分析步骤303可使用于判定内存的需求,例如GPU核函数所使用的私 有内存和区域内存的实际数量。在一实施例中,步骤301和303可使 用编码分析器201的处理逻辑而加以实现。

在步骤305中,异质计算系统系配置成运行在步骤301中所加载 的编码。举例而言,基于步骤303中所完成的编码分析,可分配一部 分的CPU与GPU以运行所加载的编码。步骤305亦可包含配置内存 资源,例如内存103,以准备用于所加载的编码的执行。

对所加载的编码中的各函数及/或GPU核函数重复步骤307至 323。举例而言,可用由上至下的方式扫描所加载的编码以辨识各函数 及/或GPU核函数。在步骤307中,辨识一函数/或GPU核函数。在一 实施例中,举例而言,可藉由例如在OpenCL中的kernel识别器的预 定识别器辨识GPU核函数。

在步骤309中,判定在步骤307中所识别的编码片段系执行在CPU 或GPU上。举例而言,预设行为可能是在CPU上执行除了GPU核函 数以外的所有函数并且在GPU上执行所有GPU核函数。另一种考量 系可例如基于内嵌在编码内的识别器判定命令或函数是否为资料平 行。料平行命令或函数较宜排程至GPU。亦可使用其它标准,例如加 载平衡需求和应用程序特征。

(在步骤309中)若处理逻辑及/或编码片段系被判定在GPU上执 行,该处理逻辑及/或编码片段系排程于步骤311中实施在GPU上。在 一些实施例中,处理逻辑及/或编码片段系被排程为在特定的GPU上实 施。

在步骤311中,处理逻辑及/或编码片段系被排程在选定的GPU上。 步骤311可能包含判定GPU的结构,例如在GPU中计算装置的数量, 以及在各计算装置内处理组件的数量。步骤311亦可包含创造用于该 GPU的内容和命令队列(queue)、创造关联于该内容的内存对象、编 译和创造GPU核函数对象、发送相对应的命令至命令队列以执行该 GPU核函数对象以及执行所发送的命令的任何同步化。

判定GPU的结构可包括,举例而言,使用OpenCL API呼叫以寻 求在系统中可供使用的计算装置(例如CPU、GPU),之后寻找一个或 更多所识别的计算装置的区域信息。从计算装置的列表,可询问GPU 装置以判定GPU处理组件的数量、范围限制、工作群组大小、不同内 存空间的大小、最大内存对象的大小等等。

在排程处理逻辑及/或编码片段以在选定的GPU上执行时,可将包 括含有编码片段(例如可执行的核函数对象)的可执行编码的命令排 程至创造在所选定的GPU内容中的命令队列。在此所使用的「内容」, 系定义为用于核函数的执行环境。内容可包含对于装置、内存以及与 核函数相关联的其它程序对象的处理与其它信息。举例而言,内容可 提供执行核函数以及允许其使用的GPU装置和内存位置。

所创造的内存对象可对应于来源与目标对象。举例而言,若处理 逻辑及/或编码片段系实施迭代数组加法,则来源对象系可为二个来源 数组。目标对象可为输出结果系写入在其中的数组。可在系统内存103 或图形内存107中创造内存对象。内存对象可能随后在例如快取110、 143和144的各种快取中被快取。所创造的各内存系关联于相对应的内 容。

可执行的核函数对象的创造系藉由编译处理逻辑及/或编码片段而 完成,且连接任何需要的装置特定模块。举例而言,编译后的核函数 对象可包含核函数函数编码或指令、提供给核函数的任何自变量 (argument)、相关联的内容以及关于在GPU上执行的链接库编码。

在创造核函数对象之后,系将用于执行核函数的命令排列于命令 队列。排列命令的方式可能依该命令系为资料平行或任务平行命令而 特定。举例而言,在迭代数组加法的范例中,数据平行命令可排列成 具有多个指令的单一命令以平行地执行在特定数目的计算装置中,反 之,任务平行命令可导致一些分离的命令被排入队列中,一个命令用 于各个数组元素。

在步骤309中,若判定处理逻辑及/或编码片段应该在CPU上执行, 则程序300继续进行至步骤313。在步骤313中,可选择一个或更多 CPU以执行编码片段。在一些实施例中,例如在多核心CPU系统中, CPU的选择可基于CPU的负载或处理能力。亦可考虑其它考量,例如 可用高速缓存等等的可利用性与大小。

为了描述的方便,步骤311至321的描述假设在CPU上所执行的 处理逻辑及/或编码片段系为GPU核函数。映射该GPU核函数至所选 定的CPU可包含将细分的GPU线程(例如工作项)映射至CPU核心 并且将GPU内存阶层映射至CPU内存系统。在步骤315中,GPU核 函数线程系映射至所选定的CPU。若GPU核函数原本就系映射至 CPU,各GPU工作项将映射至操作系统(operating system,OS)线程。 步骤315的处理系可为由工作群组排程器205所提供的部份功能。

CPU的硬件内容具有更多的限制,而且通常只具有一个硬件内容。 OS通常负责排程与执行OS线程。工作项若原始地映射于OS线程可 导致若不是数千就是数百的线程。在单一个内容中执行大量的线程可 导致实质上的低效率,理由包含当执行各程序时需要大量的内容转换。 又,使此OS管理大量的线程系可为非常没效率。本发明的实施例中, 系以可达到高效能的方式完成从GPU至CPU的映射且亦便于对具有 大量线程应用程序进行除错。

在本发明的实施例中,映射GPU核函数至CPU核心系以下述方 法完成:利用可供使用的多核心CPU,以及具有可管理的OS线程数 量以避免关于内容转换等等的无效率。因此,在本发明的实施例中, 工作群组系代替工作项而为映射及/或关联于OS线程的单元。一个或 更多工作项群集成工作群组。在工作群组中的工作项数量系可为预定 的或可基于例如可用的处理核心的数量与能力的标准来决定。映射及/ 或将工作群组关联于OS线程可包含对工作群组产生新的OS线程或附 加工作群组至已经存在的OS线程的配置。用于产生新的OS线程或附 加至存在的线程的API函数系由一个或更多OpenCL框架(包含 OpenCL执行系统)及位于其下的操作系统所提供。

可例如藉由设定对关联于OS线程的处理器亲合性,而将GPU核 函数的各工作群组可映射至CPU。可指派一个或更多工作群组给各 CPU核心。可平行地执行每一CPU核心的多工作群组。在一实施例中, 各CPU核心系配置成一次仅执行单一工作群组。举例而言,在各CPU 核心中仅创造单一OS线程。各CPU核心可藉由执行一个工作群组至 完成,再执行另一个的方式来执行多工作群组。

在步骤317中,映射及/或配置在工作群组内的线程。步骤317的 程序系可为由线程排程器207所提供的部份功能。在映射至工作群组 的各OS线程内,工作项线程系配置成一个接一个地依序执行。工作项 线程系实施为使用者层级的线程。将工作项线程系实施为使用者层级 的线程避免了在使用者空间和核函数空间之间的过度转换,以及大量 内容转换的相关消耗。注意在大部分的例子中,GPU核函数系应用于 使用者空间的应用程序且不需要对需求核函数空间存取的系统资源进 行直接存取。如同熟知本领域技术的人员所知,多使用者层级的线程 可在单一操作系统层级的线程内实施。

在本发明的一些实施例中,可在工作群组内成群地执行工作项线 程。举例而言,在可同时容纳多于一个浮点或双运算的例如SSE单元 (譬如在系统100中的SSE单元145)的向量单元系可用的环境中, 编译器可结合数个工作项以平行执行以便利用到SSE单元的全部处理 能力。

在步骤319中,系映射可被CPU核心存取的内存以容纳可用于 GPU的内存阶层。步骤203的程序系可为CPU内存映射器203所提供 的部份功能。将GPU内存阶层映射至CPU核心以便GPU核函数可在 CPU核心上执行可包含数个样态。因为GPU核函数编码可包含对GPU 内存阶层内位置的参照,故从GPU内存阶层至CPU内存的映射系有 需求。CPU核心典型地仅具有用于其内存(例如,系统内存103)的 单一地址空间,而GPU核心则可具有数个分离的可定地址的内存。GPU 全域内存、计算装置区域内存以及处理组件私有内存可全部映射至 CPU内存。

GPU全域内存,例如GPU内存107,可直接映射至系统内存,例 如内存103。GPU区域内存和私有内存的映射需要更多细微的方法。 如相关于内存所使用的映射可包含设定设定自动地址翻译机制,藉由 该机制,包含在于CPU核心上执行的GPU核函数内的内存地址系被 重新指向系统内存103,取代关联于GPU的内存阶层中的位置。

GPU区域内存,例如GPU区域内存114和115,系于计算单元的 处理组件之间被分享。因此,一个GPU区域内存系于工作群组的所有 工作项间被分享。当工作群组映射至CPU时,因为工作群组系映射至 单一的CPU核心,可将相对应的GPU区域内存带入该CPU核心。在 许多例子中,在GPU中的区域内存的实际使用系可完全符合在CPU 核心的高速缓存。

GPU区域内存,例如GPU区域内存114和115,系被工作群组中 的工作项所分享。本发明中的实施例可能限制各CPU核心一次只执行 单一工作群组。在任何例子中,当CPU一次只执行单一工作群组时, 只有单一个对应于GPU区域内存的分配系被CPU核心所利用。据此, 可分配每CPU核心的单一区域内存,且所分配的区域内存可重复使用 于在此CPU核心上执行的连续工作群组。可在系统内存的邻近内存区 中对于各计算装置分配区域内存。较佳地,在CPU核心中的高速缓存 系可为足够的大小以容纳对应该CPU核心的在系统内存中的区域内存 的分配的例子。熟知本领预技术的人员将了解到分配在内存及/或快取 中的区域内存区可需要在被重复使用于各连续的工作群组前被刷新。 在一些实施例中,可藉由覆写掉先前的内容以重复使用分配在内存及/ 或快取中的区域内存区。

GPU私有内存,例如GPU私有内存131、132、133和134,系私 有于各处理组件。在GPU环境中的各私有内存系一次被单一工作项所 使用。因此,类似区域内存,私有内存可被分配在系统内存中并重复 使用于连续的工作项。举例而言,在系统内存103中对私有内存的单 一分配可被单一工作群组的连续地执行的工作项重复使用,并且在被 相同的CPU核心所执行的连续的工作群组内被重复使用。GPU私有内 存,与因此对应至该GPU私有内存的系统内存103中的分配,系典型 的使用于保存堆栈变量,该堆栈变量系位于核函数的内部且系属于各 工作项的区域。

常数内存包含具有编码执行过程中始终为常数的值的资料。对于 在GPU上执行的GPU核函数而言,常数内存系可在图形内存107及/ 或GPU全域高速缓存110中。常数内存通常来说系为只读且不依附于 工作群组。于本发明的实施例中,常数内存系映射至可被所有CPU核 心存取的系统内存的区,因为在任何CPU核心上执行的任何工作群组 或工作项可能需要存取至常数内存。又,较佳地,来自主存储器的常 数内存分配系复制在各CPU核心的高速缓存中。将GPU内存层级映 射至CPU的范例布局系显示在第4图。

在步骤321中,可将GPU核函数排程以执行于一个或更多选定的 CPU核心上,例如,核心141及/或142。排程GPU核函数以供执行可 包含配置执行环境,例如OpenCL运行系统,以实施将工作群组与工 作项映射在选定的CPU核心上。

在本发明的一实施例中,其中系使用OpenCL框架以编译与执行 在异质计算计统100上的编码,步骤321可包含排列一个或更多命令 至命令队列。举例而言,在异质计算计统100中使用OpenCL框架, 可将GPU核函数排程以在一个或更多核心141和多核心CPU 101上执 行。典型地,于使用OpenCL框架以在异质计算计统100上运行应用 程序时,控制部分系在主机上运行,该控制部分使所选择的编码在系 统100的装置上(例如GPU 102或核心141和142)开始执行。CPU 核心,例如核心141和142的其中之一,可作为主机并且分配GPU核 函数至系统100上的装置以执行之。举例而言,用于映射CPU内存的 命令以及用于执行GPU核函数的命令可被排程命令队列中,其中该命 令队列系针对多核心CPU 101所建立的内容中而创设者。OpenCL运 行环境系执行被写至在系统101中特定装置中的命令队列的各命令。

在排程用以在多核心CPU 101上执行的GPU核函数时,步骤313 至325中所判定用以执行映射和配置的指令可插入至编码以在多核心 CPU 101上执行。举例而言,在工作群组内的工作项可能需要同步点 以被自动地或由程序开发人员手动的插入。

在多核心CPU 101系统上实施工作群组内的工作项同步化时,本 发明的实施例可使工作项执行至同步点。举例而言,各工作项以连续 的方式逐个执行至同步点(例如,barrier()函数)且在下一个工作项被 执行前暂停在同步点。当具有同步点的工作群组中的全部工作项以到 达此处,各工作项从该同步点连续地执行致工作项的终点。可插入例 如用以储存工作项状态setjmp()及用以恢复该工作项的状态的longjmp() 的函数至编码中。在本发明的实施例中,不会插入此类附加的编码至 GPU核函数的原始码中。反而,此类附加的编码系插入在GPU核函数 的入口、出口及/或屏障例程(routine)中(且不会在GPU核函数编码 内)。藉由不改变GPU核函数本身的原始码,本发明的实施例减轻了 除错的费力。

在步骤323中,系决定是否有附加的编码要被执行,若是,程序 300返回至步骤307。若没有更多编码要被执行,程序300终止在步骤 325。

内存映射至CPU的范例

第4图例示了在在一CPU核心的系统内存与高速缓存中的内存布 局的范例。401系例如描绘了在系统内存103中的对应于GPU核函数 的内存分配的布局,其中该GPU核函数原本写成为在例如GPU 102 的GPU上执行。402系描绘在单一CPU核心的快取(例如在CPU 101 的快取109中)中对应的内存布局。

举例而言,区域内存411和421系可分别对应于GPU 102中的区 域内存114和115。私有内存412、413、422和423系可分别对应于 GPU 102的私有内存131、132、133和134。常数内存(亦即,储存固 定参数的内存区)。如402所示,CPU核心的快取可具有区域内存区块、 对应用于工作群组中的各工作项的一个区块的一系列的私有内存,及 常数内存区。在一些实施例中,具有藉由CPU核心处理所需要的区域 内存、私有内存及常数内存全部在CPU核心的快取中为可得的时,系 可为特别的有优势,由此可减低关于存取系统内存103的延迟。

如401所示,系统内存的邻近区域可分配至各区域内存411和421, 由此其可分别仿真GPU 102的区域内存114和115。由GPU核函数编 码所存取的区域内存地址可被翻译至此分配的区域内的偏移。分配在 系统内存中的区域内存的总大小系可为M乘上(每一工作群组的区域 内存大小),其中M系为CPU核心的数量。私有内存的总大小系可为 M乘上N乘上(每一工作项的私有内存大小),其中M系为核心的数 量且N系为每一工作群组的工作项的数量。

为了额外的除错能力,本发明的一些实施例可包含在系统内存中 分离的内存分配之间的防护页。举例而言,可插入防护页441、442、 443、444、445和446在用于不同的OS线程的分配间,以及用于相同 线程的不同内存分配之间。在范例实施中,可设定缓存器于每次一指 令试图存取内存的防护页区。内存存取错误的快速侦测在以实质上平 行的方式执行大量的并行线程的应用程序系可为特别的有效用。

在CPU上排程工作项的范例

第5图依据本发明的实施例,显示了实施步骤317的处理步骤501 至523。在步骤501中,排程工作群组线程。如先前所述,本发明的实 施例在各CPU核心上创设单一操作系统线程,在其内系排程多个使用 者层级线程。举例而言,若要排程二十个GPU核函数的实例1...20, GPU核函数线程1...10(作为工作项1...10)可被排程于核心141,而 GPU核函数线程11...20(作为工作项11...20)可被排程于核心142。 工作项1...10及工作项11...20可分别被收集至工作群组1和工作群组 2。如先前所提及,各工作群组系实施为OS线程,且因此可在各核心 141和142上创造一个OS线程,以分别实施工作群组1和2。

在步骤503中,判定GPU核函数是否需要与其它平行执行的GPU 核函数同步化。举例而言,OpenCL编码可包含一个或呼叫barrier()函 数。若存在此呼叫同步,则判定GPU核函数需要同步化;否则,GPU 核函数可能不需要同步化。

若判定GPU核函数不需要同步化,则GPU核函数依据所需求的 实例数目系排程为以由始至终的方式执行。举例而言,在步骤501中 所创造的各OS线程内,系排程预定数量的GPU核函数或工作项以执 行为使用者层级的线程。因为,工作项之间无需同步化,各工作项系 排程为以由始至终的方式执行。当工作项使用者线程的执行完成时, 在步骤505中,可例如藉由使用回呼(callback)函数通知OpenCL执 行框架。当在步骤507中通知工作项已完成执行时,在工作群组中的 下一个工作项可排程为在步骤509中执行成使用者层级线程。OpenCL 执行框架亦可周期性地查询一个或更多状态参数以判定工作项是否已 完成执行。当无余留更多要被排程的工作项在工作群组内时,该工作 群组完成执行。

应该注意到,在一些实施例中,可在各CPU核心上排程超过一个 工作群组以逐项连续地执行。若在步骤109中判定执行中的工作群组 的所有工作项已经完成执行,则,在步骤511中判定在目前的核心中 是否有其它工作群组要执行。若在目前的CPU核心上有更多要排程的 工作群组时,则排程下一个工作群组以执行。排程另一工作群组可包 含重新初始化用于目前CPU核心上正在执行的OS线程的内存分配。 请注意,本发明的实施例中,当创造OS线程时,内存的分配可一次完 成,且通常不需要对指派至此OS线程的各工作群组进行重新分配。

若在步骤503中判定需要同步化,依据所需要的实例数目,排程 GPU核函数从起始执行至下一个同步点(例如,barrier()呼叫)。举例 而言,在步骤513中,工作项的使用者层级线程系排程为从开始执行 至下一个barrier()的呼叫发生。当遭遇到barrier()的呼叫时,可储存执 行线程的状态。在一实施例中,可使用例如setjmp()的函数呼叫以储存 使用者层级线程的状态。所储存的该线程的状态可包含缓存器的内容, 例如,堆栈指针、框指针及程序计数器。各工作项使用者层级线程的 状态可储存于例如系统内存103的系统内存的一区中,或在例如持续 内存104的持续内存中。

在步骤515中,当执行工作项到达同步点,则在步骤517中判定 是否有更多在现行工作群组内要被排程的工作项。当在步骤515中工 作项使用者层级线程的执行到达同步点时,可例如使用回呼函数通知 OpenCL执行框架。当在步骤515中通知工作项已到达同步点时,在步 骤517中,可排程工作群组中的下一个工作项以执行成使用者层级线 程。OpenCL执行框架亦可周期性地查询一个或更多状态参数以判定工 作项是否已到达同步点。当无余留更多要被排程的工作项在工作群组 内时,该工作群组已完成将工作项执行至同步点。

若在步骤519中系判定工作项在到达线程执行的终点前具有更多 同步点,则对各工作项重复步骤513至525以从现行同步点执行至下 一个同步点。

若在步骤519中系判定工作群组中的工作项不具有更多同步点, 则在步骤521中,系排程一个或已到达同步点的工作项以由此点执行 到结束。排程工作项线程以从同步点执行到结束可包含恢复线程的状 态。在一实施例中,可使用例如longjmp()的函数呼叫以恢复先前以 setjmp()所储存的线程的状态。应该注意到的是,setjmp()与longjmp() 系分别为习知上被识别为储存及恢复程序或线程的函数名称。

在步骤523中,系判定执行工作项线程是否已完成执行。如关于 步骤507所述,可基于回呼函数或周期性的查询判定工作项线程是否 已完成执行。若判定工作项已完成执行,则在步骤523中,判定是否 有要被从最后遭遇的同步点执行到结束的更多工作项线程。若是,则 排程下一个工作项且对各要被执行的工作项重复步骤521至525。

当工作群组的所有工作项线程已完成执行时,则在步骤527中, 判定是否在目前所选择的CPU核心上有要被排程的其它工作群组。若 其它工作群组要被排程,则对各该其它工作群组重复步骤513至527。

第6图图式地描绘了工作项线程执行。在601中,逐项执行工作 项线程Wi0...Win-1直到工作群组的所有工作项已被由始至终地执行。 601系描绘了其中无需同步化的范例。在602中,逐项执行工作项线程 Wi0...Win-1直到工作群组的所有工作项已被从开始执行到第一同步 点,在此处以呼叫barrier()加以标示。在工作组的所有工作项已从开始 执行到barrier()后,则工作项中的这者系被逐一地从同步点执行到结 束。

结论

发明说明即摘要段落可阐明如发明人所考量的一个或更多但并非 所有的本发明的范例实施例,且因此,不欲于限制本发明以及以任何 方式附加的权利要求。

本发明已以描绘特定功能及其关联的实施例的功能性建构区块的 帮助而在以上作说明。为了叙述的方便,在此处,这些功能性建构区 块的边界系被任意地定义。只要特定功能及其关联系适当地实施即可 定义替代的边界。

前述的特定实施例的描述将充分地揭露本发明的一般性质,其它 人可藉由应用在相同技术领域中的知识而无需过度实验即可轻易地修 改及/或适用于此种特定实施例的各种应用,而不背离本发明的一般概 念。因此,基于在此处的教示与引导,此种适用及修改系倾向于落在 揭露的实施例的等效含义及范围内。应该了解到,在此处的用语或术 语,系用于叙述的目的,并非用来加以限制,使得熟知本技术领域人 员系参考教示及引导以理解本发明书的术语或用语。

本发明的广度及范畴不应被任何上述的范例实施例所加以限制, 系应只被以下权利要求及其等效所加以定义。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号