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

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

Info

Publication number
CN102576314A
CN102576314A CN2010800425285A CN201080042528A CN102576314A CN 102576314 A CN102576314 A CN 102576314A CN 2010800425285 A CN2010800425285 A CN 2010800425285A CN 201080042528 A CN201080042528 A CN 201080042528A CN 102576314 A CN102576314 A CN 102576314A
Authority
CN
China
Prior art keywords
thread
gpu
work group
carry out
group
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2010800425285A
Other languages
English (en)
Other versions
CN102576314B (zh
Inventor
L·莫里切特
B·加斯特
J·伽马拉杜
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Advanced Micro Devices Inc
Original Assignee
Advanced Micro Devices Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of CN102576314A publication Critical patent/CN102576314A/zh
Application granted granted Critical
Publication of CN102576314B publication Critical patent/CN102576314B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5044Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering hardware capabilities

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Advance Control (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Multi Processors (AREA)
  • Debugging And Monitoring (AREA)

Abstract

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

Description

具有横跨多个处理器的数据并行线程之映射处理逻辑
技术领域
本揭示发明系一般地关于计算机处理器以及资料并行线程。
背景技术
计算机与其它此种数据处理装置系具有至少一个通常称为控制处理单元(CPU)的控制处理器。此种计算机与处理装置亦可具有其它用于各种型态的专用处理的处理器,例如图形处理单元(GPU)。举例而言,GPU系设计成特别适用于图型处理。GPU一般包括理想地适用于执行在平行资料流上相同的指令的多重处理组件,例如资料平行处理。一般而言,CPU作为主机或控制处理器而使用,且将例如图形处理的专用功能交给例如GPU的其它处理器。
由于已有多核心CPU可供使用(其中各个CPU具有多重处理核心),在CPU中可具有亦可用于专门功能之实质的处理能力。多核心CPU或GPU的一个或更多计算核心可以是相同芯片(例如AMDFusionTM)之一部分或是在不同的芯片中(例如具有NVIDIA GPU的Intel XeonTM)。近来,具有CPU与GPU两者特性之混合核心(例如CellSPETM、Intel LarrabeeTM)已普遍的提倡于通用GPU(GPGPU)类型的运算。该GPGPU类型运算提倡使用CPU主要地执行控制编码并且卸载效能关键性的数据平行编码(performance critical data-parallelcode)至GPU。该GPU系主要地用来作为加速器。该多核心CPU与GPGPU计算模型之组合包含作为加速目标的CPU核心与GPU核心两者。在很多方面,许多多核心CPU的核心具有可比得上GPU的效能。举例而言,许多CPU核心的每秒浮点运算(floating point operations persecond,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控制逻辑及/或其它处理逻辑在藉由CPU101执行GPU核函数排程器109的期间可处于系统内存103内。在此处使用之术语「处理逻辑」系指控制流指令、用以执行计算的指令以及关于资源相关的存取的指令。
持续内存104包含一个或更多能储存数字资料的储存装置,例如磁盘、光盘或闪存。持续内存104可例如至少储存GPU核函数排程器109和除错器108的指令逻辑的一部分。举例而言,在异质计算系统100激活时,操作系统和其它应用软件可从持续内存104加载至系统内存103。
系统总线105可包含外围组件互连(Peripheral ComponentInterconnect,PCI)总线、高级微控制器总线架构(AdvancedMicrocontroller Bus Architecture,AMBA)总线、工业标准架构(IndustryStandard 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()后,则工作项中的这者系被逐一地从同步点执行到结束。
结论
发明说明即摘要段落可阐明如发明人所考量的一个或更多但并非所有的本发明的范例实施例,且因此,不欲于限制本发明以及以任何方式附加的权利要求。
本发明已以描绘特定功能及其关联的实施例的功能性建构区块的帮助而在以上作说明。为了叙述的方便,在此处,这些功能性建构区块的边界系被任意地定义。只要特定功能及其关联系适当地实施即可定义替代的边界。
前述的特定实施例的描述将充分地揭露本发明的一般性质,其它人可藉由应用在相同技术领域中的知识而无需过度实验即可轻易地修改及/或适用于此种特定实施例的各种应用,而不背离本发明的一般概念。因此,基于在此处的教示与引导,此种适用及修改系倾向于落在揭露的实施例的等效含义及范围内。应该了解到,在此处的用语或术语,系用于叙述的目的,并非用来加以限制,使得熟知本技术领域人员系参考教示及引导以理解本发明书的术语或用语。
本发明的广度及范畴不应被任何上述的范例实施例所加以限制,系应只被以下权利要求及其等效所加以定义。

Claims (20)

1.一种用以在处理器核心上执行处理逻辑的复数资料并行线程的方法,该方法包括:
(a)将该复数资料并行线程群集成一个或更多工作群组;
(b)使来自该一个或更多工作群组的第一个工作群组关联于配置在该处理器核心上执行的操作系统线程;以及
(c)将来自该第一工作群组的线程配置成该操作系统线程内的使用者层级线程。
2.如权利要求1所述的方法,其中步骤(c)包括:
将来自该第一工作群组的线程群集成一个或更多线程的一个或更多子集合;
将来自该一个或更多子集合的第一子集合配置成用以执行;以及
将来自该一个或更多子集合的第二子集合配置成在该第一子集合完成执行后执行。
3.如权利要求1所述的方法,其中步骤(a)包括:
判定多个可用以在处理器上执行该处理逻辑的处理核心,其中该处理器包含该处理核心;以及
形成一个或更多处理核心的多个工作群组,其中该工作群组的数目系基于该处理核心的数目。
4.如权利要求1所述的方法,进一步包括:
使来自该一个或更多工作群组的第二工作群组关联于在第二处理核心上的第二操作系统;以及
将来自该第二工作群组的线程配置成该第二操作系统线程内的使用者层级线程,
其中,该第一与第二工作群组系被配置成实质上同时地执行。
5.如权利要求1所述的方法,其中步骤(c)包括:
对来自该第一工作群组的线程定义同步点;
将来自该第一工作群组的各个该线程配置成只执行到该同步点;以及
将来自该第一工作群组的各个该线程配置成在所有该线程到达该同步点之后,自该同步点重新开始执行。
6.如权利要求5所述的方法,其中步骤(c)复包括:
在到达该同步点时,储存来自该第一工作群组的各个该线程的状态;以及
在上述重新开始执行之前,回复来自该第一工作群组的各个该线程的状态。
7.如权利要求5所述的方法,其中对于来自该第一工作群组的线程定义同步点的步骤包括:
在用于来自该第一工作群组的线程的编码中插入同步呼叫。
8.如权利要求1所述的方法,其中该处理核心系为控制处理单元(CPU)核心。
9.如权利要求1所述的方法,其中该处理逻辑系为图形处理单元(GPU)的核函数(kernel)。
10.如权利要求1所述的方法,进一步包括:
(d)映射关联于第二处理器的内存阶层至关联于该处理核心的内存。
11.如权利要求10所述的方法,其中,该映射包括:
在耦合至该处理核心的系统内存中分派复数的第一区域,其中,各个该第一区域相当于被来自该第一工作群组的线程所存取的私有内存;以及
在耦合至该处理核心的系统内存中分派复数的第二区域,其中,各个该第一区域相当于与来自该第一工作群组的所有线程相关联的区域内存。
12.如权利要求11所述的方法,其中,该映射复包括:
分派防护页于来自该复数第一区域的每一对第一区域之间;以及
分派防护页于来自该复数第二区域的每一对第二区域之间。
13.如权利要求11所述的方法,其中,该映射进一步包括:
在耦合于该处理核心的高速缓存终形成快取区域,其中,该快取区域包括该第一区域和第二区域其中至少一者的内容。
14.一种用于执行图形处理单元(GPU)核函数的方法,包括:
加载包括该GPU核函数的应用程序至主机处理器,其中,该GPU核函数已经预先被配置成在GPU上执行,其中,该GPU核函数系配置成在该GPU上样例化(instantiate)复数资料并行线程;
形成一个或更多工作群组,其中,各工作群组包括复数该资料并行线程;
使该一个或更多工作群组关联于耦合至该主机处理器的一个或更多处理核心的操作系统线程,其中各个该工作群组仅关联于该操作系统线程的其中一个,而其中各个该操作系统线程系配置成仅在该处理核心的其中一个上执行;以及
将各个该工作群组的资料并行线程配置成各自关联的操作系统线程内的使用者层级线程。
15.如权利要求14所述的方法,进一步包括:
将来自耦合至该GPU的内存阶层中的一个或更多分配映射至耦合至该一个或更多处理核心的系统内存。
16.一种用于在处理核心上执行处理逻辑的复数资料并行线程的系统,包括:
包含该处理核心的至少一个处理器;
耦合至该处理核心的至少一个内存;
耦合于该至少一个内存与该至少一个处理器的图形处理单元(GPU)核函数排程器,其被配置成:
使该复数资料并行线程群集成一个或更多工作群组;
使来自于该一个或更多工作群组的第一工作群组关联于在该处理核心上的操作系统线程;以及
将来自于该第一工作群组的线程执行成在该操作系统线程内的使用者层级线程。
17.如权利要求16所述的系统,其中,该图形处理单元核函数排程器系进一步配置成:
将来自该第一工作群组的线程群集成一个或更多线程的一个或更多子集合;
将来自该一个或更多子集合的第一子集合配置成用以执行;以及
将来自该一个或更多子集合的第二子集合配置成在该第一子集合完成执行后执行。
18.如权利要求16所述的系统,其中,该图形处理单元核函数排程器系进一步配置成:
映射关联于第二处理器的内存阶层至关联于该处理核心的内存。
19.一种实体计算机程序产品包括纪录有计算机程序逻辑的计算机可读取媒体,系用以另至少一处理器:
使复数资料并行线程群集成一个或更多工作群组;
使来自于该一个或更多工作群组的第一工作群组关联于在至少一个处理核心上的操作系统线程;以及
将来自于该第一工作群组的线程执行成在该操作系统线程内的使用者层级线程。
20.如权利要求19所述的实体计算机程序产品,其中该纪录有计算机程序逻辑的计算机可读取媒体,进一步系用以另至少一处理器:
将来自该第一工作群组的线程群集成一个或更多线程的一个或更多子集合;
将来自该一个或更多子集合的第一子集合配置成用以执行;以及
将来自该一个或更多子集合的第二子集合配置成在该第一子集合完成执行后执行。
CN201080042528.5A 2009-07-27 2010-07-23 具有横跨多个处理器的数据并行线程之映射处理逻辑 Active CN102576314B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/509,763 2009-07-27
US12/509,763 US9354944B2 (en) 2009-07-27 2009-07-27 Mapping processing logic having data-parallel threads across processors
PCT/US2010/043078 WO2011017026A1 (en) 2009-07-27 2010-07-23 Mapping processing logic having data parallel threads across processors

Publications (2)

Publication Number Publication Date
CN102576314A true CN102576314A (zh) 2012-07-11
CN102576314B CN102576314B (zh) 2016-08-03

Family

ID=42989500

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201080042528.5A Active CN102576314B (zh) 2009-07-27 2010-07-23 具有横跨多个处理器的数据并行线程之映射处理逻辑

Country Status (8)

Country Link
US (1) US9354944B2 (zh)
EP (1) EP2460073B8 (zh)
JP (1) JP5934094B2 (zh)
KR (1) KR101759266B1 (zh)
CN (1) CN102576314B (zh)
IN (1) IN2012DN00929A (zh)
TW (1) TWI525540B (zh)
WO (1) WO2011017026A1 (zh)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104331302A (zh) * 2014-09-29 2015-02-04 华为技术有限公司 一种应用更新方法、移动终端和通信系统
CN104969167A (zh) * 2013-05-31 2015-10-07 株式会社日立制作所 控制装置及控制方法
CN105793833A (zh) * 2014-09-18 2016-07-20 上海兆芯集成电路有限公司 快取存储器诊断回写
CN105786523A (zh) * 2016-03-21 2016-07-20 北京信安世纪科技有限公司 数据同步系统及方法
CN105893319A (zh) * 2014-12-12 2016-08-24 上海芯豪微电子有限公司 一种多车道/多核系统和方法
CN105917311A (zh) * 2014-01-21 2016-08-31 高通股份有限公司 用于便携式设备中的同步任务分发的系统和方法
CN107450968A (zh) * 2016-05-31 2017-12-08 华为技术有限公司 负载还原方法、装置和设备
CN108319459A (zh) * 2018-02-12 2018-07-24 张伟 一种行为级描述到rtl描述的ccc编译器
CN111552539A (zh) * 2014-07-14 2020-08-18 甲骨文国际公司 变量句柄

Families Citing this family (77)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10621092B2 (en) 2008-11-24 2020-04-14 Intel Corporation Merging level cache and data cache units having indicator bits related to speculative execution
US9672019B2 (en) 2008-11-24 2017-06-06 Intel Corporation Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads
US9734545B2 (en) * 2009-10-08 2017-08-15 Nvidia Corporation Software methods in a GPU
US8516450B2 (en) * 2010-03-19 2013-08-20 Oracle International Corporation Detecting real-time invalid memory references
CN101799773B (zh) * 2010-04-07 2013-04-17 福州福昕软件开发有限公司 并行计算的内存访问方法
FR2958765B1 (fr) * 2010-04-09 2012-04-13 Commissariat Energie Atomique Memoire cache segmentee.
US8723877B2 (en) * 2010-05-20 2014-05-13 Apple Inc. Subbuffer objects
US8937622B2 (en) * 2010-09-20 2015-01-20 Qualcomm Incorporated Inter-processor communication techniques in a multiple-processor computing platform
US9823991B2 (en) * 2010-12-06 2017-11-21 International Business Machines Corporation Concurrent workload simulation for application performance testing
US8645920B2 (en) * 2010-12-10 2014-02-04 Microsoft Corporation Data parallelism aware debugging
US8949777B2 (en) * 2011-04-22 2015-02-03 Intel Corporation Methods and systems for mapping a function pointer to the device code
US8683468B2 (en) * 2011-05-16 2014-03-25 Advanced Micro Devices, Inc. Automatic kernel migration for heterogeneous cores
US9092267B2 (en) * 2011-06-20 2015-07-28 Qualcomm Incorporated Memory sharing in graphics processing unit
US9176773B2 (en) * 2011-06-29 2015-11-03 Microsoft Technology Licensing, Llc Virtual machine migration tool
US10013731B2 (en) * 2011-06-30 2018-07-03 Intel Corporation Maximizing parallel processing in graphics processors
US9195501B2 (en) * 2011-07-12 2015-11-24 Qualcomm Incorporated Instruction culling in graphics processing unit
KR101818760B1 (ko) * 2011-07-22 2018-01-15 삼성전자주식회사 시뮬레이션 장치 및 그의 시뮬레이션 방법
JP5725181B2 (ja) * 2011-07-29 2015-05-27 富士通株式会社 割当方法、およびマルチコアプロセッサシステム
CN102307198A (zh) * 2011-08-30 2012-01-04 苏州阔地网络科技有限公司 一种音视频数据的传输方法
CN102333226A (zh) * 2011-09-01 2012-01-25 苏州阔地网络科技有限公司 一种音视频数据传输方法
WO2013048468A1 (en) 2011-09-30 2013-04-04 Intel Corporation Instruction and logic to perform dynamic binary translation
US8935671B2 (en) * 2011-10-11 2015-01-13 Apple Inc. Debugging a graphics application executing on a target device
US9239793B2 (en) * 2011-12-13 2016-01-19 Ati Technologies Ulc Mechanism for using a GPU controller for preloading caches
US8707314B2 (en) * 2011-12-16 2014-04-22 Advanced Micro Devices, Inc. Scheduling compute kernel workgroups to heterogeneous processors based on historical processor execution times and utilizations
US20140019723A1 (en) * 2011-12-28 2014-01-16 Koichi Yamada Binary translation in asymmetric multiprocessor system
US9348594B2 (en) 2011-12-29 2016-05-24 Intel Corporation Core switching acceleration in asymmetric multiprocessor system
KR101332839B1 (ko) 2012-01-05 2013-11-27 서울대학교산학협력단 병렬 컴퓨팅 프레임워크 기반 클러스터 시스템의 호스트 노드 및 메모리 관리 방법
KR101284195B1 (ko) 2012-01-09 2013-07-10 서울대학교산학협력단 개방형 범용 병렬 컴퓨팅 프레임워크 동적 작업 분배 장치
US9128949B2 (en) * 2012-01-18 2015-09-08 Cloudera, Inc. Memory allocation buffer for reduction of heap fragmentation
US9430807B2 (en) * 2012-02-27 2016-08-30 Qualcomm Incorporated Execution model for heterogeneous computing
US9721091B2 (en) * 2012-02-28 2017-08-01 Red Hat Israel, Ltd. Guest-driven host execution
EP3654178B1 (en) * 2012-03-30 2023-07-12 Intel Corporation Mechanism for issuing requests to an accelerator from multiple threads
CN108681519B (zh) * 2012-03-30 2022-04-08 英特尔公司 用于从多线程发送请求至加速器的机制
US9513975B2 (en) * 2012-05-02 2016-12-06 Nvidia Corporation Technique for computational nested parallelism
KR102060431B1 (ko) * 2012-08-24 2020-02-11 삼성전자주식회사 멀티 코어 시스템의 전력 관리 장치 및 방법
JP2014149765A (ja) * 2013-02-04 2014-08-21 Toshiba Corp コンパイラ、オブジェクトコード生成方法、情報処理装置及び情報処理方法
US8966510B2 (en) 2013-02-04 2015-02-24 International Business Machines Corporation Kernel execution for hybrid systems
KR101694302B1 (ko) * 2013-03-11 2017-01-23 한국전자통신연구원 이기종 멀티코어 프로세서 시스템의 관리 장치 및 방법
KR102062208B1 (ko) * 2013-05-03 2020-02-11 삼성전자주식회사 멀티스레드 프로그램 코드의 변환 장치 및 방법
US9633408B2 (en) * 2013-06-14 2017-04-25 Microsoft Technology Licensing, Llc Coalescing graphics operations
US9645820B2 (en) 2013-06-27 2017-05-09 Intel Corporation Apparatus and method to reserve and permute bits in a mask register
US9405937B2 (en) 2013-06-28 2016-08-02 Intel Corporation Method and apparatus for securing a dynamic binary translation system
KR101569093B1 (ko) * 2013-08-13 2015-11-13 삼성에스디에스 주식회사 분산 시스템에서 데이터를 처리하는 방법
US9891936B2 (en) 2013-09-27 2018-02-13 Intel Corporation Method and apparatus for page-level monitoring
TWI625622B (zh) 2013-10-31 2018-06-01 聯想企業解決方案(新加坡)有限公司 在多核心處理器系統與運作多核心處理器系統的電腦實施方法
GB2521151B (en) * 2013-12-10 2021-06-02 Advanced Risc Mach Ltd Configurable thread ordering for a data processing apparatus
US9589311B2 (en) * 2013-12-18 2017-03-07 Intel Corporation Independent thread saturation of graphics processing units
US9916162B2 (en) * 2013-12-26 2018-03-13 Intel Corporation Using a global barrier to synchronize across local thread groups in general purpose programming on GPU
KR102114245B1 (ko) 2014-04-10 2020-06-05 삼성전자 주식회사 그래픽스 상태 관리 장치 및 방법
US10332229B2 (en) 2014-05-12 2019-06-25 Palo Alto Research Center Incorporated System and method for high performance k-means clustering on GPU with smart kernels
US9558094B2 (en) * 2014-05-12 2017-01-31 Palo Alto Research Center Incorporated System and method for selecting useful smart kernels for general-purpose GPU computing
EP2950214B1 (fr) * 2014-05-23 2024-04-03 Kalray Barriere de synchronisation materielle entre elements de traitement
US9442706B2 (en) * 2014-05-30 2016-09-13 Apple Inc. Combining compute tasks for a graphics processing unit
US10061591B2 (en) 2014-06-27 2018-08-28 Samsung Electronics Company, Ltd. Redundancy elimination in single instruction multiple data/thread (SIMD/T) execution processing
US10061592B2 (en) 2014-06-27 2018-08-28 Samsung Electronics Co., Ltd. Architecture and execution for efficient mixed precision computations in single instruction multiple data/thread (SIMD/T) devices
US10423414B2 (en) * 2014-11-12 2019-09-24 Texas Instruments Incorporated Parallel processing in hardware accelerators communicably coupled with a processor
KR102315279B1 (ko) 2014-11-28 2021-10-20 삼성전자 주식회사 작업 그룹의 크기를 결정하는 장치 및 방법
US9965343B2 (en) * 2015-05-13 2018-05-08 Advanced Micro Devices, Inc. System and method for determining concurrency factors for dispatch size of parallel processor kernels
US10387988B2 (en) * 2016-02-26 2019-08-20 Google Llc Compiler techniques for mapping program code to a high performance, power efficient, programmable image processing hardware platform
US10146583B2 (en) * 2016-08-11 2018-12-04 Samsung Electronics Co., Ltd. System and method for dynamically managing compute and I/O resources in data processing systems
KR102576707B1 (ko) 2016-12-26 2023-09-08 삼성전자주식회사 전자 시스템 및 그 동작 방법
KR102592330B1 (ko) * 2016-12-27 2023-10-20 삼성전자주식회사 OpenCL 커널을 처리하는 방법과 이를 수행하는 컴퓨팅 장치
US11353868B2 (en) * 2017-04-24 2022-06-07 Intel Corporation Barriers and synchronization for machine learning at autonomous machines
GB2566514B (en) * 2017-09-15 2020-01-08 Imagination Tech Ltd Resource allocation
US11397663B2 (en) * 2017-11-02 2022-07-26 Silicon Mobility Sas Software environment for control engine debug, test, calibration and tuning
CN111712793B (zh) * 2018-02-14 2023-10-20 华为技术有限公司 线程处理方法和图形处理器
US11010888B2 (en) 2018-10-29 2021-05-18 International Business Machines Corporation Precision defect detection based on image difference with respect to templates
US11093580B2 (en) * 2018-10-31 2021-08-17 Advanced Micro Devices, Inc. Matrix multiplier with submatrix sequencing
US10957032B2 (en) 2018-11-09 2021-03-23 International Business Machines Corporation Flexible visual inspection model composition and model instance scheduling
US11107263B2 (en) * 2018-11-13 2021-08-31 Intel Corporation Techniques to manage execution of divergent shaders
EP3794477B1 (en) * 2019-01-04 2023-05-10 Baidu.com Times Technology (Beijing) Co., Ltd. Method and system for validating kernel objects to be executed by a data processing accelerator of a host system
US11726820B2 (en) * 2019-05-03 2023-08-15 EMC IP Holding Company, LLC Peeking and polling storage management system and method
US11567555B2 (en) * 2019-08-30 2023-01-31 Intel Corporation Software assisted power management
KR102224446B1 (ko) * 2019-10-14 2021-03-09 이화여자대학교 산학협력단 Gpgpu 스레드 블록 스케줄링 확장 방법 및 장치
KR102275529B1 (ko) * 2019-12-23 2021-07-09 주식회사 텔레칩스 멀티-마스터를 지원하는 그래픽 처리 장치를 공유하는 시스템 온 칩 및 그래픽 처리 장치의 동작 방법
KR102484563B1 (ko) * 2021-03-15 2023-01-04 숙명여자대학교산학협력단 다중 작업 효율화 방법 및 장치
US11556355B2 (en) * 2021-06-02 2023-01-17 Sap Se Application function library for cloud systems

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101017557A (zh) * 2006-02-08 2007-08-15 辉达公司 用于密码处理的图形处理单元
US20080276262A1 (en) * 2007-05-03 2008-11-06 Aaftab Munshi Parallel runtime execution on multiple processors

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6729699B1 (en) * 2000-10-04 2004-05-04 International Business Machines Corporation Invocation map based architecture for program execution
US6865738B2 (en) * 2002-10-08 2005-03-08 Sun Microsystems, Inc. Method and apparatus for managing independent asynchronous I/O operations within a virtual machine
US20040231000A1 (en) * 2003-02-18 2004-11-18 Gossalia Anuj B. Video aperture management
JP4057989B2 (ja) 2003-09-26 2008-03-05 株式会社東芝 スケジューリング方法および情報処理システム
US20050198464A1 (en) * 2004-03-04 2005-09-08 Savaje Technologies, Inc. Lazy stack memory allocation in systems with virtual memory
US7240182B2 (en) * 2004-09-16 2007-07-03 International Business Machines Corporation System and method for providing a persistent function server
JP4448784B2 (ja) * 2005-03-15 2010-04-14 株式会社日立製作所 並列計算機の同期方法及びプログラム
US8028295B2 (en) 2005-09-30 2011-09-27 Intel Corporation Apparatus, system, and method for persistent user-level thread
US7861060B1 (en) * 2005-12-15 2010-12-28 Nvidia Corporation Parallel data processing systems and methods using cooperative thread arrays and thread identifier values to determine processing behavior
US7788468B1 (en) * 2005-12-15 2010-08-31 Nvidia Corporation Synchronization of threads in a cooperative thread array
US8077174B2 (en) * 2005-12-16 2011-12-13 Nvidia Corporation Hierarchical processor array
US8074224B1 (en) * 2005-12-19 2011-12-06 Nvidia Corporation Managing state information for a multi-threaded processor
US7925860B1 (en) * 2006-05-11 2011-04-12 Nvidia Corporation Maximized memory throughput using cooperative thread arrays
JP4493626B2 (ja) 2006-05-25 2010-06-30 株式会社ソニー・コンピュータエンタテインメント マルチプロセッサシステム、ライブラリモジュール、および描画処理方法
US7623134B1 (en) * 2006-06-15 2009-11-24 Nvidia Corporation System and method for hardware-based GPU paging to system memory
US20080034179A1 (en) * 2006-08-03 2008-02-07 Mewhinney Greg R Guard bands in very large virtual memory pages
US8860741B1 (en) * 2006-12-08 2014-10-14 Nvidia Corporation Graphics processor with memory management unit and cache coherent link
US8549500B2 (en) * 2007-02-14 2013-10-01 The Mathworks, Inc. Saving and loading graphical processing unit (GPU) arrays providing high computational capabilities in a computing environment
US8341611B2 (en) * 2007-04-11 2012-12-25 Apple Inc. Application interface on multiple processors
US7743232B2 (en) 2007-07-18 2010-06-22 Advanced Micro Devices, Inc. Multiple-core processor with hierarchical microcode store
US8370845B1 (en) * 2007-08-08 2013-02-05 Nvidia Corporation Method for synchronizing independent cooperative thread arrays running on a graphics processing unit
JP2009059181A (ja) 2007-08-31 2009-03-19 Mitsubishi Electric Corp マルチプロセッサシステム
US8339404B2 (en) 2007-11-29 2012-12-25 Accelereyes, Llc System for improving utilization of GPU resources
US8184120B2 (en) * 2008-05-19 2012-05-22 Siemens Aktiengesellschaft Framework for processing and rendering large volume data
US8225325B2 (en) * 2008-06-06 2012-07-17 Apple Inc. Multi-dimensional thread grouping for multiple processors
US8286198B2 (en) * 2008-06-06 2012-10-09 Apple Inc. Application programming interfaces for data parallel computing on multiple processors
KR101607495B1 (ko) * 2008-07-10 2016-03-30 로케틱 테크놀로지즈 리미티드 디펜던시 문제의 효율적인 병렬 계산
EP2192780A1 (en) * 2008-11-28 2010-06-02 Thomson Licensing Method for video decoding supported by Graphics Processing Unit
US20100156888A1 (en) * 2008-12-23 2010-06-24 Intel Corporation Adaptive mapping for heterogeneous processing systems
US8607234B2 (en) * 2009-07-22 2013-12-10 Empire Technology Development, Llc Batch scheduling with thread segregation and per thread type marking caps

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101017557A (zh) * 2006-02-08 2007-08-15 辉达公司 用于密码处理的图形处理单元
US20080276262A1 (en) * 2007-05-03 2008-11-06 Aaftab Munshi Parallel runtime execution on multiple processors

Cited By (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104969167A (zh) * 2013-05-31 2015-10-07 株式会社日立制作所 控制装置及控制方法
CN104969167B (zh) * 2013-05-31 2018-01-09 株式会社日立制作所 控制装置及控制方法
CN105917311B (zh) * 2014-01-21 2019-03-12 高通股份有限公司 用于便携式设备中的同步任务分发的系统和方法
CN105917311A (zh) * 2014-01-21 2016-08-31 高通股份有限公司 用于便携式设备中的同步任务分发的系统和方法
CN111552539B (zh) * 2014-07-14 2023-07-07 甲骨文国际公司 变量句柄
CN111552539A (zh) * 2014-07-14 2020-08-18 甲骨文国际公司 变量句柄
CN105793833A (zh) * 2014-09-18 2016-07-20 上海兆芯集成电路有限公司 快取存储器诊断回写
CN105793833B (zh) * 2014-09-18 2019-08-06 上海兆芯集成电路有限公司 处理器及其操作方法、计算机可读存储介质
CN104331302A (zh) * 2014-09-29 2015-02-04 华为技术有限公司 一种应用更新方法、移动终端和通信系统
CN104331302B (zh) * 2014-09-29 2018-10-02 华为技术有限公司 一种应用更新方法、移动终端和通信系统
CN105893319A (zh) * 2014-12-12 2016-08-24 上海芯豪微电子有限公司 一种多车道/多核系统和方法
CN105786523B (zh) * 2016-03-21 2019-01-11 北京信安世纪科技股份有限公司 数据同步系统及方法
CN105786523A (zh) * 2016-03-21 2016-07-20 北京信安世纪科技有限公司 数据同步系统及方法
CN107450968A (zh) * 2016-05-31 2017-12-08 华为技术有限公司 负载还原方法、装置和设备
CN107450968B (zh) * 2016-05-31 2020-09-08 华为技术有限公司 负载还原方法、装置和设备
CN108319459A (zh) * 2018-02-12 2018-07-24 张伟 一种行为级描述到rtl描述的ccc编译器
CN108319459B (zh) * 2018-02-12 2022-04-29 芯峰科技(广州)有限公司 一种行为级描述到rtl描述的ccc编译器

Also Published As

Publication number Publication date
EP2460073B8 (en) 2018-05-16
EP2460073B1 (en) 2018-04-11
TWI525540B (zh) 2016-03-11
US9354944B2 (en) 2016-05-31
JP2013500543A (ja) 2013-01-07
US20110022817A1 (en) 2011-01-27
CN102576314B (zh) 2016-08-03
TW201112118A (en) 2011-04-01
KR20120054027A (ko) 2012-05-29
KR101759266B1 (ko) 2017-07-18
IN2012DN00929A (zh) 2015-04-03
EP2460073A1 (en) 2012-06-06
WO2011017026A1 (en) 2011-02-10
JP5934094B2 (ja) 2016-06-15

Similar Documents

Publication Publication Date Title
CN102576314A (zh) 具有横跨多个处理器的数据并行线程之映射处理逻辑
CN107347253B (zh) 用于专用处理器的硬件指令生成单元
Konstantinidis et al. A quantitative roofline model for GPU kernel performance estimation using micro-benchmarks and hardware metric profiling
EP3126971B1 (en) Program execution on heterogeneous platform
Pérez et al. CellSs: Making it easier to program the Cell Broadband Engine processor
Nicolau Measuring the parallelism available for very long instruction word architectures
Kim et al. Performance analysis and tuning for general purpose graphics processing units (GPGPU)
Hormati et al. Sponge: portable stream programming on graphics engines
EP2707797B1 (en) Automatic load balancing for heterogeneous cores
Kim et al. Efficient SIMD code generation for irregular kernels
KR20140029480A (ko) 이종 코어를 위한 자동 커널 마이그레이션
US10318261B2 (en) Execution of complex recursive algorithms
Dong et al. Characterizing the microarchitectural implications of a convolutional neural network (cnn) execution on gpus
Ventroux et al. SESAM/Par4All: a tool for joint exploration of MPSoC architectures and dynamic dataflow code generation
CN104899369A (zh) 一种利用perl脚本的仿真器多线程运行方法
GB2582785A (en) Compiling a program from a graph
CA3231497A1 (en) System for auto-parallelization of processing codes for multi-processor systems with optimized latency, and method thereof
Tomiyama et al. SMYLE OpenCL: A programming framework for embedded many-core SoCs
Nguyen et al. A comparative study of operational engineering for environmental and compute-intensive applications
Foucher et al. Online codesign on reconfigurable platform for parallel computing
Luecke Software Development for Parallel and Multi-Core Processing
Sasidharan Performance Models for Hybrid Programs Accelerated by GPUs
Tarakji Design and investigation of scheduling mechanisms on accelerator-based heterogeneous computing systems
Athrij Vectorizing Memory Access on HammerBlade Architecture
Benoit et al. A first step to performance prediction for heterogeneous processing on manycores

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant