CN101802789B - 多处理器上的并行运行时执行 - Google Patents

多处理器上的并行运行时执行 Download PDF

Info

Publication number
CN101802789B
CN101802789B CN200880011684.8A CN200880011684A CN101802789B CN 101802789 B CN101802789 B CN 101802789B CN 200880011684 A CN200880011684 A CN 200880011684A CN 101802789 B CN101802789 B CN 101802789B
Authority
CN
China
Prior art keywords
processing unit
carrying
carry out
data
execution
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.)
Active
Application number
CN200880011684.8A
Other languages
English (en)
Other versions
CN101802789A (zh
Inventor
阿夫泰伯·穆恩史
杰里米·萨德梅尔
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.)
Apple Inc
Original Assignee
Apple Computer 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 Apple Computer Inc filed Critical Apple Computer Inc
Priority to CN201410187203.6A priority Critical patent/CN103927150B/zh
Publication of CN101802789A publication Critical patent/CN101802789A/zh
Application granted granted Critical
Publication of CN101802789B publication Critical patent/CN101802789B/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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44536Selecting among different versions
    • G06F9/44542Retargetable
    • 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/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • 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
    • 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/54Interprogram communication
    • G06F9/541Interprogram communication via adapters, e.g. between incompatible applications

Abstract

公开了对调度队列中的多个可执行体进行调度以在诸如CPU或GPU之类的一个或多个物理计算装置中并发地执行的方法和设备。针对与所述一个或多个物理计算装置不同的一种类型的物理计算装置,从具有现有可执行体的源在线编译一个或多个可执行体。判断与所调度的可执行体相应的元素之间的依赖关系来选择在多于一个的物理计算装置中通过多个线程所要并发地执行的可执行体。如果GPU忙于图形处理线程,则被初始化用于在物理计算装置的GPU中执行可执行体的线程被初始化用于在物理计算装置中的另一CPU中的执行。API函数的现有可执行体和源被存储在API库中,以在多个物理计算装置中执行包括现有可执行体和从源在线编译出的可执行体在内的多个可执行体。

Description

多处理器上的并行运行时执行
相关申请的交叉引用
本申请与Aaftab Munshi等在2007年4月11日提交的标题为“DATAPARALLEL COMPUTING ON MULTIPLE PROCESSORS”(多处理器上的数据并行计算)的美国临时专利申请No.60/923,030和Aaftab Munshi在2007年4月20日提交的标题为“PARALLEL RUNTIME EXECUTION ONMULTIPLE PROCESSORS”(多处理器上的并行运行时执行)的美国临时专利申请No.60/925,620相关,并且要求这两者的权益,这两者通过引用被结合于此。
技术领域
本发明一般地涉及数据并行计算,更具体而言,本发明涉及跨CPU(中央处理单元)和GPU(图形处理单元)两者的数据并行运行时执行。
背景技术
随着GPU继续演进成高性能并行计算装置,越来越多的应用被写入以在与通用计算装置类似的GPU中执行数据并行计算。如今,这些应用被设计成在使用供应商特定接口的特定GPU上运行。因此,它们既不能在数据处理系统具有GPU和CPU两者时平衡(leverage)CPU,也不能在这样的应用正运行在来自不同供应商的GPU上时被平衡。
然而,随着越来越多的CPU包括多个核心来执行数据并行模型的计算,通过可用的CPU和/或GPU的任一者可以支持越来越多的处理任务。传统上,GPU和CPU是通过相互不兼容的分开的编程环境来配置的。大多数GPU需要供应商特定的专用程序。结果,应用很难在处理资源方面平衡CPU和GPU两者,例如具有数据并行计算能力的GPU连同多核CPU。
因此,需要现代的数据处理系统来克服以上问题以允许应用在能够执行任务的任何可用处理资源(例如CPU或一个或多个GPU)中执行该任务。
发明内容
本发明的一个实施例包括响应于来自主处理单元中运行的应用的API请求,加载用于该应用的数据处理任务的一个或多个可执行体的方法和设备。响应于来自该应用的另一API请求,所加载的可执行体中的一个被选择以在附接到该主处理单元的诸如CPU或GPU之类的另一处理单元中被执行。
在一个可替换实施例中,主处理单元中运行的应用程序生成API请求,以用来加载用于数据处理任务的一个或多个可执行体。然后,由该应用程序生成第二API,用来选择所加载的可执行体中的一个以用于在附接到该主处理单元的诸如CPU或GPU之类的另一处理单元中执行。
在一个可替换实施例中,用于目标处理单元的源在运行时期间基于加载到处理单元的可执行体被编译。处理单元和目标处理单元可以是中央处理单元(CPU)或图形处理单元(GPU)。处理单元和目标处理单元之间的差异被检测以从所加载的可执行体取出源。
在一个可替换实施例中,响应于来自应用的API请求,利用包括多个可执行体的新任务来更新与诸如CPU或GPU之类的多个处理单元相关联的任务队列。判断对在多个处理单元中执行来自队列的新任务进行调度的条件。基于所判断出的条件,选择与新任务相关联的多个可执行体中的一个以用于执行。
在一个可替换实施例中,响应于来自应用的API请求,从该应用加载用于执行数据处理功能的源,以在诸如CPU或GPU之类的多个目标数据处理单元的一个或多个中执行可执行体。自动确定多种类型的目标数据处理单元。基于目标处理单元的一个或多个中所要执行的所确定的类型来编译可执行体。
在一个可替换实施例中,源和针对多个处理单元编译出的一个或多个相应的可执行体被存储在API库中来实现API函数。响应于从主处理器(host processor)中运行的应用对API库的请求,从API库中取出该源和该API函数的一个或多个相应可执行体。针对这多个单元中未包括的附加处理单元,从所取出的源在线编译出附加可执行体。根据API函数,在附加处理单元中和一个或多个处理单元中一起并发地执行附加可执行体和一个或多个所取出的可执行体。
在一个可替换实施例中,在主处理器上接收API调用来执行应用,该应用具有多个用于执行的线程。主处理器耦合CPU和GPU。这多个线程被异步调度以用于CPU和GPU上的并行执行。如果GPU忙于图形处理线程,则被调度要在GPU上执行的线程可以在CPU中被执行。
在一个可替换实施例中,在主处理器上接收API调用来执行应用,该应用具有多个用于执行的线程。主处理器耦合到CPU和GPU。这多个线程被异步初始化以用于CPU和GPU上的并行执行。如果GPU忙于图形处理线程,则被初始化要在GPU上执行的线程可以在CPU中被执行。
从附图和以下详细描述中,本发明的其他特征将显而易见。
附图说明
在附图的示图中通过示例而非限制来图示本发明,相似的标号表示相似的元素,附图中:
图1是图示出用于配置包括CPU和/或GPU的计算装置来执行应用的数据并行计算的系统的一个实施例的框图;
图2是图示出具有多个并行操作来并发地执行多个线程的计算处理器的计算装置的示例的框图;
图3是图示出经由计算装置标识符被配置为逻辑计算装置的多个物理计算装置的一个实施例的框图;
图4是图示出通过匹配从应用接收到的能力需求来利用计算装置标识符配置多个物理计算装置的处理的一个实施例的流程图;
图5是图示出在逻辑计算装置中执行计算可执行体的处理的一个实施例的流程图;
图6是图示出加载可执行体的运行时处理的一个实施例的流程图,该处理包括针对被确定来执行该可执行体的一个或多个物理计算装置来编译源;
图7是图示出从执行队列中选择计算内核执行实例以在与和该执行实例相关联的逻辑计算装置相对应的一个或多个物理计算装置中执行的处理的一个实施例的流程图;
图8A是图示出建立API(应用编程接口)库的处理的一个实施例的流程图,该处理根据多个物理计算装置将用于一个或多个API的多个可执行体和源存储在库中;
图8B是图示出应用执行多个可执行体中的一个和基于API请求从API库所取出的相应源的处理的一个实施例的流程图;
图9是图示出多个物理计算装置中所要执行的计算内核可执行体的计算内核源的示例的样本源代码;
图10是图示出通过调用API来配置用于在多个物理计算装置中执行多个可执行体中的一个的逻辑计算装置的示例的样本源代码;
图11图示出可以与在此所述的实施例结合使用的、具有多个CPU和GPU(图形处理单元)的典型计算机系统的一个示例。
具体实施方式
在此描述用于多处理器上的数据并行计算的方法和设备。在以下描述中,阐述了大量特定细节以提供对本发明实施例的透彻说明。然而,对于本领域技术人员显而易见的是,可以实行本发明实施例而不用这些特定细节。在其它实例中,没有详细示出公知的组件、结构和技术以免使对本描述的理解模糊。
在说明书中,提及“一个实施例”或“实施例”意味着结合该实施例描述的具体特征、结构或特征可以包括在本发明的至少一个实施例中。在说明书中的各个地方出现的短语“在一个实施例中”不一定涉及同一个实施例。
通过包括硬件(例如,电路、专用逻辑等)、软件(例如在通用计算机系统或专用机器上运行的软件)或这两者的组合的处理逻辑来执行以下示图中所描述的处理。尽管以下根据某些顺序操作来描述处理,但是应当明白,可以以不同的顺序来执行所述操作中的某些操作。并且,可以并行地而不是顺序地执行某些操作。
图形处理单元(GPU)可以是执行诸如2D、3D图形操作之类的高效图形操作和/或数字视频相关功能的专用图形处理器。GPU可以包括用来执行诸如位块传输(blitter)操作、纹理映射、多边形渲染(rendering)、像素着色(shading)和顶点着色之类的图形操作的专门的(可编程的)硬件。已知GPU从帧缓冲器中获取数据并且将像素混合到一起来将图像背景渲染到该帧缓冲器中以用于显示。GPU还可以控制该帧缓冲器并且允许该帧缓冲器被用来刷新诸如CRT或LCD显示器之类的显示器,CRT或LCD显示器是需要至少20Hz的速率的刷新(例如,每1/30秒,利用来自帧缓冲器的数据刷新该显示器)的短存留显示器。通常,GPU可以从与GPU耦合的CPU获取图形处理任务,通过显示控制器向显示装置输出光栅图形图像。在本说明书中提及的“GPU”可以是如Lindholdm等的美国专利No.7015913“Method and Apparatus for Multitheraded Processing of Data In aProgrammable Graphics Processor”(用于可编程图形处理器中的数据的多线程处理的方法和设备)和Swan等的美国专利No.6970206“Method forDeinterlacing Interlaced Video by A Graphics Processor”(用于通过图形处理器对交织后的视频进行去交织的方法)中所描述的图像处理器或可编程图形处理器,这两个专利被通过引用结合于此。
在一个实施例中,多个不同类型的处理器(例如CPU或GPU)可以并发地执行一个或多个应用的数据并行处理任务来增大数据处理系统中可用处理资源的利用效率。数据处理系统的处理资源可以是基于多个物理计算装置的。物理计算装置可以是CPU或GPU。在一个实施例中,数据并行处理任务可以委托给多种类型的处理器,例如能够执行该任务的CPU或GPU。数据处理任务可以从处理器要求某些特定处理能力。处理能力例如可以是专用纹理(texturing)硬件支持、双精度浮点运算、专用本地存储器、流数据缓存或同步原语(synchronization primitives)。不同类型的处理器可以提供不同但是重叠的处理能力集。例如,CPU和GPU两者都能执行双精度浮点计算。在一个实施例中,应用能够平衡可用的CPU或GPU中的任一者来执行数据并行处理任务。
在另一实施例中,可以在运行时期间自动执行对用于数据并行处理任务的多种不同类型的处理资源的选择和分配。应用可以通过API(应用程序接口)向数据处理系统的运行时平台发送包括数据处理任务所希望的能力需求列表的提示。相应地,运行时平台可以确定多个当前可用的、具有与所接收到的提示相匹配的能力的CPU和/或GPU来委托该应用的数据处理任务。在一个实施例中,该能力需求列表可以依赖于基础的数据处理任务。能力需求列表可以适用例如包括来自不同供应商的具有不同版本的GPU和多核CPU的不同处理器集合。因此,可以防止应用提供以特定类型CPU或GPU为目标的程序。
图1是图示出用于配置包括CPU和/或GPU的计算装置来执行应用的数据并行计算的系统的一个实施例的框图。系统100可以实现并行计算体系结构。在一个实施例中,系统100可以是包括一个或多个主处理器的图形系统,这些主处理器通过数据总线113与一个或多个中央处理器117和诸如媒体处理器115之类的一个或多个其它处理器耦合。多个主处理器可以在托管系统(hosting system)101中被连到一起。这多个中央处理器117可以包括来自不同供应商的多核CPU。媒体处理器可以是具有专用纹理渲染硬件的GPU。另一媒体处理器可以是支持专用纹理渲染硬件和双精度浮点体系结构两者的GPU。多个GPU可以连接到一起以用于可扩缩连接接口(SLI)或CrossFire配置。
在一个实施例中,托管系统101可以支持软件栈,软件栈包括软件栈组件,例如应用103、计算平台层111、计算运行时层109、计算编译器107和计算应用库105。应用103可以通过API(应用程序接口)调用与其它栈组件连接。可以为托管系统101中的应用103并发地运行一个或多个线程。计算平台层111可以维护数据结构、或计算装置数据结构,存储每个附接的物理计算装置的处理能力。在一个实施例中,应用可以通过计算平台层111来取出有关托管系统101的可用处理资源的信息。应用可以通过计算平台层111来选择和指定用于执行处理任务的能力需求。因此,计算平台层111可以针对该处理任务来确定物理计算装置的配置以从所附接的CPU 117和/或GPU 115中分配和初始化处理资源。在一个实施例中,计算平台层111可以针对与所配置的一个或多个实际的物理计算装置相对应的应用来生成一个或多个逻辑计算装置。
计算运行时层109可以根据所配置的用于应用103的处理资源,例如一个或多个逻辑计算装置来管理处理任务的执行。在一个实施例中,执行处理任务可以包括创建代表处理任务的计算内核对象和分配例如保存可执行体、输入/输出数据等的存储资源。被加载用于计算内核对象的可执行体可以是计算内核对象。计算可执行体可以被包括在诸如CPU或GPU之类的计算处理器中所要执行的计算内核对象中。计算运行时层109可以与所分配的物理装置进行交互来执行处理任务的实际执行。在一个实施例中,计算运行时层109可以根据针对处理任务而配置的每个处理器(例如,CPU或GPU)的运行时状态来协调执行来自不同应用的多个处理任务。计算运行时层109可以基于运行时状态从被配置来执行处理任务的物理装置中选择一个或多个处理器。执行处理任务可以包括并发地在多个物理处理装置中执行一个或多个可执行体的多个线程。在一个实施例中,计算运行时层109可以通过监视每个处理器的运行时执行状况来跟踪所执行的每个处理任务的状况。
运行时层可以从应用103加载与处理任务相对应的一个或多个可执行体。在一个实施例中,计算运行时层109自动地从计算应用库105加载执行处理任务所需要的附加可执行体。计算运行时层109可以从应用103或计算应用库105中加载计算内核对象的可执行体及其相应的源程序两者。计算内核对象的源程序可以是计算内核程序。根据被配置为包括多种类型和/或不同版本的物理计算装置的逻辑计算装置,可以基于单个源程序来加载多个可执行体。在一个实施例中,计算运行时层109可以激活计算编译器107来将所加载的源程序在线编译成最优用于被配置来执行可执行体的目标处理器(例如,CPU或GPU)的可执行体。
除了根据相应源程序的现有可执行体以外,在线编译出的可执行体还可以被存储以用于将来的调用。此外,计算可执行体可以被离线编译并且经由API调用被加载到计算运行时109。计算应用库105和/或应用103可以响应于来自应用的库API请求来加载相关联的可执行体。可以为计算应用库105或应用103动态更新新编译出的可执行体。在一个实施例中,计算运行时109可以用通过新升级版本的计算装置的计算编译器107在线编译出的新可执行体来替换应用中的现有计算可执行体。计算运行时109可以插入在线编译出的新可执行体来更新计算应用库105。在一个实施例中,计算运行时109可以在加载处理任务的可执行体时调用计算编译器107。在另一个实施例中,计算编译器107可以被离线调用来建立用于计算应用库105的可执行体。计算编译器107可以编译并且链接计算内核程序来生成计算内核可执行体。在一个实施例中,计算应用库105可以包括多个用来支持例如开发工具箱和/或图像处理的函数。每个库函数可以对应于针对多个物理计算装置的计算应用库105中所存储的计算源程序和一个或多个可执行体。
图2是图示出具有多个计算处理器的计算装置的示例的框图,这多个计算处理器并行地进行操作来并发地执行多个线程。每个计算处理器可以并行地(或并发地)执行多个线程。可以并行执行的线程可以称为线程块。计算装置可以具有能被并行执行的多个线程块。例如,示出在计算装置205中,M个线程作为一个线程块执行。多个线程块中的线程,例如,计算处理器_1 205的线程1和计算处理器_L 203的线程N,可以在一个计算装置上分别的计算处理器上或在多个计算装置上并行地执行。在多个计算处理器上的多个线程块可以并行地执行计算内核可执行体。多于一个计算处理器可以是基于例如ASIC(专用集成电路)装置的单个芯片的。在一个实施例中,可以在跨越多个芯片的多于一个的计算处理器上并发地执行来自应用的多个线程。
计算装置可以包括一个或多个计算处理器,例如计算处理器_1 205和计算处理器_L 203。本地存储器可以与计算处理器耦合。可以由与计算处理器耦合的本地存储器来支持在计算处理器中运行的单个线程块中线程之间的共享存储器。跨越不同的线程块的多个线程,例如线程1 213和线程N209可以共享与计算装置201耦合的流存储器217中所存储的流。流可以是计算内核可执行体能够对其进行操作的元素的集合,例如图像流或变量流。变量流可以被分配用于存储处理任务期间对其进行操作的全局变量。图像流可以是可用于图像缓冲、纹理缓冲或帧缓冲的缓冲器。
在一个实施例中,计算处理器的本地存储器可以实现为专用本地存储装置,例如处理器_1的本地共享存储器219和处理器_L的本地共享存储器211。在另一实施例中,计算处理器的本地存储器可以实现为用于计算装置的一个或多个计算处理器2的流存储器的流读-写缓存,例如用于计算装置201中的计算处理器205203的流数据缓存215。在另一实施例中,本地存储器可以实现在与本地存储器耦合的计算处理器中运行的线程块中的线程之间共享的专用本地存储装置,例如与计算处理器_1 205耦合的本地共享存储器219。专用本地存储装置可以不被跨越不同线程块的线程共享。如果计算处理器(例如处理器_1 205m)的本地存储器被实现为流读-写缓存(例如,流数据缓存215),则在本地存储器中声明的变量可以被从流存储器217中分配并且被存储到所实现的实现本地存储器的流读-写缓存(例如,流数据缓存215)中。当例如流读-写缓存和专用本地存储装置对于相应的计算装置都不可用时,线程块内的线程可以共享流存储器217中所分配的本地变量。在一个实施例中,每个线程与私有(private)存储器相关联,私有存储器用来存储由线程中所调用的函数使用的线程私有变量。例如,私有存储器1 211可以只被线程1 213访问。
图3是图示出经由计算装置标识符而被配置为逻辑计算装置的多个物理计算装置的一个实施例的框图。在一个实施例中,应用303和平台层305可以在主CPU 301中运行。应用303可以是图1的应用103中的一个。托管系统101可以包括主CPU 301。物理计算装置Physical_Compute_Device-1305...Physical_Compute_Device-N 311中的每一个可以是图1的CPU 117或GPU 115中的一个。在一个实施例中,计算平台层111可以响应于来自应用303的API请求来生成计算装置标识符307,以用于根据API请求中所包括的能力需求的列表来配置数据并行处理资源。计算装置标识符307可以涉及根据计算平台层111进行的配置来选择实际的物理计算装置Physical_Compute_Device-1305...Physical_Compute_Device-N 311。在一个实施例中,逻辑计算装置309可以代表与主CPU 301分离的一组所选择的实际物理计算装置。
图4是图示出用于通过匹配从应用接收到的能力需求、利用计算装置标识符来配置多个物理计算装置的处理的实施例的流程图。可以根据图1的系统100,在由托管系统101托管的数据处理系统中执行处理400。数据处理系统可以包括托管平台层(例如图1的计算平台层111)的主处理器和多个附接到主处理器的物理计算装置(例如,图1的CPU 117和GPU115)。
在块401中,在一个实施例中,处理400可以建立代表与一种或多种相应的能力相关联的多个物理计算装置的数据结构(或计算装置数据结构)。各个物理计算装置可以附接到执行处理400的处理系统。诸如CPU或GPU之类的物理计算装置的能力或计算能力可以包括物理计算装置是否支持处理特征、存储器访问机制或指定扩展。处理特征可以与专用纹理硬件支持、双精度浮点运算或同步支持(例如互斥)有关。物理处理装置的存储器访问机制可以与变量流缓存的类型、图像流缓存的类型或专用本地存储器支持有关。数据处理系统的系统应用可以响应于将新的物理计算装置附接到数据处理系统来更新数据结构。在一个实施例中,可以预先确定物理计算装置的能力。在另一实施例中,数据处理系统的系统应用可以在运行时期间发现新附接的物理处理装置。该系统应用可以取出新发现的物理计算装置的能力,来更新代表所附接的物理计算装置及它们的相应能力的数据结构。
根据一个实施例,在块403,处理400可以接收来自应用的计算能力需求。该应用可以通过调用API向系统应用发送计算能力需求。该系统应用可以与该应用的托管系统中的软件栈的平台层相对应。在一个实施例中,计算能力需求可以标识用于请求处理资源来执行该应用的任务的所需能力的列表。在一个实施例中,该应用可以要求所请求的资源在多个线程中并发地执行任务。作为响应,在块405,处理400可以从所附接的物理计算装置中选择一组物理计算装置。可以基于计算能力需求与能力数据结构中所存储的计算能力之间的匹配来确定选择。在一个实施例中,处理400可以根据通过能力需求提供的提示来执行匹配。
处理400可以根据物理计算装置和计算能力需求之间所匹配的计算能力的数目来确定匹配评分。在一个实施例中,处理400可以选择具有最高匹配评分的多个物理计算装置。在另一实施例中,如果能力需求中的每个能力都被匹配,则处理400可以选择物理计算装置。处理400可以在块405,确定多组匹配物理计算装置。在一个实施例中,根据负载均衡能力来选择每组匹配物理装置。在一个实施例中,在块407,处理400可以为块405处所选择的每组物理计算装置生成计算装置标识符。处理400可以通过调用API向应用返回所生成的一个或多个计算装置标识符。应用可以根据计算装置标识符来选择采用哪些处理资源来执行任务。在一个实施例中,处理400在块407可以为所接收到的每个能力需求生成最多一个计算装置标识符。
在一个实施例中,在块409,处理400可以根据相应的计算装置标识符来分配用于初始化块405处所选择的一组物理计算装置的逻辑计算装置的资源。处理400可以根据块405处的选择,响应于来自已经接收到一个或多个计算装置标识符的应用的API请求来执行对逻辑计算装置的初始化。处理400可以在该应用的逻辑计算装置上创建上下文对象。在一个实施例中,上下文对象与该应用上运行的托管系统中的一个应用线程相关联。并发地执行一个逻辑计算装置中或跨越不同的逻辑计算装置的处理任务的多个线程可以基于分开的上下文对象。
在一个实施例中,处理400可以基于包括cuCreateContext、cuRetainContext和cuReleaseContext的多个API。API cuCreateContext创建计算上下文。计算上下文可以对应于计算上下文对象。API cuRetainContext使用由上下文标识的具体计算上下文作为cuRetainContext的输入自变量来递增实例的数目。API cuCreateContext进行隐式保留。这对于通常获得由应用传递给它们的上下文的第三方库很有帮助。然而,有可能该应用会删除上下文而不通知库。允许多个实例附接到上下文并且从上下文释放解决了由库使用的计算上下文不再有效的问题。如果cuRetainContext的输入自变量与有效计算上下文对象不相对应,则cuRetainContext返回CU_INVALID_CONTEXT。API cuReleaseContext从有效计算上下文中释放实例。如果cuReleaseContext的输入自变量与有效的计算上下文对象不相对应,则cuReleaseContext返回CU_INVALID_CONTEXT。
图5是图示出在逻辑计算装置中执行计算可执行体的处理的实施例的流程图。在一个实施例中,可以由数据处理系统中的运行时层(例如,图1的计算运行时层109)来执行处理500。在块501处,处理500可以为逻辑计算装置上要运行的计算可执行体分配一个或多个流。处理任务可以由对流进行操作的计算可执行体来执行。在一个实施例中,处理任务可以包括输入流和输出流。处理500可以将所分配的流存储器映射到应用的逻辑地址或从其映射到所分配的流存储器。在一个实施例中,处理500可以基于来自应用的API请求来执行块501的操作。
在块503处,根据一个实施例,处理500可以创建逻辑计算装置的计算内核对象。计算内核对象可以是针对用于执行函数的相应处理任务的相关联的流和可执行体而创建的对象。处理500可以在块505为计算内核对象建立函数自变量。函数自变量可以包括为函数输入或输出分配的流,例如块501处分配的流。处理500可以在块507处将计算内核可执行体和/或计算内核源加载到计算内核对象中。计算内核可执行体可以是根据逻辑计算装置要被执行用于执行与内核对象相关联的相应处理任务的可执行体。在一个实施例中,计算内核可执行体可以包括例如与目标物理计算装置的类型、版本和/或编译选项相关联的描述数据。计算内核源可以是从其编译出计算内核可执行体的源代码。处理500可以在块507加载与计算内核源相对应的多个计算内核可执行体。处理500可以从应用或通过诸如图1的计算应用库105之类的计算库来加载计算内核可执行体。计算内核可执行体可以利用相应计算内核源来加载。在一个实施例中,处理500可以根据来自应用的API请求执行块503、505和507处的操作。
在块511,处理500可以更新执行队列来利用逻辑计算装置执行计算机内核对象。处理500可以利用计算运行时(例如,图1的计算运行时109)的合适的自变量、响应于来自应用或计算应用库(例如,图1的应用103或计算应用库105)的API调用来执行计算内核。在一个实施例中,处理500可以生成执行计算内核的计算内核执行实例。对用于执行计算内核的计算运行时(例如图1的计算运行时109)的API调用本身实际上可以是异步的。执行实例可以由可由计算运行时(例如,图1的计算运行时109)返回的计算事件对象来标识。计算内核执行实例可以被添加到用于执行计算内核实例的执行队列。在一个实施例中,对用于执行计算内核实例的执行队列的API调用可以包括计算处理器上同时并行执行的线程的数目和要使用的计算处理器的数目。计算内核执行实例可以包括指示所希望的用于执行相应计算内核对象的优先顺序的优先值。计算内核执行实例也可以包括标识之前的执行实例的事件对象和/或用于执行该执行的预期数目的线程和预期数目的线程块。可以在API调用中指定线程块的数目和线程的数目。在一个实施例中,事件对象可以指示包括该事件对象的执行实例与由事件对象标识的另一执行实例之间的执行顺序关系。可以要求包括事件对象的执行实例在由该事件对象标识的另一执行实例完成执行之后被执行。事件对象可以称为queue_after_event_object。在一个实施例中,执行队列可以包括多个用于执行相应的计算内核对象的计算内核执行实例。用于一个计算内核对象的一个或多个计算内核执行实例可以被调度用于执行队列中的执行。在一个实施例中,处理500可以响应于来自应用的API请求来更新该执行队列。该执行队列可以由该应用所运行于的托管数据系统来托管。
在块513,处理500可以从用于执行的执行队列中选择计算内核执行实例。在一个实施例中,处理500可以根据相应逻辑计算装置来选择多于一个要被并发执行的计算内核执行实例。处理500可以判断:是否基于计算内核执行实例与执行队列中其他执行实例相关联的优先顺序和依赖关系而从执行队列中选择了计算内核执行实例。可以通过根据加载到相应计算内核对象的可执行体来执行该计算内核对象,从而执行计算内核执行实例。
在块517,在一个实施例中,处理500可以选择加载到与所选择的计算内核实例相对应的计算内核对象的多个可执行体中的一个可执行体,以用于在与该计算内核对象的逻辑计算装置相关联的物理计算装置中执行。处理500可以针对一个计算内核执行实例选择要在多于一个物理计算装置中并行执行的多于一个可执行体。该选择可以基于与和所选择的计算内核实例相关联的逻辑计算装置相对应的物理计算装置的当前执行状况。物理计算装置的执行状况可以包括运行的线程的数目、本地存储器利用水平和处理器利用水平(例如,每单位时间的操作的峰值数目)等。在一个实施例中,该选择可以是基于预定的利用水平的。在另一个实施例中,该选择可以是基于与计算内核执行实例相关联的线程的数目和线程块的数目。处理500可以从物理计算装置取出执行状况。在一个实施例中,处理500可以执行用于从执行队列中选择计算内核执行实例的操作,以在块513 517处与托管系统中运行的应用异步地执行。
在块519,处理500可以检查被调度用于该执行队列中的执行的计算内核执行实例的状况。可以由唯一的计算事件对象来标识各个执行实例。当相应的计算内核执行实例根据计算运行时(例如,图1的运行时109)被排队时,事件对象可以被返回给调用用于执行该执行实例的API的应用或计算应用库(例如,图5的应用103或计算应用库105)。在一个实施例中,处理500可以响应于来自应用的API请求来进行执行状况检查。处理500可以通过查询标识该计算内核执行实例的计算事件对象的状况来确定执行计算内核执行实例的完成。处理500可以等待直到计算内核执行实例的执行被完成为止,以返回来自应用的API调用。处理500可以基于事件对象来控制从各种流的处理执行实例读和/或写。
在块521,根据一个实施例,处理500可以取出执行计算内核执行实例的结果。随后,处理500可以清理被分配用于执行该计算内核执行实例的处理资源。在一个实施例中,处理500可以将保存执行计算内核可执行体的结果的流存储器拷贝到本地存储器中。处理500可以删除在块501处所分配的变量流或图像流。处理500可以删除用于在计算内核执行被完成时删除的内核事件对象。如果与特定计算内核对象相关联的各个计算内核执行实例已经被完整执行,则处理500可以删除特定计算内核对象。在一个实施例中,处理500可以基于由应用发起的API请求来执行块521处的操作。
图6是图示出加载可执行体的运行时处理的实施例的流程图,该运行时处理包括将源编译用于被确定来执行该可执行体的一个或多个物理计算装置。处理600可以作为图5的块507处的处理500的一部分而被执行。在一个实施例中,处理600可以在块601处为各个与逻辑计算装置相关联的物理计算装置选择一个或多个与该物理计算装置相兼容的现有计算内核可执行体。计算内核可执行体可以在相兼容的物理计算装置中被执行。该现有计算内核可执行体可以从应用或通过例如图1的计算应用库105的计算库获得。所选择的计算内核可执行体中的每一个计算内核可执行体可以由至少一个物理计算装置执行。在一个实施例中,该选择可以是基于与现有计算内核可执行体相关联的描述数据的。
如果存在被选择的现有计算内核对象,则处理600可以在块603处判断所选择的计算内核可执行体中的任何一者是否对于物理计算装置是最优的。该判断例如可以是基于物理计算装置的版本的。在一个实施例中,如果描述数据中的目标物理计算装置的版本与物理计算装置的版本相匹配,则处理600可以判断出现有计算内核可执行体对于该物理计算装置是最优的。
在块605,在一个实施例中,处理600可以使用在线编译器(例如图1的计算编译器107)来从相应的计算机内核源建立对于物理计算装置最优的新的计算内核可执行体。如果在块603处发现所选择的计算内核可执行体中没有计算内核可执行体对于物理计算装置是最优的,则处理600可以执行在线建立。在一个实施例中,如果在块601处发现现有计算内核可执行体中没有计算内核可执行体与物理计算装置相兼容,则处理600可以执行在线建立。计算内核源可以从应用或通过诸如图1的计算应用库105之类的计算库来获得。
如果块605处的建立是成功的,则在一个实施例中,处理600可以在块607处将新建立的计算内核可执行体加载到相应的计算内核对象中。否则,处理600可以在块609处将所选择的计算内核可执行体加载到内核对象。在一个实施例中,如果计算内核可执行体还未被加载,则处理600可以将计算内核可执行体加载到计算内核对象。在另一实施例中,如果计算内核对象的现有计算内核可执行体中没有与物理计算装置相兼容的计算内核可执行体,并且相应计算内核源不可获得,则处理600可以生成错误消息。
图7是图示出从执行队列中选择计算内核执行实例以在与和该执行实例相关联的逻辑计算装置相对应的一个或多个物理计算装置中执行的处理的一个实施例的流程图。处理700可以作为图5的块513处的处理500的一部分被执行。在一个实施例中,处理700可以在块701处标识执行队列中当前所调度的计算内核执行实例之间的依赖条件。计算内核执行实例的依赖条件可以防止计算内核执行实例的执行,如果该条件未完成的话。在一个实施例中,依赖关系可以是基于由输出流馈送的输入流之间的关系的。在一个实施例中,处理700可以根据执行实例的相应函数的输入流和输出流来检测执行实例之间的依赖关系。在另一个实施例中,具有较低优先级的执行实例可以与具有高优先级的另一执行具有依赖关系。
在块703,在一个实施例中,处理700可以从多个被调度的计算内核执行实例中选择没有任何未完成的依赖条件的计算内核执行实例用于执行。该选择可以是基于被指派给执行实例的优先级的。在一个实施例中,所选择的计算内核执行实例可以与多个计算内核执行实例中的最高优先级相关联而没有未完成的依赖条件。在块705,处理700可以取出与所选择的计算内核执行实例相对应的物理计算装置的当前执行状况。在一个实施例中,物理计算装置的执行状况可以是从预定的存储位置中取出的。在另一实施例中,处理700可以向物理计算装置发送状况请求来接收执行状况报告。处理700可以在块707处基于所取出的执行状况,指派物理计算装置中的一个或多个来执行所选择的计算内核执行实例。在一个实施例中,物理计算装置可以根据与其他物理计算装置的负载均衡而被指派用于执行。所选择的物理计算装置可以与满足预定标准(例如,在预定处理器利用水平和/或存储器利用水平以下)的执行状况相关联。在一个实施例中,预定标准可以依赖于与所选择的计算内核执行实例相关联的线程的数目和线程块的数目。处理700可以将用于相同的执行实例或多个实例的分开的计算内核可执行体加载到一个或多个所指派的物理计算装置,以在多个线程中并行执行。
图8A是图示出建立API(应用编程接口)库的处理的一个实施例的流程图,该处理根据多个物理计算装置将用于一个或多个API的多个可执行体和源存储在库中。处理800A可以在块801处被离线执行以将API函数的源代码加载到数据处理系统中。源代码可以是在一个或多个物理计算装置中所要执行的计算内核源。在一个实施例中,处理800A可以在块803处针对API函数指派多个目标物理计算装置。可以根据类型(例如,CPU或GPU)、版本或供应商来指派目标物理计算装置。处理800A可以在块805处针对各个所指派的目标物理计算装置将源代码编译成可执行体,例如,计算内核可执行体。在一个实施例中,处理800A可以基于在线编译器(例如图1的计算编译器107)来离线执行编译。在块807,处理800A可以将API函数的源代码与针对所指派的目标物理计算装置所编译出的相应可执行体存储到API库中。在一个实施例中,可以存储各个可执行体与描述数据,描述数据例如包括目标物理计算装置的类型、版本和供应商和/或编译选项。通过运行时期间的处理(例如,图5的处理500)可以取出描述数据。
图8B是图示出应用执行多个可执行体中的一个和基于API请求从API库所取出的相应源的处理的一个实施例的流程图。在一个实施例中,处理800B在包括API库(例如,图1的计算应用库105)的数据处理系统中(例如,图1的托管系统101中)运行应用程序(例如,图1的应用103)。在块811处,处理800B可以基于API请求从API库中取出源(例如,计算内核源)和一个或多个相应可执行体(例如,计算内核可执行体),例如图5的块507处的处理500。各个可执行体可以与一个或多个目标物理计算装置相关联。在一个实施例中,计算内核可执行体可以与多种版本的物理计算装置后向兼容。在块813处,处理800B可以在多个物理计算装置中执行基于API请求所取出的可执行体中的一个来执行相关联的API函数,例如图5的块517处的处理500。处理800B可以与在块813处执行API函数异步地在块809处执行应用。
图9是图示出多个物理计算装置中所要执行的计算内核可执行体的计算内核源的示例的样本源代码。示例900可以是具有包括变量901和流903的自变量(arguments)的API函数。示例900可以是基于诸如图1的系统101之类的并行计算环境的编程语言。在一个实施例中,可以利用被设计来实现在此所述实施例中的一个或多个实施例的附加扩展和限制,根据ANSI(美国国家标准学会)C标准来指定并行编程语言。这些扩展可以包括用来指定计算装置中所要执行的计算内核函数的函数限定符(qualifier),例如限定符905。计算内核函数可以不由其它计算内核函数调用。在一个实施例中,可以由并行程序语言的主函数(host function)来调用计算内核函数。主函数可以是常规的ANSI C函数。主函数可以在与执行计算内核函数的计算装置相分离的主处理器中被执行。在一个实施例中,这些扩展可以包括本地限制符,以描述需要被分配到与由线程块的所有线程共享的计算装置相关联的本地存储器中的变量。可以在计算内核函数内部声明本地限制符。对并行编程语言的限制可以在编译器时间或运行时间期间被增强以在这些限制被违反时,生成错误状况,例如,输出错误消息或退出执行。
图10是图示出通过调用API来配置用于在多个物理计算装置中计算多个可执行体中的一个的逻辑计算装置的示例的样本源代码。示例1000可以由附接了多个物理计算装置的主机系统(例如,图1的托管系统101)中运行的应用来执行。示例1000可以指定并行编程语言的主函数。示例1000中的处理操作可以通过诸如图5的处理500之类的处理、作为API调用被执行。分配流1001和加载流图像1003的处理操作可以通过图5的块501处的处理500被执行。创建计算内核对象1005的处理操作可以通过图5的块503处的处理500被执行。处理操作1007可以将诸如图9的示例900之类的计算内核源加载到所创建出的计算内核对象。处理操作1009可以从所加载的计算内核源中显式地建立计算内核可执行体。在一个实施例中,处理操作1009可以将所建立的计算内核可执行体加载到所创建的计算内核对象。随后,处理操作1011可以显式地选择所建立的计算内核可执行体以用于执行所创建的计算内核对象。
在一个实施例中,处理操作1013可以附加变量和流作为所创建的计算内核对象的函数自变量。处理操作1013可以通过图5的框505处的处理500被执行。处理操作1015可以执行所创建的计算内核对象。在一个实施例中,处理操作1015可以通过图5的块511处的处理500被执行。处理操作1015可以使得执行队列被利用与所创建的计算内核对象相应的计算内核执行实例而被更新。处理操作1017可以同步地等待所创建的计算内核对象的执行的完成。在一个实施例中,处理操作1019可以从计算内核对象的执行中取出结果。随后,处理操作1021可以清理所分配的用于执行计算内核对象的资源,例如事件对象、所创建的计算内核对象和所分配的存储器。在一个实施例中,处理操作1017可以基于内核事件对象是否被设置。处理操作1017可以通过图5的块519处的处理500被执行。
图11示出可以与本发明一个实施例一起使用的计算机系统的一个示例。首先,系统1100可以被实现为图1中所示的系统的一部分。注意,尽管图11图示出计算机系统的各种组件,但是其不意图代表互连这些组件的任何具体的体系结构或方式,因为这些细节对于本发明并没有密切的关系。还要明白,还可以与具有更少组件或可能更多组件的网络计算机和其他数据处理系统(例如,手持计算机、个人数字助理(PDA)、蜂窝电话、娱乐系统、消费电子设备等)一起来实现本发明的一个或多个实施例。
如图11中所示,作为一种形式的数据处理系统的计算机系统1101包括:耦合到诸如CPU和/或GPU之类的(一个或多个)微处理器1105的总线1103、ROM(只读存储器)1107、易失性RAM 1109和非易失性存储器1111。微处理器1103可以从存储器1107、1109、1111取出指令并且执行这些指令来执行上述操作。总线1103将这各种组件互连到一起,并且还将这些组件1105、1107、1109和1111与显示控制器和显示装置1113以及外围装置互连,外围装置例如是可以是鼠标、键盘、调制解调器、网络接口、打印机的输入/输出(I/O)装置和本领域公知的其他装置。通常输入/输出装置915通过输入/输出控制器1117耦合到该系统。易失性RAM(随机存取存储器)1109通常被实现为持续地需要电力以刷新或维护存储器中的数据的动态RAM(DRAM)。与显示装置1108耦合的显示控制器可以可选地包括一个或多个GPU来处理显示数据。可选地,可以提供GPU存储器1111来支持显示装置1108中所包括的GPU。
海量存储装置1111通常是在即使电力被从系统移除后仍然能够维护数据(例如,大量数据)的磁硬盘驱动器或磁光驱或光驱或DVD RAM或闪存或其它类型的存储系统。通常,海量存储装置1111也将可以是随机存取存储器,尽管这不被要求。尽管图11示出海量存储装置1111是直接耦合到数据处理系统中的其余组件的本地装置,然而,将明白,本发明可以利用远离该系统的非易失性存储器,例如通过诸如调制解调器或以太网接口或无线连网接口之类的网络接口耦合到数据处理系统的网络存储装置。总线1103可以包括通过本领域公知的各种桥接器、控制器和/或适配器相互连接的一个或多个总线。
可以利用诸如专用逻辑电路之类的逻辑电路或利用微控制器或执行程序代码指令的其他形式的处理核心来实现上述内容的部分。因此,可以利用诸如机器可执行指令之类的程序代码来执行通过上述讨论所教导的处理,机器可执行指令使得执行这些指令的机器执行某些功能。在该上下文中,“机器”可以是将中间形式(或“抽象”)指令转换成处理器指定指令(例如,诸如“虚拟机”(例如,Java虚拟机)、解释程序、共通语言运行时(Common Language Runtime)、高级语言虚拟机等的抽象执行环境)和/或被设计来执行指令的半导体芯片(例如,用晶体管实现的“逻辑电路”)上所部署的电子电路,例如专用处理器和/或通用处理器。通过以上讨论所教导的处理还可以由被设计来执行这些处理(或这些处理的一部分)的电子电路(代替机器或与机器结合)来执行,而不用执行程序代码。
制造品可以被用来存储程序代码。存储程序代码的制造品可以被实现为,但不限于,适于存储电子指令的一个或多个存储器(例如,一个或多个闪存、随机存取存储器(静态、动态或其它))、光盘、CD-ROM、DVD ROM、EPROM、EEPROM、磁的或光的卡或其它类型的机器可读介质。也可以(例如经由通信链路(例如,网络连接))通过传播介质中所实现的数据信号来从远程计算机(例如,服务器)将程序代码下载到请求计算机(例如,客户端)。
按照对计算机存储器内的数据比特的操作的算法和符号表述表示了先前的详细描述。这些算法描述和表述是数据处理领域中的那些技术人员向本领域其它技术人员最有效地传达它们工作的基本内容所使用工具。这里,算法一般被设想为导致所希望的结果的自洽操作序列。这些操作是需要对物理量的物理操作的那些操作。通常,但不一定是必须的,这些量采用能够被存储、被转送、被组合、被比较或以其他方式被操作的电信号或磁信号的形式。有时候,特别是为了共同使用的原由,已被证实将这些信号提作比特、值、元素、符号、字符、术语、数字等是方便的。
然而,应该注意的是,所有这些以及相似的术语中的全部术语与适当地物理量相关联并且仅仅是适用这些量的方便标签。除非特别指明或者以其他方式从以上讨论显而易见,可以明白,在整个说明书中,利用诸如“处理”或“计算”或“判断”或“显示”等的术语的讨论,涉及计算机系统或类似的电子计算装置的动作和处理,计算机系统或类似的电子计算装置操作被表示为计算机系统的寄存器和存储器内的物理(电子)量的数据并且将它们变换成被类似地表示为计算机系统存储器或寄存器或其它这样的信息存储装置、发送或显示装置内的物理量的数据。
本发明还涉及用于执行在此所述的操作的设备。该设备可以被特别构建用于所需要的目的,或其可以包括被计算机内所存储的计算机程序有选择地激活或重新配置的通用计算机。这样的计算机程序可以被存储在计算机可读存储介质中,计算机可读存储介质例如是但不限于任何类型的盘(包括软盘、光盘、CD-ROM和磁光盘、只读存储器(ROM)、RAM、EPROM、EEPROM、磁卡或光卡)或适于存储电子指令的任何类型的介质,并且它们各自耦合到计算机系统总线。
这里表示的处理和显示不是固有地与任何具体计算机或其它设备有关。各自通用系统可以与根据在此的教导的程序一起使用,或者可以证实构建更加专门的设备来执行所述操作是方便的。从以下描述中,用于各种这样的系统的所需要的结构是明显的。此外,本发明并不是关于任何具体编程语言来描述的。可以理解,各种编程语言都可以用来实现如在这里所述的发明的教导。
以上讨论仅仅描述了本发明的某些示例性实施例。本领域技术人员将容易从这样的讨论认识到,可以对附图和权利要求进行各种修改而不偏离本发明的精神和范围。

Claims (44)

1.一种计算机实现的方法,包括:
在第一处理单元中运行的应用程序运行时期间,响应于来自所述应用程序的具有需求的第一API(应用程序接口)请求,根据所述需求选择第二处理单元;
在运行时期间,响应于来自所述应用程序的第二API请求,为所选择的第二处理单元加载一个或多个可执行体以执行所述应用程序的数据处理任务,其中,所述一个或多个可执行体包括描述数据;并且
在运行时期间,响应于来自所述应用程序的第三API请求,为所述第二处理单元执行所述一个或多个可执行体中的一个可执行体,其中,所述一个可执行体的执行是基于所述描述数据;
其中选择所述一个可执行体以用于执行是基于所述描述数据的,
其中所述一个可执行体基于所述描述数据而与所述第二处理单元的一个或者多个可执行体中的最新的版本相关联,并且
其中所述一个可执行体与所述第二处理单元后向兼容。
2.根据权利要求1所述的计算机实现的方法,其中所述第一处理单元和所述第二处理单元是中央处理单元CPU或图形处理单元GPU。
3.根据权利要求1所述的计算机实现的方法,其中所述一个或多个可执行体中的所述一个可执行体在运行时期间编译。
4.根据权利要求1所述的计算机实现的方法,其中所述描述数据包括所支持的处理单元的版本和类型,并且其中所述选择是基于所述描述数据进行的。
5.根据权利要求1所述的计算机实现的方法,其中所述一个或多个可执行体包括源,所述源被编译来生成所述一个或多个可执行体。
6.根据权利要求5所述的计算机实现的方法,其中所述源是经由所述第二API从所述应用程序加载的。
7.根据权利要求5所述的计算机实现的方法,其中所述源是从与所述一个或多个可执行体相关联的库加载的。
8.根据权利要求5所述的计算机实现的方法,其中所述加载包括:
比较所述描述数据和所述第二处理单元的信息;以及
为所述第二处理单元,从所述源在线编译出所述一个或多个可执行体中的所述一个可执行体。
9.根据权利要求8所述的计算机实现的方法,其中所述一个或多个可执行体中的所述一个可执行体与所述第一API请求相关联。
10.根据权利要求8所述的计算机实现的方法,其中所述编译基于:所述比较指示所述一个或多个可执行体中的至少一个可执行体并非对于所述第二处理单元是最优的。
11.根据权利要求8所述的计算机实现的方法,其中所述编译基于:所述比较指示所述一个或多个可执行体中的至少一个可执行体不支持所述第二处理单元。
12.根据权利要求8所述的计算机实现的方法,其中所述编译包括:
生成所述一个或多个可执行体中的所述一个可执行体的更新后的描述数据,所述更新后的描述数据包括所述第二处理单元的版本;以及
存储所述一个或多个可执行体中的所述一个可执行体,所述一个或多个可执行体中的所述一个可执行体包括所述更新后的描述数据。
13.根据权利要求12所述的计算机实现的方法,其中所述一个或多个可执行体中的所述一个可执行体被存储来替换所述一个或多个可执行体中的至少一个可执行体。
14.根据权利要求1所述的计算机实现的方法,其中选择第二处理单元包括创建表示所述第二处理单元的计算内核对象,并且其中,所述执行基于与所述计算内核对象相关联的执行实例。
15.根据权利要求14所述的计算机实现的方法,其中所述执行根据执行队列定序,并且所述方法还包括:
利用所述执行实例更新所述执行队列;以及
从所述执行队列中选择所述执行实例以用于执行。
16.根据权利要求15所述的计算机实现的方法,其中所述执行队列存储所述执行实例和一个或者多个其他执行实例,并且其中,所选择的执行实例不依赖于其他执行实例。
17.一种计算机实现的方法,包括:
在第一处理单元中运行的应用程序的运行时期间,从所述应用程序生成具有需求的第一API(应用程序接口)请求以选择第二处理单元;
在运行时期间,从在所述第一处理单元中运行的所述应用程序生成第二API请求,用来为所选择的第二处理单元加载一个或多个可执行体以执行所述应用程序的数据处理任务;以及
在运行时期间,从所述应用程序生成第三API请求,用来在所述第二处理单元中执行从所述一个或多个可执行体中选择的可执行体;
其中所述一个或者多个可执行体包括描述数据,其中所述可执行体是基于所述描述数据而选择的,
其中所述可执行体基于所述描述数据而与所述第二处理单元的一个或者多个可执行体中的最新的版本相关联,并且
其中所述可执行体与所述第二处理单元后向兼容。
18.根据权利要求17所述的计算机实现的方法,其中所述第一处理单元和所述第二处理单元是中央处理单元CPU或图形处理单元GPU。
19.根据权利要求17所述的计算机实现的方法,其中所述第一API请求与从中编译出所述一个或多个可执行体的源相关联。
20.根据权利要求19所述的计算机实现的方法,其中所述可执行体是从所述源被离线编译出的。
21.根据权利要求17所述的计算机实现的方法,其中所述可执行体在运行时期间编译。
22.根据权利要求17所述的计算机实现的方法,其中对于所选择的可执行体,所述描述数据包括与所述第二处理单元兼容的版本和类型。
23.一种数据处理系统,包括:
用于在第一处理单元中运行的应用程序的运行时期间响应于来自所述应用程序的具有需求的第一API(应用程序接口)请求根据所述需求选择第二处理单元的装置;
用于在运行时期间响应于来自索书号应用程序的第二API请求,为所选择的第二处理单元加载一个或多个可执行体以执行所述应用程序的数据处理任务的装置,其中,所述一个或者多个可执行体包括描述数据;以及
用于在运行时期间响应于来自所述应用程序的第三API请求,为所述第二处理单元执行所述一个或多个可执行体中的一个可执行体的装置,其中,所述一个可执行体的执行是基于所述描述数据,
其中选择所述一个可执行体以用于执行是基于所述描述数据的,
其中所述一个可执行体基于所述描述数据而与所述第二处理单元的一个或者多个可执行体中的最新的版本相关联,并且
其中所述一个可执行体与所述第二处理单元后向兼容。
24.根据权利要求23所述的数据处理系统,其中所述第一处理单元和所述第二处理单元是中央处理单元CPU或图形处理单元GPU。
25.根据权利要求23所述的数据处理系统,其中所述一个或多个可执行体中的一个可执行体在运行时期间编译。
26.根据权利要求23所述的数据处理系统,其中所述描述数据包括所支持的处理单元的版本和类型。
27.根据权利要求23所述的数据处理系统,其中所述一个或多个可执行体包括源,所述源被编译来生成所述一个或多个可执行体。
28.根据权利要求27所述的数据处理系统,其中所述源是经由所述第二API从所述应用程序加载的。
29.根据权利要求27所述的数据处理系统,其中所述源是从与所述一个或多个可执行体相关联的库加载的。
30.根据权利要求27所述的数据处理系统,其中所述用于加载的装置包括:
用于比较所述描述数据和所述第二处理单元的信息的装置;以及
用于为所述第二处理单元,从所述源在线编译出所述一个或多个可执行体中的所述一个可执行体的装置。
31.根据权利要求30所述的数据处理系统,其中所述一个或多个可执行体中的所述一个可执行体与所述第一API请求相关联。
32.根据权利要求30所述的数据处理系统,其中所述编译基于:所述比较指示所述一个或多个可执行体中的至少一个可执行体并非对于所述第二处理单元是最优的。
33.根据权利要求30所述的数据处理系统,其中所述编译基于:所述比较指示所述一个或多个可执行体中的至少一个可执行体不支持所述第二处理单元。
34.根据权利要求30所述的数据处理系统,其中所述用于编译的装置包括:
用于生成所述一个或多个可执行体中的所述一个可执行体的更新后的描述数据的装置,所述更新后的描述数据包括所述第二处理单元的版本;以及
用于存储所述一个或多个可执行体中的所述一个可执行体的装置,所述一个或多个可执行体中的所述一个可执行体包括所述更新后的描述数据。
35.根据权利要求34所述的数据处理系统,其中所述一个或多个可执行体中的所述一个可执行体被存储来替换所述一个或多个可执行体中的所至少一个可执行体。
36.根据权利要求23所述的数据处理系统,其中选择第二处理单元包括创建表示所述第二处理单元的计算内核对象,并且其中,所述执行基于与所述计算内核对象相关联的执行实例。
37.根据权利要求36所述的数据处理系统,其中所述执行根据执行队列定序,并且还包括:
用于利用所述执行实例更新所述执行队列的装置;以及
用于从所述执行队列中选择所述执行实例以用于执行的装置。
38.根据权利要求37所述的数据处理系统,其中所述执行队列存储所述执行实例和一个或者多个其他执行实例,并且其中,在没有对其他执行实例的依赖条件的情况下选择所述执行实例。
39.一种数据处理系统,包括:
用于在第一处理单元中运行的应用程序运行时期间从所述应用程序生成具有需求的第一API(应用程序接口)请求以选择第二处理单元的装置;
用于在运行时期间从在所述第一处理单元中运行的所述应用程序生成第二API请求,用来为所选择的第二处理单元加载一个或多个可执行体以执行所述应用程序的数据处理任务的装置;以及
用于在运行时期间从所述应用程序生成第三API请求,用来在所述第二处理单元中执行从所述一个或者多个可执行体中选择的可执行体的装置,
其中所述一个或者多个可执行体包括描述数据,其中选择所述可执行体是基于所述描述数据的,
其中所述可执行体基于所述描述数据而与所述第二处理单元的一个或者多个可执行体中的最新的版本相关联,并且
其中所述可执行体与所述第二处理单元后向兼容。
40.根据权利要求39所述的数据处理系统,其中所述第一处理单元和所述第二处理单元是中央处理单元CPU或图形处理单元GPU。
41.根据权利要求39所述的数据处理系统,其中所述第一API请求与从中编译出所述一个或多个可执行体的源相关联。
42.根据权利要求41所述的数据处理系统,其中所述可执行体是从所述源被离线编译出的。
43.根据权利要求39所述的数据处理系统,其中所述可执行体在运行时期间编译。
44.根据权利要求39所述的数据处理系统,其中对于所述可执行体,所述描述数据包括与所述第二处理单元兼容的版本和类型。
CN200880011684.8A 2007-04-11 2008-04-09 多处理器上的并行运行时执行 Active CN101802789B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410187203.6A CN103927150B (zh) 2007-04-11 2008-04-09 多处理器上的并行运行时执行

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US92303007P 2007-04-11 2007-04-11
US60/923,030 2007-04-11
US92562007P 2007-04-20 2007-04-20
US60/925,620 2007-04-20
US11/800,319 2007-05-03
US11/800,319 US8286196B2 (en) 2007-05-03 2007-05-03 Parallel runtime execution on multiple processors
PCT/US2008/004652 WO2008127623A2 (en) 2007-04-11 2008-04-09 Parallel runtime execution on multiple processors

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN201410187203.6A Division CN103927150B (zh) 2007-04-11 2008-04-09 多处理器上的并行运行时执行

Publications (2)

Publication Number Publication Date
CN101802789A CN101802789A (zh) 2010-08-11
CN101802789B true CN101802789B (zh) 2014-05-07

Family

ID=39940513

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200880011684.8A Active CN101802789B (zh) 2007-04-11 2008-04-09 多处理器上的并行运行时执行

Country Status (5)

Country Link
US (6) US8286196B2 (zh)
EP (2) EP2146283B1 (zh)
CN (1) CN101802789B (zh)
AU (1) AU2008239697B2 (zh)
WO (1) WO2008127623A2 (zh)

Families Citing this family (174)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8341611B2 (en) 2007-04-11 2012-12-25 Apple Inc. Application interface on multiple processors
US11836506B2 (en) 2007-04-11 2023-12-05 Apple Inc. Parallel runtime execution on multiple processors
US8276164B2 (en) 2007-05-03 2012-09-25 Apple Inc. Data parallel computing on multiple processors
EP3413198A1 (en) 2007-04-11 2018-12-12 Apple Inc. Data parallel computing on multiple processors
US8286196B2 (en) 2007-05-03 2012-10-09 Apple Inc. Parallel runtime execution on multiple processors
US8448193B2 (en) * 2007-04-27 2013-05-21 Ricoh Company, Ltd. Image forming device, information processing method, and information processing program
US20080276252A1 (en) * 2007-05-04 2008-11-06 Microsoft Corporation Kernel event visualization
US8861591B2 (en) * 2007-05-11 2014-10-14 Advanced Micro Devices, Inc. Software video encoder with GPU acceleration
US8233527B2 (en) 2007-05-11 2012-07-31 Advanced Micro Devices, Inc. Software video transcoder with GPU acceleration
US8140608B1 (en) 2007-05-31 2012-03-20 Nvidia Corporation Pipelined integer division using floating-point reciprocal
US9536275B1 (en) 2007-07-31 2017-01-03 Nvidia Corporation Using a geometry shader for variable input and output algorithms
US8473948B1 (en) 2007-08-08 2013-06-25 Nvidia Corporation Method for synchronizing independent cooperative thread arrays running on a graphics processing unit
US7877573B1 (en) 2007-08-08 2011-01-25 Nvidia Corporation Work-efficient parallel prefix sum algorithm for graphics processing units
US7725518B1 (en) 2007-08-08 2010-05-25 Nvidia Corporation Work-efficient parallel prefix sum algorithm for graphics processing units
US8370845B1 (en) 2007-08-08 2013-02-05 Nvidia Corporation Method for synchronizing independent cooperative thread arrays running on a graphics processing unit
US7689541B1 (en) 2007-08-09 2010-03-30 Nvidia Corporation Reordering data using a series of offsets
US8094157B1 (en) 2007-08-09 2012-01-10 Nvidia Corporation Performing an occurence count of radices
US8996846B2 (en) 2007-09-27 2015-03-31 Nvidia Corporation System, method and computer program product for performing a scan operation
US8284188B1 (en) 2007-10-29 2012-10-09 Nvidia Corporation Ray tracing system, method, and computer program product for simultaneously traversing a hierarchy of rays and a hierarchy of objects
US8264484B1 (en) 2007-10-29 2012-09-11 Nvidia Corporation System, method, and computer program product for organizing a plurality of rays utilizing a bounding volume
US8065288B1 (en) 2007-11-09 2011-11-22 Nvidia Corporation System, method, and computer program product for testing a query against multiple sets of objects utilizing a single instruction multiple data (SIMD) processing architecture
US8281294B1 (en) * 2007-11-12 2012-10-02 Nvidia Corporation System and method for representing and managing a multi-architecture co-processor application program
US8276132B1 (en) * 2007-11-12 2012-09-25 Nvidia Corporation System and method for representing and managing a multi-architecture co-processor application program
US8347310B1 (en) 2007-11-12 2013-01-01 Nvidia Corporation System and method for representing and managing a multi-architecure co-processor application program
US8661226B2 (en) 2007-11-15 2014-02-25 Nvidia Corporation System, method, and computer program product for performing a scan operation on a sequence of single-bit values using a parallel processor architecture
US8243083B1 (en) 2007-12-04 2012-08-14 Nvidia Corporation System, method, and computer program product for converting a scan algorithm to a segmented scan algorithm in an operator-independent manner
US8773422B1 (en) 2007-12-04 2014-07-08 Nvidia Corporation System, method, and computer program product for grouping linearly ordered primitives
US8417735B1 (en) 2007-12-12 2013-04-09 Nvidia Corporation Instruction-efficient algorithm for parallel scan using initialized memory regions to replace conditional statements
US8413151B1 (en) 2007-12-19 2013-04-02 Nvidia Corporation Selective thread spawning within a multi-threaded processing system
US8219371B1 (en) 2008-01-21 2012-07-10 Nvidia Corporation Computing inter-atom forces between atoms in a protein
US8938485B1 (en) 2008-02-12 2015-01-20 Nvidia Corporation Integer division using floating-point reciprocal
US8095746B1 (en) 2008-02-13 2012-01-10 Nvidia Corporation Conserving and shaping address space with arrays
US7945757B1 (en) 2008-02-13 2011-05-17 Nvidia Corporation Conserving and shaping address space with arrays
US8539516B1 (en) 2008-02-14 2013-09-17 Nvidia Corporation System and method for enabling interoperability between application programming interfaces
US8402229B1 (en) * 2008-02-14 2013-03-19 Nvidia Corporation System and method for enabling interoperability between application programming interfaces
US8392669B1 (en) 2008-03-24 2013-03-05 Nvidia Corporation Systems and methods for coalescing memory accesses of parallel threads
US8055856B2 (en) 2008-03-24 2011-11-08 Nvidia Corporation Lock mechanism to enable atomic updates to shared memory
US8200947B1 (en) 2008-03-24 2012-06-12 Nvidia Corporation Systems and methods for voting among parallel threads
US8312254B2 (en) 2008-03-24 2012-11-13 Nvidia Corporation Indirect function call instructions in a synchronous parallel thread processor
US8086806B2 (en) 2008-03-24 2011-12-27 Nvidia Corporation Systems and methods for coalescing memory accesses of parallel threads
US9678775B1 (en) 2008-04-09 2017-06-13 Nvidia Corporation Allocating memory for local variables of a multi-threaded program for execution in a single-threaded environment
US8776030B2 (en) 2008-04-09 2014-07-08 Nvidia Corporation Partitioning CUDA code for execution by a general purpose processor
US8286198B2 (en) 2008-06-06 2012-10-09 Apple Inc. Application programming interfaces for data parallel computing on multiple processors
US8225325B2 (en) 2008-06-06 2012-07-17 Apple Inc. Multi-dimensional thread grouping for multiple processors
US8151095B1 (en) 2008-07-18 2012-04-03 Nvidia Corporation System and method for context migration across CPU threads
US9542192B1 (en) 2008-08-15 2017-01-10 Nvidia Corporation Tokenized streams for concurrent execution between asymmetric multiprocessors
US9477570B2 (en) * 2008-08-26 2016-10-25 Red Hat, Inc. Monitoring software provisioning
US8959497B1 (en) 2008-08-29 2015-02-17 Nvidia Corporation System and method for dynamically spawning thread blocks within multi-threaded processing systems
US8615770B1 (en) 2008-08-29 2013-12-24 Nvidia Corporation System and method for dynamically spawning thread blocks within multi-threaded processing systems
US8310494B2 (en) * 2008-09-30 2012-11-13 Apple Inc. Method for reducing graphics rendering failures
US8279229B1 (en) * 2008-10-27 2012-10-02 Nvidia Corporation System, method, and computer program product for providing access to graphics processor CPU cores, to both a graphics processor and a CPU
US20100125740A1 (en) * 2008-11-19 2010-05-20 Accenture Global Services Gmbh System for securing multithreaded server applications
US8321492B1 (en) 2008-12-11 2012-11-27 Nvidia Corporation System, method, and computer program product for converting a reduction algorithm to a segmented reduction algorithm
US8570333B2 (en) 2008-12-11 2013-10-29 Nvidia Corporation Method and system for enabling managed code-based application program to access graphics processing unit
US20100191814A1 (en) * 2008-12-23 2010-07-29 Marco Heddes System-On-A-Chip Employing A Network Of Nodes That Utilize Receive Side Flow Control Over Channels For Messages Communicated Therebetween
US8645634B1 (en) 2009-01-16 2014-02-04 Nvidia Corporation Zero-copy data sharing by cooperating asymmetric coprocessors
US8655937B1 (en) 2009-04-29 2014-02-18 Nvidia Corporation High precision integer division using low precision hardware operations and rounding techniques
US8395631B1 (en) 2009-04-30 2013-03-12 Nvidia Corporation Method and system for sharing memory between multiple graphics processing units in a computer system
US9547535B1 (en) 2009-04-30 2017-01-17 Nvidia Corporation Method and system for providing shared memory access to graphics processing unit processes
US8539456B2 (en) * 2009-06-30 2013-09-17 Intel Corporation Automatic conversion of MPI source code programs into MPI thread-based programs
US8564616B1 (en) 2009-07-17 2013-10-22 Nvidia Corporation Cull before vertex attribute fetch and vertex lighting
US8542247B1 (en) 2009-07-17 2013-09-24 Nvidia Corporation Cull before vertex attribute fetch and vertex lighting
US9354944B2 (en) * 2009-07-27 2016-05-31 Advanced Micro Devices, Inc. Mapping processing logic having data-parallel threads across processors
WO2011023203A1 (en) * 2009-08-24 2011-03-03 Abb Technology Ag Improved execution of real time applications with an automation controller
US8667200B1 (en) 2009-09-22 2014-03-04 Nvidia Corporation Fast and highly scalable quota-based weighted arbitration
US8683089B1 (en) 2009-09-23 2014-03-25 Nvidia Corporation Method and apparatus for equalizing a bandwidth impedance mismatch between a client and an interface
US8595425B2 (en) 2009-09-25 2013-11-26 Nvidia Corporation Configurable cache for multiple clients
US8271763B2 (en) 2009-09-25 2012-09-18 Nvidia Corporation Unified addressing and instructions for accessing parallel memory spaces
US8335892B1 (en) 2009-09-28 2012-12-18 Nvidia Corporation Cache arbitration between multiple clients
US8266383B1 (en) 2009-09-28 2012-09-11 Nvidia Corporation Cache miss processing using a defer/replay mechanism
US8250439B1 (en) 2009-09-28 2012-08-21 Nvidia Corporation ECC bits used as additional register file storage
US8321761B1 (en) 2009-09-28 2012-11-27 Nvidia Corporation ECC bits used as additional register file storage
US8266382B1 (en) 2009-09-28 2012-09-11 Nvidia Corporation Cache interface protocol including arbitration and hints
US8301980B2 (en) 2009-09-28 2012-10-30 Nvidia Corporation Error detection and correction for external DRAM
US8190974B2 (en) 2009-09-28 2012-05-29 Nvidia Corporation Error detection and correction for external DRAM
US8411103B1 (en) 2009-09-29 2013-04-02 Nvidia Corporation Processing global atomic operations using the bending unit datapath
US8522000B2 (en) 2009-09-29 2013-08-27 Nvidia Corporation Trap handler architecture for a parallel processing unit
US8687590B2 (en) * 2009-10-02 2014-04-01 Blackberry Limited System and method for handover between relays
US8976195B1 (en) 2009-10-14 2015-03-10 Nvidia Corporation Generating clip state for a batch of vertices
US8384736B1 (en) 2009-10-14 2013-02-26 Nvidia Corporation Generating clip state for a batch of vertices
KR20110116553A (ko) * 2010-04-19 2011-10-26 삼성전자주식회사 미디어 프로세싱 애플리케이션 실행 장치 및 방법
US9141422B2 (en) 2010-05-18 2015-09-22 Microsoft Technology Licensing, Llc Plug-in task scheduler
US20110292057A1 (en) * 2010-05-26 2011-12-01 Advanced Micro Devices, Inc. Dynamic Bandwidth Determination and Processing Task Assignment for Video Data Processing
US20120036301A1 (en) * 2010-08-03 2012-02-09 Caspole Eric R Processor support for filling memory regions
US8739171B2 (en) * 2010-08-31 2014-05-27 International Business Machines Corporation High-throughput-computing in a hybrid computing environment
US8914805B2 (en) * 2010-08-31 2014-12-16 International Business Machines Corporation Rescheduling workload in a hybrid computing environment
US8830245B2 (en) * 2010-12-14 2014-09-09 Amazon Technologies, Inc. Load balancing between general purpose processors and graphics processors
US9645854B2 (en) * 2010-12-15 2017-05-09 Advanced Micro Devices, Inc. Dynamic work partitioning on heterogeneous processing devices
US8762972B2 (en) * 2011-02-08 2014-06-24 Nokia Corporation Methods and apparatuses for facilitating execution of applications requiring runtime compilation
JP5626038B2 (ja) * 2011-03-09 2014-11-19 富士通株式会社 設計装置,設計プログラムおよび設計方法
WO2012141677A1 (en) * 2011-04-11 2012-10-18 Hewlett-Packard Development Company, L.P. Performing a task in a system having different types of hardware resources
US8695013B2 (en) * 2011-04-15 2014-04-08 Siemens Product Lifecycle Management Software Inc. System and method for thread protected testing
US8935683B2 (en) 2011-04-20 2015-01-13 Qualcomm Incorporated Inline function linking
US8468507B2 (en) 2011-06-10 2013-06-18 Microsoft Corporation Binding executable code at runtime
US8533698B2 (en) 2011-06-13 2013-09-10 Microsoft Corporation Optimizing execution of kernels
US8990515B2 (en) * 2011-06-14 2015-03-24 Microsoft Technology Licensing, Llc Aliasing buffers
WO2012174334A1 (en) * 2011-06-16 2012-12-20 Caustic Graphics, Inc. Graphics processor with non-blocking concurrent architecture
WO2013010159A1 (en) * 2011-07-14 2013-01-17 Siemens Corporation Reducing the scan cycle time of control applications through multi-core execution of user programs
US8789026B2 (en) * 2011-08-02 2014-07-22 International Business Machines Corporation Technique for compiling and running high-level programs on heterogeneous computers
CN102354289B (zh) * 2011-09-21 2012-10-10 苏州大学 一种并发事务的调度方法和相关装置
CN102521050A (zh) * 2011-12-02 2012-06-27 曙光信息产业(北京)有限公司 一种面向cpu和gpu的混合调度方法
CN103150463A (zh) * 2011-12-06 2013-06-12 曙光信息产业股份有限公司 分子动力学计算的实现方法和装置
US9830133B1 (en) * 2011-12-12 2017-11-28 Significs And Elements, Llc Methods and apparatus for automatic communication optimizations in a compiler based on a polyhedral representation
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
WO2013097098A1 (zh) * 2011-12-27 2013-07-04 华为技术有限公司 数据处理方法、图形处理器gpu及第一节点设备
US9424089B2 (en) * 2012-01-24 2016-08-23 Samsung Electronics Co., Ltd. Hardware acceleration of web applications
US20150088974A1 (en) * 2012-03-10 2015-03-26 Evado Holdings Pty Ltd Method and System of Application Development for Multiple Device Client Platforms
US9280395B2 (en) 2012-05-30 2016-03-08 Intel Corporation Runtime dispatching among a heterogeneous group of processors
WO2014046974A2 (en) 2012-09-20 2014-03-27 Case Paul Sr Case secure computer architecture
FR2996037B1 (fr) * 2012-09-24 2015-05-29 Allegorithmic Moteur hybride pour processeur central et processeur graphique
US10270709B2 (en) * 2015-06-26 2019-04-23 Microsoft Technology Licensing, Llc Allocating acceleration component functionality for supporting services
KR20140054948A (ko) * 2012-10-30 2014-05-09 한국전자통신연구원 임베디드 시스템을 위한 오픈씨엘 응용 소프트웨어 개발 지원 도구 구성 및 방법
US9069766B2 (en) * 2012-11-02 2015-06-30 Microsoft Technology Licensing, Llc Content-based isolation for computing device security
US9727338B2 (en) * 2012-11-05 2017-08-08 Nvidia Corporation System and method for translating program functions for correct handling of local-scope variables and computing system incorporating the same
US20150009222A1 (en) 2012-11-28 2015-01-08 Nvidia Corporation Method and system for cloud based virtualized graphics processing for remote displays
US11082490B2 (en) 2012-11-28 2021-08-03 Nvidia Corporation Method and apparatus for execution of applications in a cloud system
US9665921B2 (en) * 2012-12-29 2017-05-30 Futurewei Technologies, Inc. Adaptive OpenGL 3D graphics in virtual desktop infrastructure
CN103164839B (zh) 2013-03-07 2019-06-21 华为技术有限公司 一种绘图方法、装置及终端
KR101694302B1 (ko) * 2013-03-11 2017-01-23 한국전자통신연구원 이기종 멀티코어 프로세서 시스템의 관리 장치 및 방법
RU2538920C2 (ru) * 2013-05-06 2015-01-10 Общество с ограниченной ответственностью "Аби ИнфоПоиск" Способ распределения задач сервером вычислительной системы, машиночитаемый носитель информации и система для реализации способа
IL232836A0 (en) * 2013-06-02 2014-08-31 Rocketick Technologies Ltd Efficient parallel computation of dependency problems
US9842532B2 (en) 2013-09-09 2017-12-12 Nvidia Corporation Remote display rendering for electronic devices
CN103678005B (zh) * 2013-12-31 2015-04-22 税友软件集团股份有限公司 一种负载均衡控制方法及装置
US9632761B2 (en) * 2014-01-13 2017-04-25 Red Hat, Inc. Distribute workload of an application to a graphics processing unit
US9886736B2 (en) 2014-01-20 2018-02-06 Nvidia Corporation Selectively killing trapped multi-process service clients sharing the same hardware context
US10152312B2 (en) * 2014-01-21 2018-12-11 Nvidia Corporation Dynamic compiler parallelism techniques
US9547553B1 (en) 2014-03-10 2017-01-17 Parallel Machines Ltd. Data resiliency in a shared memory pool
US11243816B2 (en) 2014-03-30 2022-02-08 UniversiteitGent Program execution on heterogeneous platform
US9781027B1 (en) 2014-04-06 2017-10-03 Parallel Machines Ltd. Systems and methods to communicate with external destinations via a memory network
US9690713B1 (en) 2014-04-22 2017-06-27 Parallel Machines Ltd. Systems and methods for effectively interacting with a flash memory
US9477412B1 (en) 2014-12-09 2016-10-25 Parallel Machines Ltd. Systems and methods for automatically aggregating write requests
US9594696B1 (en) 2014-12-09 2017-03-14 Parallel Machines Ltd. Systems and methods for automatic generation of parallel data processing code
CN103995746A (zh) * 2014-04-24 2014-08-20 深圳中微电科技有限公司 在和谐处理器中实现图形处理的方法及和谐处理器
US10162683B2 (en) * 2014-06-05 2018-12-25 International Business Machines Corporation Weighted stealing of resources
DE102014214667A1 (de) 2014-07-25 2016-01-28 Bayerische Motoren Werke Aktiengesellschaft Anzeigen von dynamischen sicherheitsrelevanten dreidimensionalen Inhalten auf einer Anzeigeeinrichtung
US10521874B2 (en) 2014-09-26 2019-12-31 Intel Corporation Method and apparatus for a highly efficient graphics processing unit (GPU) execution model
CN104391747A (zh) * 2014-11-18 2015-03-04 北京锐安科技有限公司 一种并行计算方法及装置
US9781225B1 (en) 2014-12-09 2017-10-03 Parallel Machines Ltd. Systems and methods for cache streams
US9639473B1 (en) 2014-12-09 2017-05-02 Parallel Machines Ltd. Utilizing a cache mechanism by copying a data set from a cache-disabled memory location to a cache-enabled memory location
US9753873B1 (en) 2014-12-09 2017-09-05 Parallel Machines Ltd. Systems and methods for key-value transactions
US9690705B1 (en) 2014-12-09 2017-06-27 Parallel Machines Ltd. Systems and methods for processing data sets according to an instructed order
US9904574B2 (en) * 2014-12-23 2018-02-27 Successfactors, Inc Parallel computing without requiring antecedent code deployment
US10198294B2 (en) 2015-04-17 2019-02-05 Microsoft Licensing Technology, LLC Handling tenant requests in a system that uses hardware acceleration components
US10511478B2 (en) 2015-04-17 2019-12-17 Microsoft Technology Licensing, Llc Changing between different roles at acceleration components
US9792154B2 (en) 2015-04-17 2017-10-17 Microsoft Technology Licensing, Llc Data processing system having a hardware acceleration plane and a software plane
US10296392B2 (en) 2015-04-17 2019-05-21 Microsoft Technology Licensing, Llc Implementing a multi-component service using plural hardware acceleration components
US20160308649A1 (en) * 2015-04-17 2016-10-20 Microsoft Technology Licensing, Llc Providing Services in a System having a Hardware Acceleration Plane and a Software Plane
US9542244B2 (en) 2015-04-22 2017-01-10 Ryft Systems, Inc. Systems and methods for performing primitive tasks using specialized processors
WO2016172569A1 (en) * 2015-04-22 2016-10-27 Ryft Systems, Inc. Systems and methods for performing primitive tasks using specialized processors
US20160335064A1 (en) * 2015-05-12 2016-11-17 Advanced Micro Devices, Inc. Infrastructure to support accelerator computation models for active storage
JP6345627B2 (ja) * 2015-05-20 2018-06-20 株式会社ソニー・インタラクティブエンタテインメント 情報処理装置および情報処理方法
US10216555B2 (en) 2015-06-26 2019-02-26 Microsoft Technology Licensing, Llc Partially reconfiguring acceleration components
US9778961B2 (en) * 2015-09-14 2017-10-03 Qualcomm Incorporated Efficient scheduling of multi-versioned tasks
US10956666B2 (en) 2015-11-09 2021-03-23 Apple Inc. Unconventional virtual assistant interactions
CN107193539B (zh) * 2016-03-14 2020-11-24 北京京东尚科信息技术有限公司 多线程并发处理方法和多线程并发处理系统
US20170358132A1 (en) * 2016-06-12 2017-12-14 Apple Inc. System And Method For Tessellation In An Improved Graphics Pipeline
US10459760B2 (en) * 2016-07-08 2019-10-29 Sap Se Optimizing job execution in parallel processing with improved job scheduling using job currency hints
EP3273349A1 (en) * 2016-07-22 2018-01-24 Tata Consultancy Services Limited Approximate computing for application performance in heterogeneous systems
US10552212B2 (en) * 2016-11-28 2020-02-04 Arm Limited Data processing
US10109030B1 (en) * 2016-12-27 2018-10-23 EMC IP Holding Company LLC Queue-based GPU virtualization and management system
CN106648705A (zh) * 2017-01-06 2017-05-10 吴晓栋 基于视觉元素的应用程序开发与运行系统及其方法
US10262390B1 (en) 2017-04-14 2019-04-16 EMC IP Holding Company LLC Managing access to a resource pool of graphics processing units under fine grain control
US10275851B1 (en) 2017-04-25 2019-04-30 EMC IP Holding Company LLC Checkpointing for GPU-as-a-service in cloud computing environment
US10325343B1 (en) 2017-08-04 2019-06-18 EMC IP Holding Company LLC Topology aware grouping and provisioning of GPU resources in GPU-as-a-Service platform
US10540194B2 (en) 2017-12-21 2020-01-21 International Business Machines Corporation Runtime GPU/CPU selection
CN110058894B (zh) * 2018-01-18 2022-05-24 伊姆西Ip控股有限责任公司 在混合云中执行应用的方法、设备和计算机程序产品
US10698766B2 (en) 2018-04-18 2020-06-30 EMC IP Holding Company LLC Optimization of checkpoint operations for deep learning computing
CN108681491B (zh) * 2018-05-04 2021-03-02 武汉极意网络科技有限公司 一种文件解耦方法及系统
CN110795228B (zh) 2018-08-03 2023-08-25 伊姆西Ip控股有限责任公司 用于训练深度学习模型的方法和制品、以及计算系统
US10776164B2 (en) 2018-11-30 2020-09-15 EMC IP Holding Company LLC Dynamic composition of data pipeline in accelerator-as-a-service computing environment
CN111143042A (zh) * 2019-11-14 2020-05-12 武汉纺织大学 一种通过依赖性分析加速gpu的并行化方法及系统
CN111176654B (zh) * 2019-11-18 2021-04-27 浙江大学 一种基于多用户缓存的物联网应用在线编译方法
CN111292223B (zh) * 2020-01-22 2023-07-25 北京百度网讯科技有限公司 图计算的处理方法、装置、电子设备及存储介质
KR102449016B1 (ko) * 2020-12-29 2022-09-29 주식회사 코난테크놀로지 이벤트를 지원하지 않는 비동기식 병렬처리를 통한 입출력 리소스 절감 방법 및 그 병렬처리 장치

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1998019238A1 (en) * 1996-10-28 1998-05-07 Unisys Corporation Heterogeneous symmetric multi-processing system
WO2006055342A2 (en) * 2004-11-19 2006-05-26 Motorola, Inc. Energy efficient inter-processor management method and system
US20060143615A1 (en) * 2004-12-28 2006-06-29 Seiko Epson Corporation Multimedia processing system and multimedia processing method
CN1877490A (zh) * 2006-07-04 2006-12-13 浙江大学 结合静态编译器和动态调频技术优化运行频率的节能方法

Family Cites Families (100)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE4129614C2 (de) 1990-09-07 2002-03-21 Hitachi Ltd System und Verfahren zur Datenverarbeitung
US5301324A (en) * 1992-11-19 1994-04-05 International Business Machines Corp. Method and apparatus for dynamic work reassignment among asymmetric, coupled processors
CA2137488C (en) * 1994-02-18 1998-09-29 Richard I. Baum Coexecuting method and means for performing parallel processing in conventional types of data processing systems
US5442789A (en) * 1994-03-31 1995-08-15 International Business Machines Corporation System and method for efficiently loading and removing selected functions on digital signal processors without interrupting execution of other functions on the digital signal processors
US6179489B1 (en) * 1997-04-04 2001-01-30 Texas Instruments Incorporated Devices, methods, systems and software products for coordination of computer main microprocessor and second microprocessor coupled thereto
US5946487A (en) 1996-06-10 1999-08-31 Lsi Logic Corporation Object-oriented multi-media architecture
US6115550A (en) 1997-06-11 2000-09-05 Digital Equipment Corporation Loader conditionally replacing a code sequence with a functionally-alike code sequence in an executable program intended for execution in different run-time environments
CA2319004A1 (en) 1998-01-26 1999-08-12 Unif/X Inc. A transaction execution system interface and enterprise system architecture thereof
WO2000033238A2 (en) * 1998-11-30 2000-06-08 Siebel Systems, Inc. Assignment manager
US8234650B1 (en) 1999-08-23 2012-07-31 Oracle America, Inc. Approach for allocating resources to an apparatus
JP2001147819A (ja) 1999-11-19 2001-05-29 Fujitsu Ltd 最適化装置および記録媒体
US6986128B2 (en) * 2000-01-07 2006-01-10 Sony Computer Entertainment Inc. Multiple stage program recompiler and method
US7159041B2 (en) 2000-03-07 2007-01-02 Microsoft Corporation Method and system for defining and controlling algorithmic elements in a graphics display system
US6588008B1 (en) * 2000-04-11 2003-07-01 International Business Machines Corporation Assembler tool for processor-coprocessor computer systems
US6970206B1 (en) * 2000-04-20 2005-11-29 Ati International Srl Method for deinterlacing interlaced video by a graphics processor
US20030154284A1 (en) 2000-05-31 2003-08-14 James Bernardin Distributed data propagator
US6768901B1 (en) * 2000-06-02 2004-07-27 General Dynamics Decision Systems, Inc. Dynamic hardware resource manager for software-defined communications system
JP3928360B2 (ja) 2001-02-07 2007-06-13 ソニー株式会社 メモリ装置
US7234144B2 (en) 2002-01-04 2007-06-19 Microsoft Corporation Methods and system for managing computational resources of a coprocessor in a computing system
US6919896B2 (en) * 2002-03-11 2005-07-19 Sony Computer Entertainment Inc. System and method of optimizing graphics processing
US7219352B2 (en) * 2002-04-15 2007-05-15 Microsoft Corporation Methods and apparatuses for facilitating processing of interlaced video images for progressive video displays
US20040068716A1 (en) * 2002-10-04 2004-04-08 Quicksilver Technology, Inc. Retargetable compiler for multiple and different hardware platforms
CN100557550C (zh) 2002-10-16 2009-11-04 鲍志超 计算机通用关联应用处理器
US7181382B2 (en) 2003-05-08 2007-02-20 Microsoft Corporation System and method for testing, simulating, and controlling computer software and hardware
US7015913B1 (en) * 2003-06-27 2006-03-21 Nvidia Corporation Method and apparatus for multithreaded processing of data in a programmable graphics processor
US6862027B2 (en) 2003-06-30 2005-03-01 Microsoft Corp. System and method for parallel execution of data generation tasks
US7546553B2 (en) * 2003-07-28 2009-06-09 Sap Ag Grid landscape component
US7272730B1 (en) 2003-07-31 2007-09-18 Hewlett-Packard Development Company, L.P. Application-driven method and apparatus for limiting power consumption in a processor-controlled hardware platform
US7389508B2 (en) * 2003-09-25 2008-06-17 International Business Machines Corporation System and method for grouping processors and assigning shared memory space to a group in heterogeneous computer environment
US7444632B2 (en) 2003-09-25 2008-10-28 International Business Machines Corporation Balancing computational load across a plurality of processors
US7882488B2 (en) * 2003-10-20 2011-02-01 Robert Zeidman Software tool for synthesizing a real-time operating system
US7068284B2 (en) * 2003-11-10 2006-06-27 Microsoft Corporation Color management system that supports legacy and advanced color management applications
US8274517B2 (en) * 2003-11-14 2012-09-25 Microsoft Corporation Systems and methods for downloading algorithmic elements to a coprocessor and corresponding techniques
US20050132239A1 (en) * 2003-12-16 2005-06-16 Athas William C. Almost-symmetric multiprocessor that supports high-performance and energy-efficient execution
US7472391B2 (en) 2004-02-20 2008-12-30 Microsoft Corporation Resource loader for applications that utilize relative uniform resource identifiers
US7847800B2 (en) * 2004-04-16 2010-12-07 Apple Inc. System for emulating graphics operations
US7725643B1 (en) * 2004-05-04 2010-05-25 Oracle America, Inc. Methods and systems for detecting and avoiding an address dependency between tasks
US20060048157A1 (en) * 2004-05-18 2006-03-02 International Business Machines Corporation Dynamic grid job distribution from any resource within a grid environment
US7810099B2 (en) * 2004-06-17 2010-10-05 International Business Machines Corporation Optimizing workflow execution against a heterogeneous grid computing topology
US7426724B2 (en) 2004-07-02 2008-09-16 Nvidia Corporation Optimized chaining of vertex and fragment programs
US7868891B2 (en) * 2004-09-16 2011-01-11 Nvidia Corporation Load balancing
US20060069909A1 (en) * 2004-09-23 2006-03-30 Roth Steven T Kernel registry write operations
US7603546B2 (en) * 2004-09-28 2009-10-13 Intel Corporation System, method and apparatus for dependency chain processing
US7800620B2 (en) 2004-11-05 2010-09-21 Microsoft Corporation Optimizing automated shader program construction
US7598953B2 (en) 2004-11-05 2009-10-06 Microsoft Corporation Interpreter for simplified programming of graphics processor units in general purpose programming languages
US7733347B2 (en) 2004-11-05 2010-06-08 Microsoft Corporation Automated construction of shader programs
US20060132489A1 (en) * 2004-12-21 2006-06-22 Hewlett-Packard Development Company, L.P. Remote computing
JP2006285464A (ja) * 2005-03-31 2006-10-19 Hitachi Ltd 計算機システムとストレージ及びデバイス制御方法
US7665143B2 (en) 2005-05-16 2010-02-16 Microsoft Corporation Creating secure process objects
JP2006350686A (ja) 2005-06-16 2006-12-28 Seiko Epson Corp 命令セット・シミュレータ生成装置及びシミュレータ生成方法
WO2006138706A2 (en) 2005-06-17 2006-12-28 Computer Associates Think, Inc. System and method for identifying application resources
US7353369B1 (en) 2005-07-13 2008-04-01 Nvidia Corporation System and method for managing divergent threads in a SIMD architecture
US20070033592A1 (en) 2005-08-04 2007-02-08 International Business Machines Corporation Method, apparatus, and computer program product for adaptive process dispatch in a computer system having a plurality of processors
US7856618B2 (en) * 2005-08-04 2010-12-21 International Business Machines Corporation Adaptively generating code for a computer program
US7463268B2 (en) 2005-09-15 2008-12-09 Microsoft Corporation Providing 3D graphics across partitions of computing device
TWI348652B (en) 2005-10-17 2011-09-11 Via Tech Inc Driver assisted asynchronous command processing
KR100713505B1 (ko) 2005-10-24 2007-04-30 삼성전자주식회사 디지털 방송 수신 단말기의 선호 채널 공유 방법
US20070169114A1 (en) * 2005-11-09 2007-07-19 Microsoft Corporation Application suite installer with automatic detection of content and configurable options
US7330962B2 (en) 2005-11-14 2008-02-12 Nvidia Corporation Dynamic instruction sequence selection during scheduling
US7788468B1 (en) 2005-12-15 2010-08-31 Nvidia Corporation Synchronization of threads in a cooperative thread array
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
US7958509B2 (en) * 2005-12-21 2011-06-07 International Business Machines Corporation Method and system for scheduling of jobs
US9038040B2 (en) 2006-01-25 2015-05-19 International Business Machines Corporation Method for partitioning programs between a general purpose core and one or more accelerators
WO2007098424A2 (en) * 2006-02-17 2007-08-30 Qualcomm Incorporated System and method for multi-processor application support
US7441224B2 (en) 2006-03-09 2008-10-21 Motorola, Inc. Streaming kernel selection for reconfigurable processor
US20070294693A1 (en) * 2006-06-16 2007-12-20 Microsoft Corporation Scheduling thread execution among a plurality of processors based on evaluation of memory access data
US8549499B1 (en) 2006-06-16 2013-10-01 University Of Rochester Parallel programming using possible parallel regions and its language profiling compiler, run-time system and debugging support
US8756264B2 (en) 2006-06-20 2014-06-17 Google Inc. Parallel pseudorandom number generation
US8146066B2 (en) * 2006-06-20 2012-03-27 Google Inc. Systems and methods for caching compute kernels for an application running on a parallel-processing computer system
US8381202B2 (en) * 2006-06-20 2013-02-19 Google Inc. Runtime system for executing an application in a parallel-processing computer system
US8443348B2 (en) 2006-06-20 2013-05-14 Google Inc. Application program interface of a parallel-processing computer system that supports multiple programming languages
US8136104B2 (en) * 2006-06-20 2012-03-13 Google Inc. Systems and methods for determining compute kernels for an application in a parallel-processing computer system
WO2007149884A2 (en) 2006-06-20 2007-12-27 Google, Inc. A multi-thread high performance computing system
US8136102B2 (en) 2006-06-20 2012-03-13 Google Inc. Systems and methods for compiling an application for a parallel-processing computer system
US8375368B2 (en) 2006-06-20 2013-02-12 Google Inc. Systems and methods for profiling an application running on a parallel-processing computer system
US7814486B2 (en) * 2006-06-20 2010-10-12 Google Inc. Multi-thread runtime system
US8108844B2 (en) * 2006-06-20 2012-01-31 Google Inc. Systems and methods for dynamically choosing a processing element for a compute kernel
CN102113032B (zh) 2006-06-23 2014-09-17 弗兰斯瓦斯·P·豪维列 无管通风柜系统
US7750913B1 (en) 2006-10-24 2010-07-06 Adobe Systems Incorporated System and method for implementing graphics processing unit shader programs using snippets
US20080109795A1 (en) * 2006-11-02 2008-05-08 Nvidia Corporation C/c++ language extensions for general-purpose graphics processing unit
US8370818B2 (en) 2006-12-02 2013-02-05 Time Warner Cable Inc. Methods and apparatus for analyzing software interface usage
US7969444B1 (en) * 2006-12-12 2011-06-28 Nvidia Corporation Distributed rendering of texture data
US8719807B2 (en) 2006-12-28 2014-05-06 Intel Corporation Handling precompiled binaries in a hardware accelerated software transactional memory system
US8321849B2 (en) 2007-01-26 2012-11-27 Nvidia Corporation Virtual architecture and instruction set for parallel thread computing
US7925900B2 (en) * 2007-01-26 2011-04-12 Microsoft Corporation I/O co-processor coupled hybrid computing device
US8010954B2 (en) 2007-02-14 2011-08-30 The Mathworks, Inc. Parallel programming interface to dynamically allocate program portions
US7975001B1 (en) * 2007-02-14 2011-07-05 The Mathworks, Inc. Bi-directional communication in a parallel processing environment
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
US7685409B2 (en) * 2007-02-21 2010-03-23 Qualcomm Incorporated On-demand multi-thread multimedia processor
JP2008226181A (ja) 2007-03-15 2008-09-25 Fujitsu Ltd 並列実行プログラム、該プログラムを記録した記録媒体、並列実行装置および並列実行方法
US8286196B2 (en) 2007-05-03 2012-10-09 Apple Inc. Parallel runtime execution on multiple processors
EP3413198A1 (en) 2007-04-11 2018-12-12 Apple Inc. Data parallel computing on multiple processors
US8108633B2 (en) * 2007-04-11 2012-01-31 Apple Inc. Shared stream memory on multiple processors
US8276164B2 (en) * 2007-05-03 2012-09-25 Apple Inc. Data parallel computing on multiple processors
US8341611B2 (en) * 2007-04-11 2012-12-25 Apple Inc. Application interface on multiple processors
US7941791B2 (en) 2007-04-13 2011-05-10 Perry Wang Programming environment for heterogeneous processor resource integration
US8996846B2 (en) 2007-09-27 2015-03-31 Nvidia Corporation System, method and computer program product for performing a scan operation
US20090158299A1 (en) 2007-10-31 2009-06-18 Carter Ernst B System for and method of uniform synchronization between multiple kernels running on single computer systems with multiple CPUs installed
US8286172B2 (en) 2008-10-02 2012-10-09 Nec Laboratories America, Inc. Systems and methods for implementing best-effort parallel computing frameworks
US9268613B2 (en) * 2010-12-20 2016-02-23 Microsoft Technology Licensing, Llc Scheduling and management in a personal datacenter

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1998019238A1 (en) * 1996-10-28 1998-05-07 Unisys Corporation Heterogeneous symmetric multi-processing system
WO2006055342A2 (en) * 2004-11-19 2006-05-26 Motorola, Inc. Energy efficient inter-processor management method and system
US20060143615A1 (en) * 2004-12-28 2006-06-29 Seiko Epson Corporation Multimedia processing system and multimedia processing method
CN1877490A (zh) * 2006-07-04 2006-12-13 浙江大学 结合静态编译器和动态调频技术优化运行频率的节能方法

Also Published As

Publication number Publication date
AU2008239697A1 (en) 2008-10-23
EP2146283A3 (en) 2016-05-25
WO2008127623A3 (en) 2010-01-07
US20080276262A1 (en) 2008-11-06
US20130055272A1 (en) 2013-02-28
US9436526B2 (en) 2016-09-06
EP2140352A2 (en) 2010-01-06
US20170031691A1 (en) 2017-02-02
AU2008239697B2 (en) 2011-10-13
US11544075B2 (en) 2023-01-03
CN101802789A (zh) 2010-08-11
US9304834B2 (en) 2016-04-05
US20130063451A1 (en) 2013-03-14
US20150317192A1 (en) 2015-11-05
US8286196B2 (en) 2012-10-09
WO2008127623A2 (en) 2008-10-23
EP2146283B1 (en) 2019-11-06
US9052948B2 (en) 2015-06-09
EP2140352B1 (en) 2019-09-25
EP2146283A2 (en) 2010-01-20
US9471401B2 (en) 2016-10-18
US20140201746A1 (en) 2014-07-17

Similar Documents

Publication Publication Date Title
CN101802789B (zh) 多处理器上的并行运行时执行
CN101657795B (zh) 多处理器上的数据并行计算
US11106504B2 (en) Application interface on multiple processors
CN102870096B (zh) 子缓冲器对象
US8276164B2 (en) Data parallel computing on multiple processors
US8108633B2 (en) Shared stream memory on multiple processors
CN104823215A (zh) 子画面图形渲染系统
US20150145871A1 (en) System, method, and computer program product to enable the yielding of threads in a graphics processing unit to transfer control to a host processor
CN103927150A (zh) 多处理器上的并行运行时执行
US20200264781A1 (en) Location aware memory with variable latency for accelerating serialized algorithm
US11836506B2 (en) Parallel runtime execution on multiple processors
AU2018226440A1 (en) Data parallel computing on multiple processors

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