异构并行处理平台的软件库的制作方法

文档序号:6497814阅读:175来源:国知局
异构并行处理平台的软件库的制作方法
【专利摘要】用于在OpenCL框架中提供库的系统、方法和媒体。库源代码被编译成中间表示并被分配给最终用户计算系统。所述计算系统通常包括CPU和一个或多个GPU。所述CPU把所述库的所述中间表示编译成针对在所述GPU上运行的可执行的二进制。所述CPU执行主机应用程序,所述主机应用程序从所述二进制调用内核。所述CPU从所述二进制检索所述内核并把所述内核传送到GPU进行执行。
【专利说明】异构并行处理平台的软件库
[0001]背景发明领域
[0002]本发明一般涉及计算机和软件,且具体涉及各种不同并行硬件平台的抽象的软件库。
[0003]相关领域的描述
[0004]计算机和其它数据处理设备通常具有一般被称为中央处理单元(CPU)的至少一个控制处理器。所述计算机和设备也可具有其它处理器,例如用于各种类型的专门处理的图形处理单元(GPU)。例如,在第一组的应用程序中,GPU可被设计以执行图形处理操作。GPU通常包括能够对并行数据流执行同一指令的多个处理元件。通常,CPU充当主机且可把专门的并行任务交接到其它处理器,例如GPU。
[0005]已开发了用于异构计算平台的若干框架,其具有CPU和GPU。这些框架包括斯坦福大学的BrookGPU、NVIDIA的CUDA,和称为科纳斯组织的行业联盟的OpenCL?。OpenCL框架提供类似C语言的开发环境,其中用户可创建应用程序以在各种不同类型的CPU、GPU、数字信号处理器(DSP),和其它处理器上运行。OpenCL也提供编译器和运行时环境,其中代码可被在异构计算系统中编译并执行。当使用OpenCL时,开发人员可使用单一、统一的工具链和语言来针对目前使用的所有处理器。这是通过向开发人员提供抽象平台模型以及执行模型来完成的,所述抽象平台模型以类似的方式概念化所有这些架构,所述执行模型支持异构架构上的数据和任务并行。
[0006]OpenCL允许任何应用程序利用许多计算平台中包括的之前只可用于图形应用程序的巨大的GPU计算能力。使用OpenCL,有可能编写将运行供应商已为其提供了 OpenCL驱动程序的任何GPU的程序。当执行OpenCL程序时,一系列API调用配置系统进行执行,嵌入式即时(JIT)编译器编译OpenCL代码,且运行时异步协调并行内核之间的执行。任务可被从主机(例如,CPU)卸载到同一系统中的加速器设备(例如,GPU)。
[0007]典型的基于OpenCL的系统可使用源代码并通过JIT编译器来运行源代码,以生成目标GPU的可执行代码。然后,可执行代码或可执行代码的部分被发送到目标GPU并被执行。然而,这种方法可能需要很长时间且其暴露了 OpenCL源代码。因此,本领域中需要用于在OpenCL运行时环境中向应用程序提供软件库而不会暴露用以生成库的源代码的基于OpenCL的方法。
[0008]实施方案概要
[0009]在一个实施方案中,源代码和源库可能经过从高级软件语言到指令集架构(ISA)二进制的若干编译阶段,所述指令集架构二进制包含可在特定的目标硬件上执行的内核。在一个实施方案中,源代码和库的高级软件语言可为开放计算语言(OpenCL)。每个源库可包括多个内核,所述内核可被从在CPU上执行的软件应用程序调用且可被传送到GPU以实际执行。
[0010]库源代码可在被传送到最终用户计算系统之前被编译成中间表示。在一个实施方案中,中间表示可为低级虚拟机(LLVM)中间表示。中间表示可被提供到最终用户计算系统作为软件安装包的一部分。安装时,LLVM文件可被编译以用于给定最终用户计算系统的特定的目标硬件。给定计算系统中的CPU或其它主机设备可编译LLVM文件来生成在系统中用于例如GPU的硬件目标的ISA 二进制。
[0011]在运行时,ISA 二进制可通过软件开发工具包(SDK)打开,SDK可检查安装是否正确并可从ISA 二进制检索一个或多个特定的内核。内核然后可被存储在存储器中,且执行的应用程序可通过OpenCL运行时环境把每个内核传递到GPU进行执行。
[0012]本领域技术人员鉴于本文提供的方法的以下详细描述将显而易见这些和其它特征和优势。
[0013]附图简述
[0014]可通过结合附图参考以下描述来更好地理解方法和机制的上述和另外的优势,其中:
[0015]图1是根据一个或多个实施方案的计算系统的框图。
[0016]图2是根据一个或多个实施方案的分布式计算环境的框图。
[0017]图3是根据一个或多个实施方案的OpenCL软件环境的框图。
[0018]图4是根据一个或多个实施方案的加密库的框图。
[0019]图5是另一计算系统的一部分的一个实施方案的框图。
[0020]图6是示出用于在OpenCL环境中提供库的方法的一个实施方案的广义的流程图。
[0021]详细描述
[0022]在下文的描述中,阐述了许多具体细节以提供对本文提供的方法和机制的彻底理解。然而,本领域一般技术人员应认识到,可在没有这些具体细节的情况下实践各种实施方案。在一些实例中,并未详细示出众所周知的结构、组件、信号、计算机程序指令和技术,以免模糊本文中所描述的方法。应理解,为了说明的简单和清楚,在附图中示出的元件不一定按比例绘制。例如,一些元件的尺寸可能相对于其它元件被夸大。
[0023]本说明书包括对“一个实施方案”的引用。短语“在一个实施方案中”在不同的上下文中出现并不一定是指相同的实施方案。特定的特征、结构或特性可用与本发明一致的任何合适的方式来组合。另外,如本申请通篇所使用,用语〃可〃用于宽松的意义(即,意指有可能),而非强制的意义(即,意指必须)。类似地,用语〃包括〃意指包括但不限于。
[0024]术语。以下各段提供本公开(包括所附权利要求)中出现的术语的定义和/或上下文:
[0025]“包括”。这个术语是开放式的。如所附权利要求中所使用,这个术语并不排除额外的结构或步骤。考虑引用:“一种系统,其包括主机处理器……”的权利要求。所述权利要求不排除系统包括额外的组件(例如,网络接口、存储器)。 [0026]“被配置以”。各种单元、电路或其它组件可被描述或主张为“被配置以”执行一个或多个任务。在所述上下文中,“被配置以”用以通过指示单元/电路/组件包括在操作过程中执行一个或多个任务的结构(例如,电路)来意指结构。因此,单元/电路/组件可被称为被配置以即使当指定单元/电路/组件当前未操作(例如,未打开)时也执行任务。与“被配置以”语言连用的单元/电路/组件包括硬件,例如,电路、存储可执行以实施操作的程序指令的存储器等。引用单元/电路/组件“被配置以”执行一个或多个任务明确不打算为所述单元/电路/组件调用35 U.S.C.§112第六段。此外,“被配置以”可包括由软件和/或固件(例如,FPGA或执行软件的通用处理器)操纵来以能够执行待解决的任务的方式操作的通用的结构(例如,通用的电路)。“被配置以”也可包括使制造工艺(例如,半导体制造设施)适于制造适于实施或执行一个或多个任务的设备(例如,集成电路)。
[0027]“第一”、“第二”等。如本文所使用,这些术语被用作它们后面名词的标签,且并不暗示任何类型的排序(例如,空间、时间、逻辑),除非另有明确定义。例如,在具有四个GPU的系统中,术语“第一”和“第二” GPU可用以代表四个GPU中的任何两个。
[0028]“基于”。如本文所使用,这个术语用以描述影响决定的一个或多个因素。这个术语不排除可能影响决定的额外的因素。即,决定可仅基于这些因素或至少部分基于这些因素。考虑短语“基于B来确定A”。而B可能是影响A的决定的因素,但是所述短语不排除A的决定也基于C。在其它实例中,可仅基于B来确定A。
[0029]现在参考图1,示出根据一个实施方案的计算系统100的框图。计算系统100包括CPU 102,GPU 106,且可能可选地包括协同处理器108。在图1示出的实施方案中,CPU 102和GPU 106被包括在单独的集成电路(IC)或包中。然而,在其它实施方案中,CPU 102和GPU106或其集体功能可被包括在单个IC或包中。在一个实施方案中,GPU 106可具有支持执行数据-并行应用程序的并行架构。
[0030]另外,计算系统100也包括系统存储器112,其可由CPU 102、GPU 106和协同处理器108访问。在各种实施方案中,计算系统100可包括超级计算机、台式计算机、膝上型计算机、视频游戏控制台、嵌入式设备、手持式设备(例如,移动电话、智能电话、MP3播放器、相机、GPS设备等),或包括或被配置以包括GPU的某个其它设备。虽然未在图1中具体示出,但是计算系统100也 可包括显示设备(例如,阴极射线管、液晶显示器、等离子显示器等)以显示计算系统100的内容(例如,图形、视频等)。
[0031]GPU 106通过执行某些特殊功能(例如,图形处理任务和数据并行、通用计算任务)来协助CPU 102,这通常比CPU 102可在软件执行所述功能要快。协同处理器108也可协助CPU 102执行各种任务。协同处理器108可包括但不限于浮点协同处理器、GPU、视频处理单元(VPU)、网络协同处理器,和其它类型的协同处理器和处理器。
[0032]GPU 106和协同处理器108可通过总线114来与CPU 102和系统存储器112通信。总线114可为计算机系统中使用的任何类型的总线或通信结构,包括外围部件接口(PCI)总线、加速图形端口(AGP)总线、PCI快速(PCIE)总线,或目前可用的或将来开发的另一类型的总线。
[0033]除了系统存储器112,计算系统100还包括本地存储器104和本地存储器110。本地存储器104被耦接到GPU 106且也可被耦接到总线114。本地存储器110被耦接到协同处理器108且也可被耦接到总线114。本地存储器104和110分别可用于GPU 106和协同处理器108,以提供比起如果数据被存储在系统存储器112中将可能达到的对某些数据(例如,经常使用的数据)的更快的访问。
[0034]现在转到图2,示出了示出分布式计算环境的一个实施方案的框图。主机应用程序210可在主机设备208上执行,主机设备208可包括一个或多个CPU和/或其它类型的处理器(例如,片上系统(SoC)、图形处理单元(GPU)、现场可编程门阵列(FPGA)、专用集成电路(ASIC))。主机设备208可通过各种类型的连接耦接到计算设备206A-N中的每一个,所述连接包括直接连接、总线连接、局域网(LAN)连接、网络连接等。另外,计算设备206A-N中的一个或多个可为云计算环境的一部分。
[0035]计算设备206A-N代表可被耦接到主机设备208的任何数量的计算系统和处理设备。每个计算设备206A-N可包括多个计算单元202。每个计算单元202可代表各种类型的处理器中的任何处理器,例如GPU、CPU、FPGA等。此外,每个计算单元202可包括多个处理元件 204A-N。
[0036]主机应用程序210可监控并控制在计算设备206A-N上运行的其它程序。在计算设备206A-N上运行的程序可包括OpenCL内核。在一个实施方案中,主机应用程序210可在OpenCL运行时环境中执行,且可监控在计算设备206A-N上执行的内核。如本文所使用,术语“内核”可代表在OpenCL框架中目标设备(例如,GPU)上执行的程序中声明的函数。内核的源代码可用OpenCL语言编写且用一个或多个步骤来编译以创建可执行形式的内核。在一个实施方案中,将由计算设备206的计算单元202执行的内核可被分成多个工作负载,且工作负载可被并行地发布到不同的处理元件204A-N。在其它实施方案中,分布式计算环境可利用OpenCL之外的其它类型的运行时环境。
[0037]现在参考图3,示出了示出OpenCL软件环境的一个实施方案的框图。特定于特定类型的处理(例如,视频编辑、媒体处理、图形处理)的软件库可被下载或包括在计算系统的安装包中。软件库可在被包括在安装包中之前被从源代码编译成与设备无关的中间表示。在一个实施方案中,中间表示(IR)可为低级虚拟机(LLVM)中间表示,例如LLVM IR 302。LLVM是与语言无关的编译器框架的行业标准,且LLVM定义了源代码转换的通用的、低级代码表示。在其它实施方案中,可使用其它类型的IR。分配LLVM IR 302而非源代码可防止意外访问或修改原始源代码。
[0038]LLVM IR 302可被包括在各种类型的最终用户计算系统的安装包中。在一个实施方案中,在安装时,LLVM IR 302可被编译成中间语言(IL)304。编译器(未示出)可从LLVMIR 302生成IL 304。IL 304可包括特定于目标设备(例如,GPU 318)的技术细节,但是IL304可能不可在目标设备上执行。在另一实施方案中,IL 304可被提供以代替LLVM IR 302作为安装包的一部分。
[0039]然后,IL 304可被编译成特定于设备的二进制306,二进制306可被CPU 316缓存或者可访问供以后使用。用以从IL 304生成二进制306 (且从LLVM IR 302生成IL 304)的编译器可被提供到CPU 314作为GPU 318的驱动器组件的一部分。如本文所使用,术语“二进制”可代表内核的库的编译、可执行版本。二进制306可针对特定的目标设备,且内核可被从二进制检索并由特定的目标设备执行。来自被编译用于第一目标设备的二进制的内核可能不可在第二目标设备上执行。二进制306也可被称为指令集架构(ISA) 二进制。在一个实施方案中,LLVM IR 302、IL 304和二进制306可被用内核数据库(KDB)文件格式存储。例如,文件302可被标记为KDB文件的LLVM IR版本,文件304可为KDB文件的IL版本,且文件306可为KDB文件的二进制版本。
[0040]特定于设备的二进制306可包括多个可执行的内核。内核可能已处于编译、可执行的形式,使得它们可被转移到任一 GPU 318且执行,而无需经过即时(JIT)编译阶段。当特定的内核由软件应用程序310访问时,特定的内核可被从存储器检索且/或存储在存储器中。因此,为了未来访问同一内核,内核可被从存储器检索而非从二进制306检索。在另一实施方案中,内核可被存储在存储器中GPU 318内,使得下次执行内核时,内核可被快速访问。
[0041]软件开发工具包(SDK)库(.lib)文件(SDK.1ib 312)可被软件应用程序310用以通过动态链接库(SDK.dll 308)来提供对二进制306的访问。SDK.dll 308可被用以在运行时从软件应用程序310访问二进制306,且SDK.dll 308可被与LLVM IR 302 一起分配给最终用户计算系统。软件应用程序310可使用SDK.1ib 312来通过进行合适的API调用经由SDK.dll 308访问二进制306。
[0042]SDK.1ib 312可包括用于访问二进制306中的内核的多个函数。这些函数可包括调用函数、获取程序函数,和关闭函数。调用函数可调用二进制306并把来自二进制306的主索引表加载到存储器中CPU 316内。获取程序函数可从主索引表选择单一内核,并把内核从二进制306拷贝到CPU 316存储器。关闭函数可释放调用函数使用的资源。
[0043]在一些实施方案中,当调用函数被调用时,软件应用程序310可确定二进制306是否已用最新的驱动程序编译。如果CPU 316已安装了新的驱动程序且如果二进制306被编译器从之前的驱动程序编译,那么原始LLVM IR 302可由新的编译器重新编译以创建新的二进制306。在一个实施方案中,只有被调用的个别内核才可被重新编译。在另一实施方案中,内核的整个库可被重新编译。在又一实施方案中,重新编译可能不在在运行时发生。相反,安装程序可识别存储在CPU 316中的所有二进制,且当安装新的驱动程序时,安装程序可重新编译LLVM IR 302和当CPU 316不忙时在后台的任何其它LLVM IR。
[0044]在一个实施方案中,CPU 316可操作OpenCL运行时环境。软件应用程序310可包括用于访问OpenCL运行时环境的OpenCL应用程序编程接口(API)。在其它实施方案中,CPU 316可操作其它类型的运行时环境。例如,在另一实施方案中,可使用DirectCompute运行时环境。
[0045]现在转到图4,示出加密库的一个实施方案的框图。源代码402可被编译以生成LLVM IR 404。LLVM IR 404可用以生成加密LLVM IR 406,加密LLVM IR 406可被传送到CPU416。把加密LLVM IR 406分配到最终用户可向源代码402提供额外的保护,且可防止未经授权用户反向工程LLVM IR 404以生成源代码402的近似值。创建并分配加密LLVM IR 406可为可用于某些库和某些安装包的选项。例如,源代码402的软件开发人员可决定使用加密以向其源代码提供额外的保护。在其它实施方案中,源代码402的IL版本可被提供到最终用户,且在这些实施方案中,IL文件可在被传递到目标计算系统之前被加密。
[0046]当使用加密时,编译器408可包括嵌入式解密器410,嵌入式解密器410被配置以解密被加密的LLVM IR文件。编译器408可解密被加密的LLVM IR 406,然后执行编译来创建未加密的二进制414,未加密的二进制414可被存储在存储器412中。在另一实施方案中,未加密的二进制414可被存储在CPU 416外部的另一存储器(未示出)中。在一些实施方案中,编译器408可从LLVM IR 406生成IL表示(未示出),然后可从IL生成未加密的二进制414。在各种实施方案中,可在加密LLVM IR 406中设置标记以指示其被加密。
[0047]现在参考图5,示出另一计算系统的一部分的一个实施方案的框图。源代码502可代表可由系统500使用的任何数量的库和内核。在一个实施方案中,源代码502可被编译成LLVM IR 504。GPU 510A-N的LLVM IR 504可相同。在一个实施方案中,LLVM IR 504可被各自的编译器编译成中间语言(IL)表示506A-N。在CPU 512上执行的第一编译器(未示出)可生成IL 506A,然后IL 506A可被编译成二进制508A。二进制508A可针对GPU 510A,GPU 510A可具有第一类型的微架构。类似地,在CPU 512上执行的第二编译器(未示出)可生成IL 506N,然后IL 506N可被编译成二进制508N。二进制508N可针对GPU 510N, GPU510N可具有第二类型的微架构,所述微架构与GPU 510A的第一类型的微架构不同。
[0048]二进制508A-N代表可被生成的任何数量的二进制,且GPU 51OA-N代表可被包括在计算系统500中的任何数量的GPU。二进制508A-N也可包括任何数量的内核,且来自源代码502的不同的内核可被包括在不同的二进制中。例如,源代码502可包括多个内核。第一内核可用于在GPU 51OA上执行,所以第一内核可被编译成针对GPU 51OA的二进制508A。来自源代码502的第二内核可用于在GPU 510N上执行,所以第二内核可被编译成针对GPU510N的二进制508N。这个过程可重复,使得任何数量的内核可被包括在二进制508A中且任何数量的内核可被包括在二进制508N中。来自源代码502的一些内核可被编译并包括在两种二进制中,一些内核只可被编译成二进制508A,其它内核只可被编译成二进制508N,而其它内核可能不被包括在二进制508A或二进制508N中。对于任何数量的二进制,这个过程可重复,且每个二进制可包含源自源代码502的内核的子集或全部。在其它实施方案中,其它类型的设备(例如,FPGA, ASIC)可用于计算系统500中,且可针对二进制508A-N中的一个或多个。
[0049]现在转到图6,示出用于在OpenCL环境中提供库的方法的一个实施方案。为了讨论的目的,顺序示出这个实施方案中的步骤。应注意,在下文描述的方法的各种实施方案中,所述元素中的一个或多个可同时执行、按与示出的顺序不同的顺序执行,或可完全省略。也可按需要执行其它另外的元素。
[0050]方法600可适于方块605,然后库的源代码可被编译成中间表示(IR)(方块610)。在一个实施方案中,源代码可用OpenCL编写。在其它实施方案中,源代码可用其它语言(例如,C、C++、Fortran)编写。在一个实施方案中,IR可为LLVM中间表示。在其它实施方案中,可使用其它IR。接下来,IR可被传送到计算系统(方块620)。计算系统可包括多个处理器,包括一个或多个CPU和一个或多个GPU。计算系统可下载IR,IR可为安装软件包的一部分,或者可使用用于把IR传送到计算系统的各种其它方法中的任何方法。
[0051]在方块620后,IR可被计算系统的主机处理器接收(方块630)。在一个实施方案中,主机处理器可为CPU。在其它实施方案中,主机处理器可为数字信号处理器(DSP)、片上系统(SoC)、微处理器、GPU等。然后,IR可被在CPU上执行的编译器编译成二进制(方块640)。二进制可针对计算系统中的特定的目标处理器(例如,GPU、FPGA)。或者,二进制可针对计算系统外部的设备或处理器。二进制可包括多个内核,其中每个内核都可直接在特定的目标处理器上执行。在一些实施方案中,内核可为利用具有并行架构的GPU或其它设备的并行处理能力的函数。二进制可被存储在CPU本地存储器、系统存储器中,或在另一存储位置。
[0052]在一个实施方案中,CPU可执行软件应用程序(方块650),且软件应用程序可与OpenCL运行时环境交互以调度将由一个或多个目标处理器执行的特定任务。为了执行这些任务,软件应用程序可调用对应于来自二进制的内核的一个或多个函数的调用。当函数调用执行时,内核的请求可由应用程序生成(条件方块660)。响应于生成内核的请求,应用程序可调用一个或多个API调用以从二进制检索内核(方块670)。[0053]如果未生成内核的请求(条件方块660),那么软件应用程序可继续其执行且可能准备当生成内核的请求时作出回应。然后,在已从二进制检索到内核(方块670)之后,内核可被传送到特定的目标处理器(方块680)。内核可被以各种方式传送到特定的目标处理器,包括作为字符串或在缓冲器中。然后,内核可由特定的目标处理器执行(方块690)。在方块690之后,软件应用程序可能继续在CPU上执行,直到生成另一内核请求为止(条件方块660)。对于计算系统使用的多个库,步骤610-640可被重复多次。应注意,虽然内核通常在例如GPU的高度并行的处理器上执行,但是内核也可用分布式方式在CPU上执行或在GPU、CPU和其它设备的组合上执行。
[0054]应注意,上述实施方案可包括软件。在所述实施方案中,代表所述方法和机制的程序指令和/或数据库可被存储在非临时性计算机可读存储介质上。程序指令可包括机器可读指令,以供与任何非易失性存储器设备连用或由任何非易失性存储器设备使用的机器、处理器和/或任何通用计算机执行。合适的处理器通过举例的方式包括通用和专用处理器。
[0055]一般说来,非临时性计算机可读存储介质可包括在使用过程中可由计算机访问以向计算机提供指令和/或数据的任何存储介质。例如,非临时性计算机可读存储介质可包括存储介质,例如磁或光介质,例如磁盘(固定或可移动的)、磁带、CD-ROM、DVD-ROM、CD-R、⑶-RW、DVD-R、DVD-RW或蓝光光碟。存储介质还可包括易失性或非易失性存储器介质,例如RAM(例如,同步动态RAM(SDRAM)、双倍数据速率(DDR、DDR2、DDR3等)SDRAM、低功率DDR(LPDDR2 等)SDRAM、Rambus DRAM (RDRAM)、静态 RAM(SRAM))、ROM、可通过外围设备接口(例如USB接口)访问的非易失性存储器(例如,闪存)等。存储介质可包括微机电系统(MEMS),以及可通过通信介质(例如,网络和/或无线链路)访问的存储介质。
[0056]在其它实施方案中,代表所述方法和机制的程序指令可为用硬件设计语言(HDL)(例如,Verilog*VHDL)进行的对硬件功能的行为级描述或寄存器传输级(RTL)描述。描述可由合成工具读取,所述合成工具可合成所述描述以生成包括来自合成库的门的列表的网表。网表包括也代表包括系统的硬件的功能的门的集合。网表然后可被放置并路由,以生成描述将被应用到掩模的几何形状的数据集。掩模然后可用于各种半导体制造步骤,以产生对应于系统的一个或多个半导体电路。或者,计算机可访问存储介质上的数据库视需要可为网表(具有或不具有合成库)或数据集。虽然计算机可访问存储介质可携带系统的表示,但是其它实施方案可携带系统(视需要,包括IC)的任何部分、任何程序集合(例如,AP1、DLL、编译器)或程序的部分的表示。
[0057]可由本发明使用或结合本发明使用的硬件组件、处理器或机器的类型包括ASIC、FPGA、微处理器,或任何集成电路。所述处理器可通过使用已处理的HDL指令(所述指令能够被存储在计算机可读介质上)的结果配置制造工艺来制造。所述处理的结果可为掩模作品,所述掩模作品然后被用于半导体制造工艺来制造实施本文所述的方法和机制的方面的处理器。
[0058]虽然以特定组合在示范性实施方案中描述了特征和元素,但是每个特征或元素可在没有示范性实施方案的其它特征和元素的情况下单独使用,或以具有或不具有其它特征和元素的各种组合使用。还应当强调的是,上述实施方案仅为实施的非限制性实例。一旦上述公开被完全理解,本领域技术人员将显而易见许多变化和修改。意图在于,以上权利要 求应被理解为包含所有这样的变化和修改。
【权利要求】
1.一种系统,其包括: 主机处理器;和 目标处理器,所述目标处理器被耦接到所述主机处理器; 其中所述主机处理器被配置以: 接收预编译库,其中所述预编译库在被所述主机处理器接收之前被从源代码编译成第一中间表不; 把所述预编译库从所述第一中间表示编译成二进制,其中所述二进制包括所述目标处理器可执行的一个或多个内核;和把所述二进制存储在存储器中; 其中响应于检测到所述二进制的给定内核的请求,提供所述内核以供所述目标处理器执行。
2.如权利要求1所述的系统,其中提供所述内核以供所述目标处理器执行包括:所述目标处理器从存储位置检索所述内核或者所述主机处理器把所述内核传送到所述目标处理器。
3.如权利要求1所述的系统,其中所述主机处理器操作开放计算语言(OpenCL)运行时环境,其中打开所述二进制包括把对应于所述二进制的主索引表加载到所述主机处理器的存储器,且其中从所述二进制检索所述给定内核包括在所述主索引表中查找所述给定内核以确定所述给定内核在所述二进制中的位置。
4.如权利要求1所述的系统,其中所述主机处理器是中央处理单元(CPU),所述目标处理器是图形处理单元(GPU),且其中所述GPU包括多个处理元件。
5.如权利要求1所述的系统,其中所述源代码以开放计算语言(OpenCL)编写。
6.如权利要求1所述的系统,其中把所述预编译库从第一中间表示编译成二进制包括:把所述第一中间表示编译成第二中间表示,然后把所述第二中间表示编译成所述二进制。
7.如权利要求1所述的系统,其中所述预编译库的所述第一中间表示被加密,且其中所述主机处理器被配置以在把所述第一中间表示编译成二进制之前解密所述第一中间表/Jn ο
8.如权利要求1所述的系统,其中所述第一中间表示是低级虚拟机(LLVM)中间表示。
9.一种方法,其包括: 把库的中间表示编译成二进制,其中所述二进制针对特定的目标处理器; 响应于检测到所述内核的请求,从所述二进制检索内核;和 在所述特定的目标处理器上执行所述内核。
10.如权利要求9所述的方法,其中从所述二进制检索内核包括: 把对应于所述二进制的主索引表加载到所述CPU的存储器;和 从所述主索引表检索所述内核的位置信息。
11.如权利要求9所述的方法,其中所述特定的目标处理器是图形处理单元(GPU)。
12.如权利要求9所述的方法,其中所述库包括多个内核。
13.如权利要求9所述的方法,其中所述库包括以开放计算语言(OpenCL)编写的源代码。
14.如权利要求9所述的方法,其中所述IR包括低级虚拟机(LLVM)IR,且其中所述方法包括:把所述LLVM IR编译成中间语言(IL)表示和把所述IL表示编译成所述二进制。
15.如权利要求9所述的方法,其中在检测到所述内核的请求之前,所述IR被编译成二进制。
16.如权利要求9所述的方法,其中所述IR不可由所述目标处理器执行。
17.一种非临时性计算机可读存储介质,其包括程序指令,其中当被执行时,所述程序指令可操作以: 接收预编译库,其中所述预编译库在被接收之前已被从源代码编译成第一中间表示; 把所述预编译库从所述第一中间表示编译成二进制,其中所述二进制包括可直接由目标处理器执行的一个或多个内核; 把所述二进制存储在存储器中; 响应于检测到所述二进制的给定内核的请求: 打开所述二进制并从所述二进制检索所述给定内核;且 把所述给定内核提供给所述目标处理器进行执行。
18.如权利要求17所述的非临时性计算机可读存储介质,其中所述目标处理器是图形处理单元(GPU)。
19.如权利要求17所述的非临时性计算机可读存储介质,其中所述源代码以开放计算语目(OpenCL)编与。
20.如权利要求17所述的非临时性计算机可读存储介质,其中在检测到所述二进制的给定内核的请求之前,所述第一中间表示被编译成二进制。
21.如权利要求17所述的非临时性计算机可读存储介质,其中把所述预编译库从第一中间表示编译成二进制包括:把所述第一中间表示编译成第二中间表示,然后把所述第二中间表示编译成所述二进制。
22.如权利要求17所述的非临时性计算机可读存储介质,其中所述第一中间表示是低级虚拟机(LLVM)中间表示。
【文档编号】G06F9/45GK104011679SQ201280064759
【公开日】2014年8月27日 申请日期:2012年11月28日 优先权日:2011年12月1日
【发明者】迈克尔·L·施密特, 拉达·基都瑟里 申请人:超威半导体公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1