CN109791502B - 针对异构设备类型的对等分布式计算系统 - Google Patents
针对异构设备类型的对等分布式计算系统 Download PDFInfo
- Publication number
- CN109791502B CN109791502B CN201780058414.1A CN201780058414A CN109791502B CN 109791502 B CN109791502 B CN 109791502B CN 201780058414 A CN201780058414 A CN 201780058414A CN 109791502 B CN109791502 B CN 109791502B
- Authority
- CN
- China
- Prior art keywords
- data
- message
- protocol
- function
- input data
- 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
Links
- 238000000034 method Methods 0.000 claims abstract description 92
- 230000006870 function Effects 0.000 claims abstract description 82
- 230000008569 process Effects 0.000 claims description 49
- 230000015654 memory Effects 0.000 claims description 23
- 230000004044 response Effects 0.000 claims description 22
- 238000012545 processing Methods 0.000 claims description 10
- 238000010586 diagram Methods 0.000 description 21
- 238000004891 communication Methods 0.000 description 13
- 238000004458 analytical method Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 239000000203 mixture Substances 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 244000035744 Hura crepitans Species 0.000 description 1
- 241000700605 Viruses Species 0.000 description 1
- 230000002776 aggregation Effects 0.000 description 1
- 238000004220 aggregation Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 229910000078 germane Inorganic materials 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000010979 ruby Substances 0.000 description 1
- 229910001750 ruby Inorganic materials 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5083—Techniques for rebalancing the load in a distributed system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5083—Techniques for rebalancing the load in a distributed system
- G06F9/5088—Techniques for rebalancing the load in a distributed system involving task migration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/485—Task life-cycle, e.g. stopping, restarting, resuming execution
- G06F9/4856—Task life-cycle, e.g. stopping, restarting, resuming execution resumption being on a different machine, e.g. task migration, virtual machine migration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/509—Offload
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/544—Remote
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/547—Messaging middleware
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer And Data Communications (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本公开描述了用于提供包括不同类型的设备的分布式计算网络的框架(或者技术或方法)和系统。该框架允许对等设备在整个网络中传输作为作业或数据的概念性单位的信息“包”(例如,消息)。该框架允许用于执行一项或多项作业的可移植代码可在对等设备之间传输。设备可以向其他设备传输描述计算的可移植代码,而接收设备可随之将此类代码编译成与该特定设备的架构兼容的可执行形式。编译后的代码可执行用以执行一项或多项计算的函数,以履行作为分布式计算协议一部分的作业请求。
Description
技术领域
本公开整体涉及分布式计算系统领域。更具体地讲,本公开涉及用于在具有不同类型设备的网络内提供分布式计算系统的框架。
背景技术
随着便携式计算设备的数量增长,在各种设备之间进行整合的需求变得越来越重要。例如,用户可以在给定时间访问多种类型的设备(例如,智能电话、膝上型计算机等),相应地,这些设备可以相互通信以提供增强的用户体验。这种增强的用户体验可包括在设备之间共享资源,以增加诸如处理能力、电池使用、网络带宽和存储等的能力。因此,这些设备可形成分布式计算环境的一部分。然而,此类计算环境往往还担负着使设备能够共享资源的某些要求。例如,这些环境往往要求通信连接的连续性,这通常与许多类型的现代计算设备的便携式性质发生冲突。因此,设备之间的通信链路经常被切断,例如,当设备被从某个区域物理移除时(例如,当用户与其携带的便携式设备离开某一地点时)。此外,便携式设备往往依赖于电池,相应地往往受到功率消耗方面的限制。此外,随着专用架构(例如,移动设备专用处理器和操作系统)的数量的增加,情况往往是设备越发无法在分布式环境中进行整合。因此,传统的分布式计算框架往往不适合当前用户设备的环境。
发明内容
本公开描述了用于实施分布式计算网络的灵活框架(或者技术或方法)和系统,所述分布式计算网络可以被部署到具有各种类型的设备和配置的环境当中。框架可以被用于各种背景,从而有效率地利用环境(例如,设备生态系统)内的资源。例如,设备可以将某些处理任务分流给可以具有更大能力(诸如处理能力、存储、电源等)的其他设备。例如,用户拿着个人设备(诸如智能电话)处于膝上型计算机或台式计算机附近的情况可能并不少见,其中所述膝上型计算机或台式计算机的任一者可以连接至连续电源(例如,插到电源插座内)。因此,智能电话可将诸如编辑多媒体(例如,照片)的处理任务分流给台式计算机或膝上型计算机,从而使用功能可能更加强大的处理器以及节约电池电量。框架还可以被实施为通过将计算分流给其他设备而将一个或多个设备从环境中去除(例如,从本地无线网络去除)。此外,框架可以被实施为识别重新加入环境的设备,并且可以相应地恢复被暂停的计算。因此,可以按照灵活的方式利用框架,包括具有各种类型的设备和配置的环境。此外,框架可以被配置为适应开发者设想的各种联网环境。
在一个实施方案中,描述了一种利用可移植可执行代码(例如,LLVM IR)的框架,可移植代码可以在分布式计算系统内的对等设备之间传输,以执行作业。在一个实施方案中,框架可包括一种执行操作的方法,操作包括使用一级协议通过第一设备上的守护进程接收来自第二设备的第一消息。例如,第一消息可包括可移植代码,可移植代码在被第一设备编译后提供一个或多个函数,从而由分布式计算系统内的第一设备执行计算。操作还可包括使用二级协议接收来自第二设备的第二消息。例如,第二消息可包括第一作业请求,其中第一作业请求包括对一个或多个函数中的执行计算的第一函数的指示,以及对执行第一函数所需的一组输入数据的指示。此外,操作可包括响应于第一设备获取了所需的一组输入数据,执行第一函数以执行计算以履行第一作业请求。
因此,框架可以被用于各种背景,从而有效率地共享分布式环境内的资源,如本文进一步所述。
附图说明
图1A-图1B示出了根据本公开的实施方案的数据节点和作业节点的图形抽象的示例。
图2是示出了根据本公开的实施方案的示例性分布式计算系统概要的框图。
图3是示出了根据本公开的实施方案的向对等设备提供可移植代码的示例性过程流的框图。
图4是示出了根据本公开的实施方案的对等设备的示例性配置的框图。
图5是示出了根据本公开的实施方案的对等设备之间的消息传送过程流的图示。
图6是示出了根据本公开的实施方案的守护进程级消息的示例性结构的图示。
图7是示出了根据本公开的实施方案的worker进程级消息的示例性结构的图示。
图8是示出了根据本公开的实施方案的示例性数据容器的图示。
图9是示出了根据本公开的实施方案的数据容器内的线性化数据的示例的图示。
图10是示出了根据本公开的实施方案的使用一个或两个容器的混合函数的示例的图示。
图11是根据本公开的实施方案的响应于获取了所需的一组输入数据而执行过程的方法的流程图。
图12是根据本公开的实施方案的分析和编译可移植代码的方法的流程图。
图13是示出了可以与本公开的实施方案中的一者或多者一起使用的示例性计算系统的框图。
具体实施方式
将参考以下论述的细节来描述各种实施方案和方面,并且附图将对各种实施方案进行说明。以下说明书和附图为例示性的,并且不应被理解为限制性的。描述了许多具体细节,以提供对各个实施方案的全面理解。然而,在某些实例中,熟知的或常规的细节并未被描述,以便提供对实施方案的简明论述。在本说明书中提到的“一个实施方案”、“实施方案”或“一些实施方案”是指结合该实施方案所述的特定特征、结构或特性可被包括在至少一个实施方案中。在本说明书中的各个位置出现短语“在一个实施方案中或者在实施方案中”不一定都是指同一个实施方案。在随后的附图中所描绘的过程由包括硬件(例如,电路、专用逻辑部件等等)、软件或这两者的组合的处理逻辑部件来执行。虽然下文按照某些顺序操作来描述该过程,但应当理解,所描述的某些操作可以不同的顺序执行。此外,某些操作也可并行执行而非按顺序执行。
本文描述了用于提供包括不同类型的设备的分布式计算网络的框架(或者技术或方法)和系统。如本文进一步所述,框架可允许设备在整个网络中传输作为作业或数据的概念性单位的信息“包”(例如,消息)。例如,作业可包括由设备执行的计算,数据可包括执行作业所需的一组输入。框架提供了使作业得以在一组不同类型的设备当中执行的能力,如本文进一步所述。为了提供这样的能力,在一些实施方案中,该框架允许用于执行一项或多项作业的可移植代码可在对等设备之间传输。例如,一个设备可以将可移植代码传输至另一对等设备,从而允许作业由对等设备执行。之后,接收设备可以将代码编译成与特定接收设备的架构兼容的可执行形式,然后执行履行作业请求所需的一项或多项计算。
如本文所参照的,作业可包括由设备执行的计算或计算的指示。例如,设备可以通过执行来自函数、过程、对象等的一条或多条指令而执行计算。因此,在一个实施方案中,作业可包括对执行一条或多条指令以提供一组输出的函数(编译自可移植代码)的标引(例如,指针)。如本文进一步所述,数据可包括执行作业所需的任何形式的信息(或数据)或者可由作业创建为输出的任何信息(或数据)。数据和作业之间关系的表示可以被示为抽象计算图。
图1A和图1B示出了根据本公开的实施方案的数据节点和作业节点的图形抽象的示例。如图所示,图解10和图解15可包括两种类型的节点;即数据节点12(被示为圆形节点)和作业节点14(被示为方形节点)。作业节点14可消耗零个或更多个输入数据节点以产生一个或多个输出数据节点12。例如,作业可表示将数据映射到数据(例如,将输入数据映射至输出数据)的函数。图1A示出了一个简单的示例,其中向输入x应用作业F,从而产生了输出y。例如,在数学语境下,其可以被示为y=F(x)。然而,图解可以被表示为有向图,其中数据节点x被输入到作业节点F中,以生成输出数据y。图1B示出了更加复杂的示例。在数学语境下,这一计算可以被示为:
w=E(u,v) s=G(v) z=H(w,s)
或者,此时内部节点被折叠为:
z=H(E(u,v),G(v))
如这些示例中所示,图解为二分图(例如,每条边在一端具有作业,在另一端具有数据)。因此,数据节点可以具有入度零或一(例如,数据要么已经存在,要么是全然作为一个已执行作业的输出创建的),并且作业节点可以具有任何入度。因此,图解为有向无环图(DAG),因而如果已知作业节点内的计算将完成,那么整个计算应运行至完成。换句话讲,DAG对各项作业施加了顺序约束条件。因此,一旦作业所需的一组输入可获得,那么该作业只能受到执行。此外,由于DAG的性质的原因,可导出有效率的拓扑排序。基于所导出的排序,设备可以确定一种有效率的顺序,以执行一项或多项作业。
在一些实施方案中,框架允许可移植代码可在设备网络内与其他形式的数据平等地受到传输。可以通过使用一种或多种消息传送协议(或者协议分级结构)来提供这样的能力,如本文进一步所述。因此,框架可以提供一种根据需要在设备之间有效率地传输作业或者作业所需数据的机制。例如,如果特定作业所需的数据存储在特定设备上,那么框架允许将作业发送到该特定设备上。类似地,在另一个示例中,如果将作业存储在特定设备上,那么所需的一组数据可以被提供给该特定设备。
应注意,在一些实施方案中,本文所述的框架和系统可以被实施为较低级的底层或平台,可以在其上面实施更高级别的功能(例如,应用)。此外,在一些实施方案中,框架可被实施为运行时(或运行时库)。例如,在一个实施方案中,框架可以被实施为运行时系统(例如,使用C风格编程语言的),以作为插入到可由编译器执行的图像内的特定一组指令。如本文进一步所述,框架可以被实施到分布式计算系统内。
图2是示出了根据本公开的实施方案的示例性分布式计算系统概要的框图。分布式计算系统100可包括可经由通信信道120连接的设备110(例如,设备110a-f)。在一个实施方案中,分布式计算系统可包括设备的对等网络。设备110(或对等设备)可以是任何适当的设备,并且可包括各种设备类型。例如,某一“类型”的设备可能与一种类别的设备关联,该类别的设备可包括:例如,智能电话(例如,设备110a)、平板电脑(例如,设备110b)、电视机(例如,设备110c)、膝上型计算机(例如,设备110d)、诸如智能手表的可穿戴设备(例如,设备110e)、台式计算机(例如,设备110f)、VR头盔、机顶盒或者任何其他类型的计算设备。不同类型的设备还可包括具有包括不同操作系统的不同架构的设备。例如,不同的操作系统可包括例如不同的变型(例如,移动变型)、不同的版本(例如,版本号)或者不同的平台(例如,iOS、UNIX、Windows等)。因此,如本文所述,在一些实施方案中,系统可跨越具有不同操作系统的设备部署。在另一个示例中,不同类型的设备还可包括具有一个或多个不同部件(诸如处理器、存储器能力、存储装置等)的设备。
通信信道120可包括两个对等方之间的可沿其传递(或者传输)信息的通信路径。通信信道120可以是设备110之间的任何有线或无线通信链路,包括例如物理通信链路(例如,数据传输电缆)、包括任何适当类型的有线或无线网络(这些网络可以是局域网(LAN)、广域网(WAN),例如,WiFi、蜂窝等)的网络链路、短程通信链路(例如,蓝牙)或其任何组合。
图3是示出了根据本公开的实施方案的向对等设备提供可移植代码的示例性过程流的框图。如图所示,配置300示出了用于将可移植代码从第二类型的设备304(或第二设备304)提供给第一类型的设备302(或第一设备302)的过程流。作为分布式系统的一部分,第二设备304可请求由对等设备(例如,第二设备304)执行一项或多项作业。在确定要选择对哪些对等设备来执行一项或多项作业时,第二设备304可使用任何适当的策略或一组特征。在一个示例中,可基于设备特征(例如,处理能力、存储装置等)、诸如电池电源或连续电源(例如,插入到电源插座内)的当前电源、设备的接近度(例如,最近的物理设备)、网络连接的类型(例如,传输带宽)、当前正运行的应用或者其他特征来选择对等设备。在另一个示例中,对第二设备304的选择可以基于其是否与第一设备302的用户相关联。例如,一组设备可与同一用户账户相关联(例如,用户在两个设备上登录特定服务),相应地,可以将作业分配给与同一用户相关联的设备。
作为过程流的一部分,第二设备304可确定一项或多项作业所需的一组计算410。例如,这些计算可提供履行作业请求所需的输出。因此,第二设备304可生成源代码420,例如,其包括用以执行所确定的计算的指令或命令(例如,函数)。第二设备304可以生成使用第二设备304的原生语言的源代码。为了允许不同类型的设备执行如本文所述的作业,第二设备304可由源代码生成可移植代码430。可移植代码可以是可由网络中的对等设备编译的任何适当代码。在一个实施方案中,可移植代码可以是使用LLVM(低级虚拟机)技术实施的,这些技术可包括模块化的可重复使用编译器和工具链技术的集合。例如,在一个实施方案中,具体实施可以使用LLVM IR(中间表示)作为可移植代码。例如,第二设备304可以由其源代码生成机器无关中间代码(例如,LLVM IR),并且中间代码可以被第一设备302编译成其原生机器代码。此外,具体实施可以使用LLVM位码(或字节码),其可包括创建比特流容器格式以及将LLVM IR编码成容器格式。例如,比特流可包括对按照某种格式结构化的数据的编码,如本文进一步所述。按照设计,LLVM具体实施是与语言无关的,因而可以与任何适当的编程语言一起使用。例如,具体实施可以使用各种前端语言连同使用LLVM的编译器(例如,Common Lisp、Delphi、Fortran、OpenGL、Haskell、Java bytecode、Julia、Objective-C、Python、Ruby、Swift等)。因此,源语言与接收对等设备的目标架构的解耦可允许作业在不同类型的设备上执行,如上文所述。
一旦生成可移植代码,就可以(根据请求或检索)将其发送到第一设备302(例如,另一对等设备)。如上所述,第一设备302可以不同于第二设备304(例如,使用不同的操作系统)。在一些实施方案中,可使用一种或多种协议(例如,如本文进一步所述的一级协议350)将可移植代码作为消息发送。应注意,就传统的远程过程调用(RPC)配置而言,设备通常必须已经具有执行远程过程所需的任何代码。相比之下,就如图所示的配置400而言,第一设备302可以只需要接收(和编译)用以执行作业的可移植代码440的能力。例如,在一些实施方案中,为了接收可移植代码,第一设备302可以只要求其正在执行特定过程(例如,如本文进一步所述的守护进程310)。例如,过程可接收并动态链接可移植代码。
一旦接收到可移植代码,第一设备302就可以分析可移植代码450。由于所接收的数据的性质是可执行的,第一设备302可对可移植代码进行有关安全性的分析(例如,恶意软件、病毒、对资源的授权访问、不受信任的来源等)。在一个实施方案中,分析可移植代码450可包括检查代码的控制流完整性。例如,对控制流完整性的检查可包括防止很宽范围的各种未授权访问,其方式是对代码加以分析,以确保其不会按照设备不允许的方式重定向作业执行流。此外,在分析可移植代码450时,第一设备302可采用取决于设备之间的信任关系的各种验证技术。例如,分析可包括验证证书、签名或者采用各种加密方案,以确保可移植代码执行起来是安全的。在一个实施方案中,系统还可以使用可移植代码的变型或同源语,变型或同源语具有内置的限制性策略,诸如它们自己的“沙箱化”技术,如本文进一步所述。此外,在一些实施方案中,系统可使用较高级别的领域专用语言(DSL),其可能更具有限制性,并且可以由接收设备进行更有效率的分析。
一旦代码经过分析并被认为安全,系统就可以编译460代码。在一个实施方案中,第二设备304可响应于被认为安全而编译可移植代码,从而允许在接收到工作请求之时执行一项或多项计算。在编译代码时,第二设备304可编译代码的全部或仅一部分。在一个实施方案中,第二设备304可以对可移植代码的全部或部分进行JIT(即时)编译。例如,第二设备304可响应于接收到作业请求,仅对可移植代码的必要部分进行JIT编译以执行所需的计算。
一旦编译了可移植代码,第一设备302就可以执行用以履行作业请求的计算470。例如,计算可以是在作为分布式计算系统一部分的第二设备304上代为执行的。在一个实施方案中,经编译的代码可以提供一个或多个函数,以执行输出数据的计算。如本文进一步所述,输出数据随后可用于将在作为分布式计算系统的部分的其他对等设备上执行的作业。
图4是示出了根据本公开的实施方案的对等设备的示例性配置的框图。如所描述的,配置400可包括多个协作设备(或对等体)。如图所示,配置400可包括第一类型的设备302(第一设备302)和第二类型的设备304(第二设备304),如图3所示。在一个实施方案中,第一设备302可以是不同于第二设备304的类型的设备,如上文所述。在一个实施方案中,框架可包括部件的分级结构。在一个实施方案中,框架可包括一级(例如,顶级)守护进程310。如本文所引用的,守护进程310可包括过程(或模块、程序、应用、对象、部件等),其可以在守护进程310所驻留的设备(或主机设备)上运行进程(例如,后台进程)。
在一个实施方案中,守护进程310可以管理第一类型的设备302和第二类型的设备304之间的网络连接(例如,经由通信信道120)。守护进程310可通过与托管在第二类型的设备304上的另一守护进程310通信来管理网络连接。在一个实施方案中,设备可相互通信,以使用一级协议350(或守护进程级协议)创建访问连接。在一个实施方案中,设备可以为每一物理设备托管单个访问连接,因而设备可以托管多个设备连同多个访问连接。
在一个实施方案中,在通过守护进程310生成对设备的访问连接之后(例如,设备302准许对设备304的访问,反之亦然),相应的守护进程310可以在相应的托管设备上创建worker(工作者)320(或者worker 320的实例)。如本文所引用的,worker 320可包括用以管理数据和执行作业的过程(或者模块、程序、应用、对象、部件等),并且本文将对其做进一步描述。在一些实施方案中,worker 320可以被实施成守护进程310的子进程或子模块。在一个实施方案中,worker 320可以使用二级协议355(例如,worker级协议)与在其他设备上创建的其他worker 320通信。因此,worker 320(或守护进程310)可协调其相应设备(例如,主机设备)的操作,包括存储和管理数据,调度作业的执行以及根据需要的其他操作。在一个实施方案中,设备可以使其相应的worker 320“沙箱化”,以提供另一层安全性。例如,“沙箱化”可包括对允许worker 320在其相应的主机设备上访问的资源(例如,数据、存储器地址、过程、特征等)进行分隔。在一个实施方案中,“沙箱化”可由守护进程310管理。在一个实施方案中,worker 320可与状态信息330相关联,状态信息可包括数据存储库340和waiter集345。Worker 320可以与其他worker共享状态信息330,或者每一worker可以与自身的状态信息330的实例相关联。
应注意,实施方案可具有不同于上文所述配置的配置,以管理访问连接以及管理设备之间的通信。例如,在一个实施方案中,守护进程310还可直接管理设备之间的通信(例如,由上文所述的worker 320处理的通信)。此外,其他进程、子进程、应用、对象等也可被用来实施本文所描述的框架。
图5是示出了根据本公开的实施方案的对等设备之间的消息传送过程流的图示。如所描述的,当在对等设备之间通信时,框架可使用协议分级结构。如图所示,示例性消息传送流可包括第一设备302(第一类型的设备302)和第二设备304(第二类型的设备304),如图3所示。在一个实施方案中,第二设备302可向第一设备304(例如主机设备)发送创建访问连接消息510。响应于接收到创建访问连接消息510,第一设备304可创建worker 515(例如,worker 320)。在一个实施方案中,创建访问连接消息510可包括用于执行一项或多项作业的可移植代码。此外,第一设备304可提供确认访问连接消息520。在一个实施方案中,创建访问连接消息510和确认访问连接消息520可符合一级协议(例如,一级协议350)并且可包括一个或多个预定义的命令,如本文进一步所述。此外,在一个实施方案中,消息510和520可由每一相应设备上的守护进程310管理。
在一个实施方案中,一旦worker(例如,worker 320)被创建,第一设备304(或者所创建的worker)就可以接收符合二级协议355的消息。这可包括来自第二设备530的第一作业请求消息304。第一作业请求消息530可包括关于二级协议355的一个或多个预定义组的消息传送命令,如本文进一步所述。响应于第一设备304接收到第一作业请求530,第一设备304可以获取执行第一作业所需的数据535。如本文进一步所述,如果第一设备304具有对数据(例如,存储在第一设备304的数据存储库内)的访问权限,那么第一设备可以继续执行第一作业550。如果所需数据没有例如存储在数据存储库内,那么第一设备304可执行(例如,处于队列内的)第二作业,以输出所需数据。在另一个示例中,第一设备304可从第三设备506检索数据。例如,这可包括向第三设备506发送对数据消息536的请求。因此,第一设备304可在由作为分布式计算系统一部分的第三设备304提供的消息中接收数据537。一旦第一设备304获取了所需数据,第一设备就可执行第一作业550。此外,作为分布式计算系统的一部分,第一设备304然后可将来自第一作业的输出数据发送到另一对等设备(例如,第四设备508)。例如,第四设备508可能需要用以执行作业的数据,如上文相对于第一设备304所述。
如上所述,消息传送协议(一级协议350和二级协议355)可包括预定义的一组消息传送命令,如图6和图7的示例性实施方案中所示,并且可以参考图5。图6是说明根据本公开的实施方案的一级消息600(例如,守护进程级消息)的示例性结构的图示。例如,一级消息600可包括后面跟随着有效载荷615的命令610。在一些实施方案中,框架还可以指定命令的大小(例如,32位整数)。如图所示,命令可包括创建worker的命令(例如,CREATE)、创建命令失败的指示(例如,CREATE FAILED)、连接worker的命令(例如,JOIN)、创建命令或连接命令成功的指示(例如,CREATE/JOIN OK)以及对等设备正在尝试连接未知worker的指示(例如,例如,UNKNOWN WORKER)。
例如,创建worker命令(例如,CREATE)可以被包含到创建worker消息510内,其可以指示第一设备304(或者守护进程310)创建worker 515。创建worker命令的有效载荷可包括可移植代码(例如,LLVM IR),如上文所述。设备(例如,第一设备304)可以分析代码,并且一旦可移植代码被认为是安全的,就将可移植代码编译成可执行形式。例如,经编译的代码可包括用以执行作业的一项或多项计算的一个或多个函数。在一个实施方案中,由可移植代码提供的设定函数可包括函数的对应表格或索引(例如,func_table)。例如,可以将表格或索引作为指向函数指针的阵列的指针处理,函数指针的阵列对应于worker可以调用以执行作业的作业入口点。一旦可移植代码被成功编译,守护进程就可以向所创建的worker分配标识符(ID),并将ID作为确认消息(例如,CREATE/JOIN OK)中的有效载荷返回。例如,确认可以在发送至第二设备302的确认访问连接520消息中发送。如果创建不成功(例如,代码被认为是不安全的),那么设备可以回应指示此类失败的命令(例如,CREATE FAILED)并附带指示失败原因的原因代码。
此外,命令可以连接或者连接至worker命令(例如,JOIN),其允许添加另一设备以作为向现有worker的新连接。在接收到针对无法识别的worker ID的连接命令时,设备(例如,第一设备304)可以回应UNKNOWN WORKER命令。否则,设备可通过CREATE/JOIN OK命令确认请求。在设备成功地处理了创建或连接命令之后,所创建的worker可以管理经由所创建的访问连接接收的作业和数据。例如,worker可以管理符合二级协议355(例如,worker级协议)的消息。
图7是示出了根据本公开的实施方案的二级消息650(例如,worker级消息)的示例性结构的图示。例如,二级消息650(例如,worker级消息)可包括随后跟着有效载荷665的命令660。如该示例中所示,worker级命令可包括发送数据(例如,PUSH)、检索数据(例如,FETCH)、作业请求(例如,JOB)、删除数据(例如,DELETE)和去除worker(例如,DESTROY)。
发送(例如,PUSH)命令可以包含在接收数据消息537中并且用于向另一对等体发送数据。例如,在worker接收到发送命令时,其有效载荷可包括被添加至数据存储库
D←D∪(k,x)
的数据ID k以及容器x。
因此,之后可以检查worker集W的每一元素,从而找到满足所有依存关系的子集之后将这些去除:
W←W\W 0。
W 0内的现在不受阻碍的操作被置于它们各自的队列上以供执行。
检索(例如,FETCH)命令可以包含在请求数据消息536内,并且可以被描述为与发送命令(例如,PUSH)相反。例如,worker向请求其发送对应于k的容器x的对等体发送具有数据ID k的检索命令。因此,在这一类型的消息被接收到时,worker首先确定对应于所请求的数据ID的容器是否已经存储在了数据存储库(例如,对应于worker的设备的本地数据存储库)中。如果容器已经存储在了数据存储库中,那么它可以将发送消息(例如,PUSH)提供回给请求对等体,其方式是对其进行调度,以便经由串行发送队列进行发送。如果所请求的数据ID尚未存储在数据存储库中,那么可以更新waiter集。例如,更新后的waiter集可以被表示为:
W←W∪({k},qs,send(p,k,·))
其中p是与请求数据的对等体的连接,并且send(p,k,x)是提供可以通过连接p发送的具有有效载荷(k,x)的发送消息的函数。
作业请求命令(例如,JOB)可以被发送至对等体,以请求其执行某项作业。例如,作业请求命令可以包含在第一作业请求消息530中,如图5所示。在一个实施方案中,作业消息的有效载荷可以描述上文结合图1A和图1B所述的抽象计算图内的作业节点的连接情况。在一个实施方案中,有效载荷可包括:作业所需的作为先决条件的输入数据ID的列表Kin;将在作业完成执行时生成的数据ID的列表Kout;以及函数索引j,其可以是进入可以由可移植代码获得的入口点的索引(例如,func_table)阵列的索引。例如,入口点可以对应于由编译后的可移植代码提供的用以执行作业的计算的函数。
与检索数据的情况一样,在接收到作业请求时,worker可以首先检查是否已经满足了输入依存关系,如果是,那么可以调度入口点,以便在并发工作队列上执行。如果作业被阻止,那么可以将其添加为waiter:
W←W∪(Kin,qw,func_table[j])。
在一种具体实施中,工作队列上的项目可以并发执行。由于系统确保了作业实施方面的一定水平的纯度,因而可以按照有效率的方式提供这一并发执行。这样允许可以并发执行的作业执行保持相对于彼此的不可知。因此,在作业完成时,其可以生成将被存储到一个或多个输出容器中的数据。因此,系统可以将这些添加至数据存储库,并且对正在等待此类数据的任何waiter解除阻止。因此,可以经由接收队列调用发送数据命令,就像新创建的容器是通过网络接收的一样。因此,在一个实施方案中,框架可以仅允许串行接收队列操纵worker的状态。
删除数据(例如,DELETE)命令可以指示worker从其数据存储库
D←{(k,x)∈D|k/=k'}中删除具有指定ID k'的数据。
如果在接收到消息时数据不在数据存储库内,那么该命令将什么都不做。应注意,DELETE命令不一定会作为waiter接受排队。
当不再需要worker连同其相关联的数据时,可以向worker提供去除worker(例如,DESTROY)命令。因此,当系统想要释放worker在主机设备上占用的资源时,可以使用这一命令。这可以被表征为worker等到waiter集为空并且发送队列和工作队列上的所有经调度操作均完成时的正常退出。因此,在一种具体实施中,一旦发出了销毁命令,就不可接受任何未来的PUSH或JOB命令。
应注意,上文描述的命令名称为示例,在实施方案中也可以设想其他具有等价功能的命令名称(例如,等价于“新建”命令的“创建命令”等等)。
如上文结合图4所论述的,worker(例如,worker 320)可以保持状态信息330,该状态信息可以被存储成状态(D,W)。状态可包括数据存储库D(例如,数据存储库340)和waiter集W(例如,waiter集345)。在一个实施方案中,数据存储库可以是将数据ID映射至容器的关联阵列。因此,在通过网络接收到数据时,或者在主机执行的作业产生数据时,可以将数据存储到数据存储库中。在一种具体实施中,可以将数据存储库模型化为一组秘钥(id k)值(容器x)对。
D={(k1,x1),...,(kn,xn)}。
Waiter集可包括worker在一个或多个容器可获得之前不能执行的操作(例如,计算)。这可包括作业节点以及由其他对等体提出的数据请求。因此,在一种具体实施中,这可以被模型化为一组waiter
W={w1,...,wm}。
在一种具体实施中,waiter wi可为包括一组输入依存关系、从属操作以及一旦满足了依存关系将在上面执行操作的执行队列。例如,需要容器xa、xb和xc的作业在其能够执行之前可以是waiter,其被表示为
w=({ka,kb,kc},q,f)
其中ka,b,c是对应于三个输入的数据ID,f(·,·,·)是在被提供以适当容器时可以执行所需作业的函数,q是将在其上计算f(xa,xb,xc)的执行队列。
在一个实施方案中,worker可以与三个执行队列相关联,三个执行队列可包括串行接收队列qr、串行发送队列qs和并发工作队列qw。在一个实施方案中,执行队列中的一者或多者可以被实施为调度队列(例如,libdispatch队列),其可以是管理所提交的任务(例如,作业)的对象结构。在一种具体实施中,调度队列可以是先进先出数据结构,相应地,所提交的任务可以是按照它们被添加到队列中的同样顺序执行的。在一个实施方案中,调度队列可以相对于调用方(例如,worker)异步或者同步执行任意代码块。例如,调度队列可以用于执行通常可以在单独线程上执行的任务。例如,在一些具体实施中,调度队列的一个优点在于,与对应的线程代码相比,它们管理起来更加简单或者在执行任务时更有效率。
如上文所述,可以按照串行接收队列接收传入消息的顺序处理传入消息。相应地,worker可以更新状态(D,W),并使用命令借助于这些消息执行操作,如下文所述。
如上文所述,数据节点包含作业可能需要的信息。数据可以是按照任何适当的格式结构化的。在一些实施方案中,数据节点可被实施为容器,容器封装执行作业所需的信息。单个容器可包括作业所需的全部数据,或者可以跨多个容器拆分数据。因此,数据节点可具有唯一标识符和对应的容器。此外,知道数据节点的标识符但不具有本地存储的对应容器的对等体可具有针对其值的占位符(或将来)。因此,在汇编计算时可以标引数据,并且作业可以继续进行,直到物化容器是必需的为止。因此,上文描述的配置可以缓解系统内对等体之间的延迟的影响,并且一旦容器存在,就可以将其(例如,暂时地)复制给其他对等体。
如所描述的,可以在使用容器结构的系统内分配数据。在一个实施方案中,容器结构可包括主体以及零个或更多extent,如本文进一步所述。主体可充当根对象,并且可以是具有已知长度的连续存储器阵列。主体可存储基元数据类型(或其聚合)。在一个实施方案中,容器结构的实施可以考虑广泛使用指针的编程语言(例如,C风格编程语言)。尽管指针在特定程序的语境下可以是有意义的,但是其在被运行时使用时通常不包含语意。例如,可能不知道指针指向一个项目还是阵列,或者指针标引的对象是如何分配的,或者对象标引的执行、修改等是否是安全的。容器可以在对等体之间传输,因此,容器内的数据可能必须是串行化的并且具有明确的所有权。由于与裸指针有关的缺陷,在一个实施方案中,出现在容器的主体内的任何指针都可以对应于extent并且具有相关联的extent记录。例如,extent记录可以提供裸指针缺失的语意。可以基于特定的使用情形提供extent的类型。例如,extent类型可包括调度blob和对象。调度blob可以是调度(例如,libdispatch)中使用的托管数据对象。这些可以是标引计数对象,其基础管理可以由libdispatch运行时执行。对象(例如,objective-C对象)可以由运行时(例如,Objective-C运行时)管理,并且还可以受到标引计数。通常,这些extent的存储器大小对于系统是未知的,但是也可以利用声明例如某个类的实例可以受到编码和解码(例如,NSCoding)的协议的具体实施确定。因此,这允许类对这些extent串行化和去串行化。
在一个实施方案中,容器可以被存储成连续存储器块,该连续存储器块包括描述容器大小和所有权的标头。随后是主体,再之后是extent记录。例如,在使用C风格编程语言的情况下,标头可以具有下述格式:
相应地,body_size可以对应于容器的主体的以字节计的长度;Extent_count可以对应于extent记录的数量并因此对应于出现在主体内的指针的数量,并且destructor可以对应于通知系统如何在完成时销毁容器的函数指针。此外,处于标头末尾的灵活阵列主体可以含有平面主体阵列和extent表格。主体阵列在运行时级别可以是非类型化的,但是extent记录可以符合以下C风格编程语言类型:
其中offset可指示对应指针的位置,并且可以从主体阵列的开始按字节测量。
作为示例,下文示出了Objective-C结构类型Foo:
图8是示出了根据本公开的实施方案的示例性数据容器的图示。容器可包括主体大小721、extent计数722、主体723和extent记录724。如该示例中所示,该图示出了根据本公开的一个实施方案如何在数据容器720中使数据类型Foo结构化。因此,成员Foo.blob可以对应于libdispatch blob(例如,dispatch_data_t被typedefed成针对不透明类型struct dispatch_data_s的指针),Foo.bar.name可以对应于针对类型NSString的Objective-C对象的指针。因此,这两种指针都可能需要extent记录。如该示例中所示,类型Foo的容器布局可由连续主体阵列构造而成。因此,在主体内出现的任何指针可标引存储器中的不相交区域,并且可具有描述对应对象的特征的附带extent记录。
图9是示出了根据本公开的实施方案的数据容器(例如,容器720)内的线性化数据的示例的图示。在一种具体实施中,系统可以执行将容器写入流式设备的串行化,诸如文件或网络连接。由于对可以存储在容器内的内容的限制,系统可以有效率地实施其串行化。例如,容器的标头、主体和extent表格可以是连续存储器阵列730,因而可能已经处于串行化状态。此外,如果存在任何extent,那么这些可以存储在完全不同的存储器位置,并且相应地可能必须被转化成平面阵列并附加到主体上。这一操作可以根据extent的类型完成。
如上所述,系统中的作业节点可将零个或多个数据节点转换为一个或多个其他数据节点。因此,可以在作业节点能够被执行之前计算输入先决条件。
在一种具体实施中,系统可以具有提高的灵活性,从而在作业节点表示纯函数的情况下优化执行。例如,这可包括作业的输出可以仅取决于其输入(例如,没有副作用)。例如,在标准C库内,函数
float sin(float x)
是纯函数,因为其返回值仅取决于x的值。另一方面,
void*malloc(size_t size)
不是纯函数,因为其返回值不仅取决于大小值,还取决于基础平台的存储器状态。它还具有副作用,因为如果分配成功,那么在调用之后堆将变得不同。
通常,纯作业提供标引透明性,其允许将计算的输出交换成对计算的描述连同其输入值。如上所述,数据节点可以使用已命名但未物化的数据节点作为占位符。由于标引透明性,这样做是可能的(例如,客户端可以使用对计算的描述来替代其输出值)。
如所描述的,作业可以执行系统内的工作。在一个实施方案中,作业可以采用单个函数作为其接受两个实际参数的入口点。例如,在C风格编程语言具体实施中,作业可包括如下入口点
在该示例中,第一实际参数是表示针对作业节点的n个有序输入的数据容器的阵列。在该示例中,这些将被作为常数处理,并且不会被作业修改。第二个实际参数是m个空容器构成的阵列。这可以是旨在受到覆写的输出的目的地。基数m和n可以是隐式的。换句话讲,系统可假定这些对于作业实现器而言是静态已知的。作为示例,考虑对两个阵列内的字节值求平均的函数
dispatch_data_t blend(dispatch_data_t im1,
dispatch_data_t im2)
其采用两个含有相同长度的字节阵列的libdispatch blob作为输入,并返回包含两个输入的平均值的blob。在系统执行这一操作时,系统可以首先确定作业的拓扑结构。虽然可以确定作业刚好只有一个输出,但是系统可能还是必须要确定需要多少个输入。如上所述,数据容器可含有不止一个值。因此,可能存在既包含im1又包含im2的单输入容器,或者可以将这些拆分成两个输入。
图10是示出了根据本公开的实施方案使用一个或两个容器的混合函数的示例的图示。如图所示,拓扑结构可包括对一个容器820或者两个(或更多)容器830的使用。对作业拓扑结构的选择可以由更高级别的应用确定。例如,如果有两个输入,那么可以获得更高的有关能够在何处以及何时生成输入对象的灵活性,其代价是要管理更加复杂的计算图。例如,如果选择第二作业拓扑结构(例如,830),其中作业有两个输入对象;那么下述代码是在作业入口点内提供的blend的示例性配置。
应注意,上文的示例性代码是对例如系统的运行时的设计的举例说明。然而,也可以设想其他实施方案。
图11是根据本公开的实施方案的响应于获取了所需的一组输入数据而执行过程的方法的流程图。过程900可以使用处理逻辑器,处理逻辑部件可包括软件、硬件或其组合。例如,过程900可以由系统(或设备110)执行。在910中,第一设备(例如,设备304)可以使用一级协议(例如,一级协议350)接收来自第二设备(例如,设备302)的第一消息。第一消息可包括可移植代码,可移植代码在被编译后提供通过分布式计算系统内的第一设备执行计算的一个或多个函数。在920中,在确定可移植代码在第一设备上执行是安全的之后,第一设备可编译可移植代码,以提供用于作业的一个或多个函数。在930中,第一设备可以使用二级协议(例如,二级协议350)接收来自第二设备的第二消息,第二消息包括第一作业请求。第一作业请求可包括对将由第一设备执行的第一函数的指示以及对用以执行第一函数的所需的一组输入数据的指示。在940中,第一设备还可以使用二级协议接收来自第三设备(例如,设备506)的第三消息。第三消息可包括第一数据容器,第一设备可以将数据存储到第一设备的数据存储库内。在950中,第一设备可以响应于获取了所需的一组输入数据而执行第一函数,以执行履行第一作业请求的计算。在一个实施方案中,获取所需的一组输入数据可包括确定所需的一组输入数据存储在第一设备的数据存储库内,并从数据存储库中检索到所需的一组输入数据。此外,在一个实施方案中,获取所需的一组输入数据可包括确定所需的一组输入数据的至少部分不存储在第一设备的数据存储库中,并且作为响应,从第三设备检索所需的一组输入数据中的未存储在数据存储库内的部分。
在960中,第一设备可以将来自第一进程的输出存储到第二数据容器内。因此,在970中,第一设备可以将包括第二容器的第四消息发送至第四设备(例如,设备508)。
图12是根据本公开的实施方案的分析和编译可移植代码的方法的流程图。过程1000可以使用处理逻辑部件,处理逻辑部件可包括软件、硬件或其组合。例如,过程1000可以由系统(或设备110)执行。在1010中,第一设备可使用无线协议进行接收。第一消息可包括可移植代码,可移植代码是作为不可执行数据接收的,并且在受到执行时允许第一设备与包括第二设备在内的一个或多个其他设备共享分布式计算系统内的资源。在1020中,第一设备可分析可移植代码以确定其编译和执行是否安全。在一个实施方案中,分析可包括检查可移植代码的控制流完整性。在1030中,第一设备可接收第一数据容器并将数据存储到数据存储库内。在1040中,第一设备可编译可移植代码,以允许第一设备针对作业请求执行一项或多项计算。作业请求可包括对第一计算的指示以及对所需的一组输入数据的指示。因此,在1050中,第一设备可响应于获取了所需的一组输入数据而执行第一计算。
图13是示出了可以与本公开的实施方案中的一者或多者一起使用的示例性计算系统的框图。例如,计算系统1200(或系统,或计算设备,或设备)可表示本文描述的执行本公开的任何过程、操作或方法的系统或设备中的任何系统或设备(例如,设备110)。需注意,虽然计算系统例示了各种部件,但是其并不旨在表示部件的任何特定架构或者部件的互连方式,因为此类细节与本公开并无密切关系。还应理解,也可以将与图示相比具有更少或更多部件的其他类型的系统与本公开结合使用。
如图所示,计算系统1200可包括总线1205,总线1205可耦接至处理器1210、ROM(只读存储器)1220、RAM(或易失性存储器)1225和存储装置(或非易失性存储器)1230。处理器1210可以从存储器1220、1225和1230中的一者或多者检索所存储的指令并执行指令,以执行本文所述的过程、操作或方法。这些存储器表示包含指令的非暂态机器可读介质(或者非暂态计算机可读介质或存储装置),指令在通过计算系统(或者处理器)执行时使计算系统(或处理器)执行本文所述的操作、过程或方法。RAM 1225可以被实施为例如动态RAM(DRAM)或者需要持续供电以刷新或保持存储器内的数据的其他类型的存储器。存储装置1230可包括例如磁性存储装置、半导体存储装置、磁带存储装置、光学存储装置、可拆卸存储装置、不可拆卸存储装置以及其他类型的即使在去除对系统的供电之后仍然保持数据的存储装置。应当理解,存储装置1230可以相对于系统处于远程位置(例如,可经由网络访问)。
显示控制器1250可以耦接至总线1205,以便接收将要在显示设备1255上显示的显示数据,显示设备1255可显示用户界面特征或本文所述实施方案中的任一者,并且可以是本地或远程显示设备。计算系统1200还可包括一个或多个输入/输出(I/O)部件1265,包括鼠标、键盘、触摸屏、网络接口、打印机、扬声器和其他设备。通常,输入/输出部件1265通过输入/输出控制器1260耦接至系统。
模块1270(或者部件、单元或逻辑部件)可以表示本文描述的部件中的任何部件(例如,守护进程310或worker 320)。模块1270可以完全或者至少部分地驻留在上文所述的存储器内,或者在计算系统对其执行期间驻留在处理器内。此外,模块1270可以被实施为软件、固件或计算系统内的功能电路或者它们的组合。
需注意,本文描述的流程图或步骤(或操作)可以存在变化,而不脱离本文所述的实施方案。例如,步骤可以并行、同时或者按照不同的顺序执行,或者可以添加、删除或修改步骤。类似地,可以包含文本所述的框图作为示例。这些配置并未穷举所有的部件,因而可以存在针对这些图示的变型。可以采用其他布置和部件而不脱离本文所述的实施方案。例如,可以添加或者省略部件,并且各部件可以按照本领域技术人员已知的各种方式相互作用。本文可能采用诸如第一、第二等词语描述各种要素,但是这些要素不应受到这些词语的限制。这些词语可以用于将一个要素与另一要素区分开。例如,第一设备可以被称为第二设备,类似地,第二设备可以被称为第一设备。
在前面的说明书中,已经描述了本公开的示例性实施方案。显然,可以对本公开的示例性实施方案做出各种修改,而不脱离下述权利要求书中阐述的本公开的更宽的实质和范围。相应地,说明书和附图被视为是例示性意义而不是限定性意义。
Claims (33)
1.一种存储指令的非暂态机器可读介质,所述指令当由计算设备的一个或多个处理器执行时,使得所述计算设备执行包括下述操作的操作:
使用一级协议并且由第一设备上的守护进程接收来自第二设备的第一消息,所述第一消息包括可移植代码,所述可移植代码在被编译时提供一个或多个函数以由分布式计算系统内的所述第一设备执行计算,其中所述一级协议包括一级命令消息传送协议;使用二级协议并且由所述守护进程创建的worker进程接收来自所述第二设备的第二消息,所述第二消息包括第一作业请求,其中所述第一作业请求包括对所述一个或多个函数中的第一函数的指示以及对执行所述第一函数所需的一组输入数据的指示,其中所述二级协议包括不同于所述一级命令消息传送协议的二级命令消息传送协议,其中所述worker进程管理不同于所述一级协议的消息的包括所述第二消息的所述二级协议的消息,其中所述worker进程由所述守护进程实例化;
响应于所述worker进程接收到所述第二消息,编译所述可移植代码对应于所述第一函数的部分而不编译所述可移植代码包括第三函数的其余部分;以及
响应于所述第一设备获取了所述所需的一组输入数据,所述第一设备执行所述第一函数以执行所述计算以履行所述第一作业请求。
2.根据权利要求1所述的介质,所述操作还包括响应于接收到所述第一作业请求,JIT(即时)编译所述可移植代码对应于所述第一函数的部分。
3.根据权利要求1所述的介质,其中所述第一消息包括所述一个或多个函数的索引,并且所述第一作业请求的对所述第一函数的所述指示包括所述索引内对应于所述第一函数的值。
4.根据权利要求1所述的介质,其中所述第二设备基于所述第一设备的一个或多个特征来选择所述第一设备以执行所述第一作业请求,其中所述一个或多个特征包括所述第一设备的处理能力和当前电源。
5.根据权利要求1所述的介质,所述操作还包括:
使用所述二级协议在所述第一设备处接收来自第三设备的第三消息,所述第三消息包括第一数据容器,以及
将所述数据存储在所述第一设备的数据存储库中。
6.根据权利要求5所述的介质,其中获取所述所需的一组输入数据包括:
确定所述所需的一组输入数据存储在所述第一设备的所述数据存储库中,以及
从所述数据存储库检索所述所需的一组输入数据。
7.根据权利要求6所述的介质,其中所述第一作业请求还包括对第二数据容器的标引,以存储来自所述第一函数的输出数据,并且其中所述操作还包括:
将来自所执行的第一函数的所述输出数据存储在所述第二数据容器中;以及
使用所述二级协议将第四消息发送到第四设备,所述第四消息包括所述第二数据容器。
8.根据权利要求1所述的介质,其中获取所述所需的一组输入数据包括:
确定所述所需的一组输入数据的至少一部分未存储在所述第一设备的数据存储库中,并且作为响应,从第三设备检索所述所需的一组输入数据的未存储在数据存储库中的所述至少一部分。
9.根据权利要求8所述的介质,其中检索所述所需的一组输入数据的所述至少一部分包括:
使用所述二级协议将第三消息从所述第一设备发送到所述第三设备,所述第三消息包括对第一数据容器的请求,所述请求包括标识所述所需的一组输入数据的所述至少一部分的一个或多个标引,以及
使用所述二级协议在所述第一设备处接收来自所述第三设备的第四消息,所述第四消息包括所述第一数据容器,所述第一数据容器包括所述所需的一组输入数据的所述至少一部分。
10.根据权利要求1所述的介质,其中获取所述所需的一组输入数据包括:
确定所述所需的一组输入数据的至少一部分未存储在所述第一设备的数据存储库中,并且作为响应,执行所述一个或多个函数中的第二函数以执行针对所述第一设备的作业队列内的第二作业的计算,其中所执行的第二函数输出所述所需的一组输入数据的所述至少一部分。
11.根据权利要求1所述的介质,其中所述一级协议至少包括创建所述worker进程的第一命令,以及允许所述分布式计算系统内的另一设备连接到所述worker进程的第二命令。
12.根据权利要求1所述的介质,其中所述二级协议至少包括向所述分布式计算系统内的另一设备发送数据容器的第一命令,以及从所述分布式计算系统内的另一设备检索数据容器的第二命令。
13.根据权利要求7所述的介质,其中存储来自所述第一函数的所述输出数据的所述第二数据容器是容器阵列。
14.一种用于计算的第一设备,包括:
存储器,所述存储器存储指令;和
处理器,所述处理器耦接至所述存储器以执行来自所述存储器的所述指令,所述处理器被配置为:
使用一级协议接收来自第二设备的第一消息,所述第一消息包括可移植代码,所述可移植代码在被编译时提供一个或多个函数以由分布式计算系统内的所述第一设备执行计算,其中所述一级协议包括一级命令消息传送协议;
使用二级协议接收来自所述第二设备的第二消息,所述第二消息包括第一作业请求,其中所述第一作业请求包括对所述一个或多个函数中的第一函数的指示、对执行所述第一函数的所需的一组输入数据的指示和对用以存储来自所述第一函数的输出数据的第一数据容器的标引,其中所述二级协议包括不同于所述一级命令消息传送协议的二级命令消息传送协议,其中守护进程管理所述一级协议的消息并且与所述守护进程分开的worker进程管理不同于所述一级协议的消息的所述二级协议的消息,其中所述worker进程由所述守护进程实例化;
响应于接收到所述第二消息,在确定所述可移植代码在所述第一设备上执行是安全的之后编译所述可移植代码对应于所述第一函数的部分而不编译所述可移植代码包括第三函数的其余部分,
以创建所述第一函数;以及
响应于所述第一设备获取了所述所需的一组输入数据,所述第一设备执行所述第一函数以执行所述计算以履行所述第一作业请求。
15.根据权利要求14所述的设备,其中所述一级协议包括守护进程级协议,并且所述二级协议包括worker级协议。
16.根据权利要求14所述的设备,其中所述处理器被进一步配置为:
将来自由所述第一设备执行的所述第一函数的所述输出数据存储在所述第一数据容器中;以及
将所述第一数据容器发送到第三设备。
17.一种计算机实现的方法,包括:
使用无线协议在第一设备上接收包括可移植代码的第一消息,所述可移植代码是作为不可执行数据接收的并且在被执行时,允许所述第一设备与包括第二设备在内的一个或多个其他设备共享分布式计算系统内的资源;
在所述第一设备上分析所述可移植代码,以确定所述可移植代码在所述第一设备上执行是否安全;
在所述第一设备处接收第一数据容器,并且将所述数据存储在所述第一设备的数据存储库中;
在所述第一设备处编译所述可移植代码,以允许所述第一设备执行针对作业请求的一项或多项计算,其中所述作业请求包括对将由所述第一设备执行的第一计算的指示,以及对所述第一数据容器中的执行所述第一计算所需的一组输入数据的指示,其中编译所述可移植代码包括响应于接收到第二消息编译所述可移植代码对应于第一函数的部分而不编译所述可移植代码包括第三函数的其余部分,其中守护进程管理包括第一消息的一级协议的消息并且worker进程管理不同于所述一级协议的消息的包括第二消息的二级协议的消息,其中所述worker进程由所述守护进程实例化;以及
响应于所述第一设备获取了所述所需的一组输入数据,由所述第一设备执行针对所述作业请求的所述第一计算。
18.根据权利要求17所述的方法,其中所述分析包括检查控制流完整性,并且所述第一设备创建第二数据容器以存储来自所述作业的输出数据,并且其中所述方法还包括:
将来自由所述第一设备执行的所述作业的所述输出数据存储在所述第二数据容器中;以及
将所述第二数据容器发送到所述第二设备。
19.一种计算机实现的方法,包括:
使用一级协议并且由第一设备上的守护进程接收来自第二设备的第一消息,所述第一消息包括可移植代码,所述可移植代码在被编译时提供一个或多个函数以由分布式计算系统内的所述第一设备执行计算,其中所述一级协议包括一级命令消息传送协议;使用二级协议并且由所述守护进程所创建的worker进程接收来自所述第二设备的第二消息,所述第二消息包括第一作业请求,其中所述第一作业请求包括对所述一个或多个函数中的第一函数的指示以及对执行所述第一函数所需的一组输入数据的指示,其中所述二级协议包括不同于所述一级命令消息传送协议的二级命令消息传送协议,其中所述worker进程管理不同于所述一级协议的消息的包括所述第二消息的所述二级协议的消息,其中所述worker进程由所述守护进程实例化;
响应于所述worker进程接收到所述第二消息,编译所述可移植代码对应于所述第一函数的部分而不编译所述可移植代码包括第三函数的其余部分;以及
响应于所述第一设备获取了所述所需的一组输入数据,所述第一设备执行所述第一函数以执行所述计算以履行所述第一作业请求。
20.根据权利要求19所述的方法,还包括响应于接收到所述第一作业请求,JIT(即时)编译所述可移植代码对应于所述第一函数的部分。
21.根据权利要求19所述的方法,其中所述第一消息包括所述一个或多个函数的索引,并且对所述第一作业请求的所述第一函数的所述指示包括所述索引内对应于所述第一函数的值。
22.根据权利要求19所述的方法,其中所述第二设备基于所述第一设备的一个或多个特征来选择所述第一设备以执行所述第一作业请求,其中所述一个或多个特征包括所述第一设备的处理能力和当前电源。
23.根据权利要求19所述的方法,还包括:
使用所述二级协议在所述第一设备处接收来自第三设备的第三消息,所述第三消息包括第一数据容器,以及
将所述数据存储在所述第一设备的数据存储库中。
24.根据权利要求23所述的方法,其中获取所述所需的一组输入数据包括:
确定所述所需的一组输入数据存储在所述第一设备的所述数据存储库中,以及
从所述数据存储库检索所述所需的一组输入数据。
25.根据权利要求24所述的方法,其中所述第一作业请求还包括对第二数据容器的标引,以存储来自所述第一函数的输出数据,并且其中所述方法还包括:
将来自所执行的第一函数的所述输出数据存储在所述第二数据容器中;以及
使用所述二级协议将第四消息发送到第四设备,所述第四消息包括所述第二数据容器。
26.根据权利要求19所述的方法,其中获取所述所需的一组输入数据包括:
确定所述所需的一组输入数据的至少一部分未存储在所述第一设备的数据存储库中,并且作为响应,从第三设备检索所述所需的一组输入数据的未存储在数据存储库中的所述至少一部分。
27.根据权利要求26所述的方法,其中检索所述所需的一组输入数据的所述至少一部分包括:
使用所述二级协议将第三消息从所述第一设备发送到所述第三设备,所述第三消息包括对第一数据容器的请求,所述请求包括标识所述所需的一组输入数据的所述至少一部分的一个或多个标引,以及
使用所述二级协议在所述第一设备处接收来自所述第三设备的第四消息,所述第四消息包括所述第一数据容器,所述第一数据容器包括所述所需的一组输入数据的所述至少一部分。
28.根据权利要求19所述的方法,其中获取所述所需的一组输入数据包括:
确定所述所需的一组输入数据的至少一部分未存储在所述第一设备的数据存储库中,并且作为响应,执行所述一个或多个函数中的第二函数以执行针对所述第一设备的作业队列内的第二作业的计算,其中所执行的第二函数输出所述所需的一组输入数据的所述至少一部分。
29.根据权利要求19所述的方法,其中所述一级协议至少包括创建所述worker进程的第一命令,以及允许所述分布式计算系统内的另一设备连接到所述worker进程的第二命令。
30.根据权利要求19所述的方法,其中所述二级协议至少包括向所述分布式计算系统内的另一设备发送数据容器的第一命令,以及从所述分布式计算系统内的另一设备检索数据容器的第二命令。
31.根据权利要求25所述的方法,其中存储来自所述第一函数的所述输出数据的所述第二数据容器是容器阵列。
32.一种用于计算的第一设备,包括:
存储器,所述存储器存储指令;和
处理器,所述处理器耦接至所述存储器以执行来自所述存储器的所述指令,所述处理器被配置为执行根据权利要求19至31中任一项所述的方法。
33.一种用于计算操作的装置,包括用于执行根据权利要求19至31中任一项所述的方法的操作的单元。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311775808.2A CN117591299A (zh) | 2016-09-23 | 2017-09-12 | 针对异构设备类型的对等分布式计算系统 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/274,748 | 2016-09-23 | ||
US15/274,748 US10768979B2 (en) | 2016-09-23 | 2016-09-23 | Peer-to-peer distributed computing system for heterogeneous device types |
PCT/US2017/051202 WO2018057352A1 (en) | 2016-09-23 | 2017-09-12 | Peer-to-peer distributed computing system for heterogeneous device types |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311775808.2A Division CN117591299A (zh) | 2016-09-23 | 2017-09-12 | 针对异构设备类型的对等分布式计算系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109791502A CN109791502A (zh) | 2019-05-21 |
CN109791502B true CN109791502B (zh) | 2024-01-12 |
Family
ID=59969235
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780058414.1A Active CN109791502B (zh) | 2016-09-23 | 2017-09-12 | 针对异构设备类型的对等分布式计算系统 |
CN202311775808.2A Pending CN117591299A (zh) | 2016-09-23 | 2017-09-12 | 针对异构设备类型的对等分布式计算系统 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311775808.2A Pending CN117591299A (zh) | 2016-09-23 | 2017-09-12 | 针对异构设备类型的对等分布式计算系统 |
Country Status (6)
Country | Link |
---|---|
US (2) | US10768979B2 (zh) |
EP (2) | EP3458956B1 (zh) |
KR (1) | KR102208867B1 (zh) |
CN (2) | CN109791502B (zh) |
AU (1) | AU2017330520B2 (zh) |
WO (1) | WO2018057352A1 (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11663085B2 (en) * | 2018-06-25 | 2023-05-30 | Rubrik, Inc. | Application backup and management |
US10503612B1 (en) | 2018-06-25 | 2019-12-10 | Rubrik, Inc. | Application migration between environments |
CN111124332B (zh) * | 2019-11-18 | 2024-03-01 | 北京小米移动软件有限公司 | 设备呈现内容的控制方法、控制装置及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102932957A (zh) * | 2012-10-19 | 2013-02-13 | 中国人民解放军理工大学 | 一种虚拟重构的异构融合泛在网络体系架构 |
CN103685535A (zh) * | 2013-12-20 | 2014-03-26 | 广东电子工业研究院有限公司 | 一种大规模分布异构数据处理的云数据库系统接口设计 |
CN103685416A (zh) * | 2012-09-20 | 2014-03-26 | 联想(北京)有限公司 | 分布式任务分配与认领方法以及电子设备 |
Family Cites Families (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5758186A (en) | 1995-10-06 | 1998-05-26 | Sun Microsystems, Inc. | Method and apparatus for generically handling diverse protocol method calls in a client/server computer system |
US7395536B2 (en) | 2002-11-14 | 2008-07-01 | Sun Microsystems, Inc. | System and method for submitting and performing computational tasks in a distributed heterogeneous networked environment |
US8176480B1 (en) * | 2006-02-27 | 2012-05-08 | Symantec Operating Corporation | Adaptive instrumentation through dynamic recompilation |
US8402455B2 (en) * | 2008-03-17 | 2013-03-19 | Landis+Gyr Innovations, Inc. | Methods and systems for distributing firmware through an over-the-air network |
US8887163B2 (en) * | 2010-06-25 | 2014-11-11 | Ebay Inc. | Task scheduling based on dependencies and resources |
US20120047504A1 (en) * | 2010-08-17 | 2012-02-23 | Robert Paul Morris | Methods, systems, and computer program products for maintaining a resource based on a cost of energy |
US9141360B1 (en) | 2011-03-16 | 2015-09-22 | Google Inc. | Web application module translation service |
US8515350B2 (en) | 2011-04-11 | 2013-08-20 | Qualcomm Innovation Center, Inc. | Resolving an application service change in a system using bluetooth |
GB201107978D0 (en) | 2011-05-13 | 2011-06-29 | Antix Labs Ltd | Method of distibuting a multi-user software application |
US9110940B2 (en) * | 2012-02-29 | 2015-08-18 | Red Hat, Inc. | Supporting transactions in distributed environments using a local copy of remote transaction data and optimistic locking |
US10425411B2 (en) * | 2012-04-05 | 2019-09-24 | Arizona Board Of Regents On Behalf Of Arizona State University | Systems and apparatuses for a secure mobile cloud framework for mobile computing and communication |
US9411637B2 (en) | 2012-06-08 | 2016-08-09 | Apple Inc. | Adaptive process importance |
US20140095695A1 (en) * | 2012-09-28 | 2014-04-03 | Ren Wang | Cloud aware computing distribution to improve performance and energy for mobile devices |
US20140105273A1 (en) * | 2012-10-15 | 2014-04-17 | Broadcom Corporation | Adaptive power management within media delivery system |
US9110661B2 (en) * | 2012-12-28 | 2015-08-18 | International Business Machines Corporation | Mobile device offloading task to a peer device and receiving a completed task when energy level is below a threshold level |
US9300760B2 (en) | 2013-01-28 | 2016-03-29 | Google Inc. | Machine-specific instruction set translation |
US9342557B2 (en) | 2013-03-13 | 2016-05-17 | Cloudera, Inc. | Low latency query engine for Apache Hadoop |
US9392054B1 (en) | 2013-05-31 | 2016-07-12 | Jisto Inc. | Distributed cloud computing platform and content delivery network |
US9390260B2 (en) * | 2014-06-09 | 2016-07-12 | Lehigh University | Methods for enforcing control flow of a computer program |
CN106663003A (zh) * | 2014-06-13 | 2017-05-10 | 查尔斯斯塔克德拉珀实验室公司 | 用于软件分析的系统和方法 |
EP2958044B1 (en) * | 2014-06-20 | 2019-09-18 | Secure-IC SAS | A computer implemented method and a system for controlling dynamically the execution of a code |
CN105530163A (zh) * | 2014-10-22 | 2016-04-27 | 阿里巴巴集团控股有限公司 | 发送信息的方法及其系统 |
US10120904B2 (en) * | 2014-12-31 | 2018-11-06 | Cloudera, Inc. | Resource management in a distributed computing environment |
US10397373B2 (en) * | 2015-05-20 | 2019-08-27 | Qualcomm Incorporated | Renewing registrations for client applications installed on different proximate client devices |
US10111024B2 (en) * | 2015-07-10 | 2018-10-23 | Lg Electronics Inc. | Method and apparatus for an input data processing via a local computing or offloading based on power harvesting in a wireless communication system |
US11683393B2 (en) * | 2019-09-11 | 2023-06-20 | Intel Corporation | Framework for computing in radio access network (RAN) |
US20230308853A1 (en) * | 2020-07-24 | 2023-09-28 | Intel Corporation | Computing workload management in next generation cellular networks |
-
2016
- 2016-09-23 US US15/274,748 patent/US10768979B2/en active Active
-
2017
- 2017-09-12 WO PCT/US2017/051202 patent/WO2018057352A1/en unknown
- 2017-09-12 KR KR1020197003669A patent/KR102208867B1/ko active IP Right Grant
- 2017-09-12 CN CN201780058414.1A patent/CN109791502B/zh active Active
- 2017-09-12 EP EP17772807.8A patent/EP3458956B1/en active Active
- 2017-09-12 EP EP23189081.5A patent/EP4242846A3/en active Pending
- 2017-09-12 CN CN202311775808.2A patent/CN117591299A/zh active Pending
- 2017-09-12 AU AU2017330520A patent/AU2017330520B2/en active Active
-
2020
- 2020-08-18 US US16/947,803 patent/US20210034418A1/en active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103685416A (zh) * | 2012-09-20 | 2014-03-26 | 联想(北京)有限公司 | 分布式任务分配与认领方法以及电子设备 |
CN102932957A (zh) * | 2012-10-19 | 2013-02-13 | 中国人民解放军理工大学 | 一种虚拟重构的异构融合泛在网络体系架构 |
CN103685535A (zh) * | 2013-12-20 | 2014-03-26 | 广东电子工业研究院有限公司 | 一种大规模分布异构数据处理的云数据库系统接口设计 |
Also Published As
Publication number | Publication date |
---|---|
EP4242846A2 (en) | 2023-09-13 |
AU2017330520A1 (en) | 2019-01-17 |
AU2017330520B2 (en) | 2020-02-27 |
KR20190026860A (ko) | 2019-03-13 |
CN109791502A (zh) | 2019-05-21 |
US10768979B2 (en) | 2020-09-08 |
EP3458956B1 (en) | 2023-11-01 |
CN117591299A (zh) | 2024-02-23 |
KR102208867B1 (ko) | 2021-01-27 |
EP4242846A3 (en) | 2023-11-01 |
US20210034418A1 (en) | 2021-02-04 |
WO2018057352A1 (en) | 2018-03-29 |
EP3458956A1 (en) | 2019-03-27 |
US20180088986A1 (en) | 2018-03-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3667496B1 (en) | Distributed computing system, data transmission method and device in distributed computing system | |
KR102234427B1 (ko) | 국소화된 디바이스 조정기에서의 요구 시 코드 실행 | |
JP6935496B2 (ja) | メッセージングプロトコル通信の管理 | |
US8918448B2 (en) | Application component decomposition and deployment | |
US9778967B2 (en) | Sophisticated run-time system for graph processing | |
Bomans et al. | The Argonne/GMD macros in FORTRAN for portable parallel programming and their implementation on the Intel iPSC/2 | |
US7246167B2 (en) | Communication multiplexor using listener process to detect newly active client connections and passes to dispatcher processes for handling the connections | |
US9086924B2 (en) | Executing a distributed java application on a plurality of compute nodes | |
US9304835B1 (en) | Optimized system for analytics (graphs and sparse matrices) operations | |
US20210034418A1 (en) | Peer-to-peer distributed computing system for heterogeneous device types | |
WO2011134689A1 (en) | Compiling software for a hierarchical distributed processing system | |
US9348661B2 (en) | Assigning a unique identifier to a communicator | |
CN111165052A (zh) | 启用量子计算的云环境中的作业处理 | |
US20140282612A1 (en) | Acknowledging Incoming Messages | |
CN109196476A (zh) | 共享垃圾收集器的不同类型图之间的无缝高性能互操作性 | |
US10579520B2 (en) | Multi-ring shared, traversable, and dynamic advanced database | |
Manjaly et al. | Tasktracker aware scheduling for hadoop mapreduce | |
KR100738004B1 (ko) | 하이브리드 p2p 네트워크 지능형 분산 컴파일러 시스템및 그 방법과 상기 방법을 실현시키기 위한 프로그램을기록한 컴퓨터로 읽을 수 있는 기록매체 | |
KR102443171B1 (ko) | 이기종 컴퓨팅 환경에서 데이터 타입 변환을 지원하기 위한 시스템 및 방법 | |
CN110968422A (zh) | 用于集成场景的负载分发 | |
US9628401B2 (en) | Software product instance placement | |
US9442782B2 (en) | Systems and methods of interface description language (IDL) compilers | |
Pellegrini et al. | A lightweight C++ interface to MPI | |
US10664342B2 (en) | Leak protection of executables with debug information | |
JP2005228309A (ja) | ルールに基づいて決定的に行う、コードへのオブジェクトのディスパッチ |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |