用于基于代理的多线程消息传递通信的技术的制作方法

文档序号:12142063阅读:174来源:国知局
用于基于代理的多线程消息传递通信的技术的制作方法与工艺

利用根据由国防部授予的合同号H98230-13-D-0124的政府支持而做出本发明。政府在本发明中具有某些权利。

对相关美国专利申请的交叉引用

本申请要求于2014年9月9日提交的、标题为“TECHNOLOGIES FOR PROXY-BASED MULTI-THREADED MESSAGE PASSING COMMUNICATION”的美国实用专利申请序号14/481,686的优先权。



背景技术:

高性能计算(HPC)应用典型地在计算集群上执行计算,所述计算集群包括通过高速网络结构连接的许多单独的计算节点。典型的计算集群可以包括数百个或数千个单独的节点。每个节点可以包括若干处理器、处理器核或者其它并行计算资源。典型的计算工作因此可以通过跨每个计算节点和跨整个计算集群分布的大量单独的进程来执行。

工作内的进程可以使用消息传递通信范式彼此传送数据。特别地,许多HPC应用可以使用消息传递接口(MPI)库来执行消息传递操作,诸如发送或接收消息。MPI是由MPI论坛维护的流行消息传递库并且已经针对众多计算语言、操作系统和HPC计算平台而实现。在使用中,给予每个进程典型地是整数的MPI次序(rank),其用于标识MPI执行中的进程。MPI次序类似于网络地址并且可以由进程使用以发送和接收消息。MPI支持包括两侧发送和接收操作、诸如缩减和屏障之类的集体操作以及诸如得到(get)和放置(put)之类的一侧通信操作的操作。

许多HPC应用越来越多地使用共享存储器多进程模型执行计算。例如,HPC应用可以使用共享存储器多进程应用编程接口(API),诸如OpenMP。作为结果,许多当前HPC应用进程是多线程的。增加每HPC进程的处理器核或线程的数目可以改进节点资源利用并且因而提高计算性能。许多系统MPI实现是线程安全的或者可以以其它方式在多线程模式中执行。然而,同时执行多个MPI操作可能通过增加的开销而降低总体性能。例如,典型的MPI实现向每个进程分配单个MPI次序而不管在进程内执行的线程的数目。多线程MPI实现还可能引入其它线程开销,例如与线程同步和共享的通信状态相关联的开销。在一些实现中,为了避免线程开销,多线程应用可以将所有MPI通信汇集到单个线程;然而,该单线程可能不能够充分利用可用联网资源。

附图说明

在附图中作为示例而非作为限制图示了本文中描述的概念。为了图示的简单和清楚,在图中图示的元件不必然地按比例绘制。在被认为适当的情况下,在图之间重复了参考标记以指示对应或类似的元件。

图1是用于基于代理的多线程消息传递的系统的至少一个实施例的简化框图;

图2是图示了可以在图1的系统的一个实施例中实现的样本结果的图表;

图3是可以由图1的计算节点建立的环境的至少一个实施例的简化框图;

图4是可以由图1和3的计算节点建立的应用编程接口(API)堆栈的至少一个实施例的简化框图;以及

图5是可以由图1和3的计算节点执行的用于基于代理的多线程消息传递的方法的至少一个实施例的简化流程图。

具体实施方式

虽然本公开的概念易受各种修改和替代形式影响,但是其具体实施例已经被在图中示出作为示例并且将被在本文中详细地描述。然而,应当理解,不存在将本公开的概念限于所公开的特定形式的意图,而相反,意图是涵盖与本公开和所附权利要求书一致的所有修改、等同和替代。

在说明书中对“一个实施例”、“实施例”、“说明性实施例”等的引用指示所描述的实施例可以包括特定特征、结构或特性,但是每个实施例可能或者可能不必然地包括该特定特征、结构或特性。此外,这样的短语不必然地指的是同一实施例。另外,当结合实施例描述特定特征、结构或特性时,主张:结合不论是否被明确地描述的其它实施例实现这样的特征、结构或特性在本领域技术人员的知识内。附加地,应当领会,在以“A、B和C中的至少一个”的形式的列表中所包括的项目可以意味着(A);(B);(C);(A和B);(A和C);(B和C);或者(A、B和C)。类似地,在以“A、B或C中的至少一个”的形式列出的项目可以意味着(A);(B);(C);(A和B);(A和C);(B和C);或者(A、B和C)。

在一些情况下可以以硬件、固件、软件或其任何组合来实现所公开的实施例。所公开的实施例还可以被实现为由一个或多个瞬时或非瞬时机器可读(例如,计算机可读)存储介质承载或者在其上存储的指令,所述指令可以由一个或多个处理器读取和执行。机器可读存储介质可以被具体化为任何存储设备、机构或者用于存储或传输以由机器可读的形式的信息的其它物理结构(例如,易失性或非易失性存储器、媒体盘或其它媒体设备)。

在图中,一些结构的或方法特征可能以具体布置和/或排序示出。然而,应当领会,可能不要求这样的具体布置和/或排序。相反,在一些实施例中,可以以与说明性图中示出的方式和/或顺序不同的方式和/或顺序来布置这样的特征。附加地,特定图中包括结构的或方法特征不意味着暗示在所有实施例中都要求这样的特征,并且在一些实施例中可以不包括这样的特征或者这样的特征可以与其它特征组合。

现在参考图1,在说明性实施例中,用于基于代理的多线程消息传递的系统100包括通过网络104通信的许多计算节点102。在使用中,如下面更详细地讨论的那样,每个计算节点102可以执行一个或多个多线程进程。主机进程的每个线程可以生成消息传递接口(MPI)操作,诸如发送或接收消息。那些MPI操作可以被主机进程内的轻量级代理库拦截,所述轻量级代理库将每个MPI操作转发给与主机进程独立的代理进程。每个代理进程使用系统MPI库的实例来执行MPI操作。通过在代理进程中执行MPI操作,可以降低或者避免线程相关开销。例如,每个代理进程中的MPI库可以在单线程模式中执行并且避免不必要的线程同步、共享的通信状态或者与其它线程的其它负面干扰。附加地或者替代地,在代理进程中执行MPI操作可以避免由低级联网接口使用以用于保证线程安全访问的锁定开销。在一些实施例中,可以为每个代理进程分配专用联网资源,其可以改进网络资源利用。在一些实施例中,代理进程可以针对对未完成的请求的完成进行轮询或者以其它方式提供主机进程的异步进展。进一步地,通过使用瘦代理库来拦截MPI操作,系统100可以再使用现有系统MPI库和/或现有应用代码而没有大量改变。

现在参考图2,图表200示出了可以使用系统100实现的说明性结果。图表200图示了针对若干消息大小所执行的带宽标准检查程序(benchmark)的结果。水平轴绘出以字节(B)为单位的消息大小,并且垂直轴图示了以每秒二进制兆字节(MiB/s)为单位的在给定节点处实现的单向网络带宽。曲线202图示了每节点使用八个独立进程所实现的带宽。使用独立进程,曲线202可以图示由带宽标准检查程序可实现的上界。如示出的那样,所实现的总带宽随着消息大小增加而增加,直至总可用网络带宽饱和。曲线204图示了每节点在单个进程中使用八个线程所实现的带宽。如示出的那样,对于每个消息大小,使用线程所实现的带宽比利用独立进程所实现带宽低得多,并且多线程标准检查程序要求大得多的消息以使可用带宽饱和。曲线206图示了每节点使用八个线程和八个代理进程所实现的带宽,其具体化了本文中公开的技术中的一些。如示出的那样,使用代理进程所实现的带宽可以比使用多个线程所实现带宽高得多,并且可以接近于使用独立进程可实现的最佳情况带宽。

向后参考图1,每个计算节点102可以被具体化为能够执行本文中描述的功能的任何类型的计算或计算机设备,包括但不限于计算机、多处理器系统、服务器、安装在机架上的服务器、刀片服务器、膝上型计算机、笔记本计算机、网络器具、web器具、分布式计算系统、基于处理器的系统和/或消费者电子设备。如图1中示出的那样,每个计算节点102说明性地包括两个处理器120、输入/输出子系统124、存储器126、数据存储设备128和通信子系统130。当然,在其它实施例中,计算节点102可以包括其它或附加组件,诸如在服务器设备中通常发现的那些(例如,各种输入/输出设备)。附加地,在一些实施例中,说明性组件中的一个或多个可以合并到另一个组件中或者以其它方式形成另一个组件的一部分。例如,存储器126或其部分可以在一些实施例中合并到一个或多个处理器120中。

每个处理器120可以被具体化为能够执行本文中描述的功能的任何类型的处理器。每个说明性处理器120是多核处理器,然而在其它实施例中,每个处理器120可以被具体化为(一个或多个)单核或多核处理器、数字信号处理器、微控制器或者其它处理器或处理/控制电路。每个处理器120说明性地包括四个处理器核122,其中的每个是能够执行被编程指令的独立处理单元。在一些实施例中,处理器核122中的每个可能能够进行超线程;即,每个处理器核122可以支持在两个或更多逻辑处理器或硬件线程上的执行。虽然在图1的实施例中说明性计算节点102中的每个包括具有四个处理器核122的两个处理器120;但是在其它实施例中,每个计算节点102可以包括每个具有一个、两个或更多处理器核122的一个、两个或更多处理器120。特别地,本文中公开的技术还可适用于单处理器或单核计算节点102。

存储器126可以被具体化为能够执行本文中描述的功能的任何类型的易失性或非易失性存储器或数据贮存器。在操作中,存储器126可以存储在计算节点102的操作期间所使用的各种数据和软件,诸如操作系统、应用、程序、库和驱动程序。存储器126经由I/O子系统124通信地耦合到处理器120,所述I/O子系统124可以被具体化为促进与计算节点102的处理器120、存储器126和其它组件的输入/输出操作的电路和/或组件。例如,I/O子系统124可以被具体化为或者以其它方式包括存储器控制器集线器、输入/输出控制集线器、固件设备、通信链接(即,点对点链接、总线链接、导线、电缆、光导、印刷电路板迹线等)和/或促进输入/输出操作的其它组件和子系统。在一些实施例中,I/O子系统124可以形成片上系统(SoC)的一部分并且连同计算节点102的处理器120、存储器126和其它组件一起合并在单个集成电路芯片上。数据存储设备128可以被具体化为被配置用于数据的短期或长期存储的任何类型的一个或多个设备,诸如例如存储器设备和电路、存储器卡、硬盘驱动器、固态驱动器或者其它数据存储设备。

计算节点102的通信子系统130可以被具体化为能够使能计算节点102和/或其它远程设备之间通过网络104的通信的任何通信电路、设备或其集合。通信子系统130可以被配置成使用任何一个或多个通信技术(例如,有线或无线通信)和相关联的协议(例如,InfiniBand®、以太网、Bluetooth®、Wi-Fi®、WiMAX等)来实现这样的通信。通信子系统130可以包括一个或多个网络适配器和/或网络端口,其可以被同时用来通过网络104传送数据。

如下面更加详细地讨论的那样,计算节点102可以被配置成通过网络104与彼此和/或系统100的其它设备传输和接收数据。网络104可以被具体化为任何数目的各种有线和/或无线网络。例如,网络104可以被具体化为或者以其它方式包括交换结构网络、有线或无线局域网(LAN)、有线或无线广域网(WAN)、蜂窝网络和/或可公开访问的全球网络,诸如因特网。同样地,网络104可以包括任何数目的附加设备,诸如附加计算机、路由器和交换机,以促进系统100的设备之间的通信。

现在参考图3,在说明性实施例中,每个计算节点102在操作期间建立环境300。说明性环境300包括主机进程模块302、消息传递模块308和代理进程模块310。环境300的各种模块可以被具体化为硬件、固件、软件或其组合。例如,环境300的模块、逻辑和其它组件中的每个可以形成计算节点102的处理器120或其它硬件组件的一部分或者以其它方式由其建立。

主机进程模块302被配置成管理由计算节点102执行的进程和线程之间的关系。如示出的那样,主机进程模块302包括主机进程304,并且主机进程304可以建立许多线程306。说明性主机进程304建立两个线程306a、306b,但是应当理解,可以建立众多线程306。例如,在一些实施例中,主机进程304可以针对由计算节点102支持的每个硬件线程建立一个线程306(例如,在说明性实施例中,十六个线程306)。主机进程304可以被具体化为由计算节点102执行的操作系统进程、被管理的可执行进程、应用、工作或者其它程序。线程306中的每个可以被具体化为在主机进程304的进程空间内执行的操作系统线程、被管理的可执行线程、应用线程、工作者线程、轻量级线程或者其它程序。线程306中的每个可以共享主机进程304的存储器空间。

主机进程模块302被进一步配置成针对线程306中的每个创建消息传递接口(MPI)端点并且配置成将线程306中的每个分配给(下面进一步描述的)代理进程312。MPI端点可以被具体化为任何MPI次序、网络地址或者可以用于将消息路由到在主机进程304内执行的特定线程306的标识符。MPI端点可以不在不同主机进程304内执行的线程306之间进行区分;例如,MPI端点可以被具体化为主机进程304的全局MPI次序内的局部MPI次序。

消息传递模块308 被配置成接收被定址到线程306的MPI端点的MPI操作并且将那些MPI操作传送给相关联的代理进程312。MPI操作可以包括任何消息传递操作,诸如发送消息、接收消息、集体操作或者一侧操作。消息传递模块308可以使用任何可用的节点内通信技术(诸如,共享存储器通信)来传送MPI操作。

代理进程模块310被配置成使用许多代理进程312执行由消息传递模块308转发的MPI操作。类似于主机进程304,代理进程312中的每个可以被具体化为由计算节点102执行的操作系统进程、被管理的可执行进程、应用、工作或者其它程序。代理进程312中的每个建立独立于计算节点102的其它代理进程312的执行环境、地址空间以及其它资源。如上面描述的那样,可以将代理进程312中的每个分配给线程306中的一个。说明性代理进程模块310建立两个代理进程312a、312b,但是应当理解,可以建立众多代理进程312。虽然图示为针对每个线程306包括一个代理进程312,但是应理解,在一些实施例中,一个代理进程312可以由若干线程306、主机进程304或其它工作所共享,并且线程306可以与若干代理进程312交互。

现在参考图4,在说明性实施例中,计算节点102可以在操作期间建立应用编程接口(API)堆栈400。说明性API堆栈400包括消息传递接口(MPI)代理库402、MPI库404和节点内通信库406。API堆栈400的各种库可以被具体化为硬件、固件、软件或其组合。

在说明性API堆栈400中,主机进程304建立由所有线程306共享的MPI代理库402、MPI库404和节点内通信库406的实例。例如,库402、404、406中的每个可以使用操作系统动态加载器或者动态链接器而加载到主机进程304的地址空间中。线程306中的每个与MPI代理库402对接。MPI代理库402可以实现与MPI库404相同的编程接口。因而,线程306可以向MPI代理库402提交普通的MPI操作(例如,发送操作、接收操作、集体操作或者一侧通信操作)。MPI代理库402可以将许多MPI操作直接传递到MPI库404。MPI库404可以被具体化为系统MPI库404的共享实例。在一些实施例中,主机进程304的MPI库404可以被配置成在线程安全模式中执行。附加地,虽然代理进程312被图示在MPI库404外部,但是在一些实施例中,MPI库404可以内部地创建或者以其它方式管理代理进程312。附加地或者替代地,在一些实施例中,代理进程312可以被外部地创建为系统管理的资源。

MPI代理库402可以拦截一些MPI操作并且将其重导向至节点内通信库406。例如,MPI代理库402可以实现MPI端点扩展接口,其允许针对线程306中的每个建立不同MPI端点。被向着那些MPI端点导向的消息操作可以被重导向至节点内通信库406。节点内通信库406与代理进程312通信,并且可以使用任何形式的高效的节点内通信,诸如共享存储器通信。

代理进程312中的每个建立MPI库404的实例。例如,代理进程312a建立MPI库404a,代理进程312b建立MPI库404b,等等。由每个代理进程312建立的MPI库404可以是由主机进程304建立的相同系统MPI库404。在一些实施例中,每个代理进程312的MPI库404可以被配置成在单线程模式中执行。代理进程312的每个MPI库404使用通信子系统130与远程计算节点102通信。在一些实施例中,通过多个代理进程312对通信子系统130的并发访问可以由计算节点102的(未示出的)操作系统、虚拟机监视器(VMM)、管理程序或者其它控制结构来管理。附加地或者替代地,在一些实施例中,代理进程312中的一个或多个可以被分配通信子系统130的隔离的、保留的或者以其它方式专用的网络资源,诸如专用网络适配器、网络端口或者网络带宽。虽然图示为建立MPI库404的实例,但是在其它实施例中,每个代理进程312可以使用任何其它通信库或其它方法来执行MPI操作。例如,每个代理进程312可以建立不同于MPI库404的低级网络API。

虽然MPI代理库402和MPI库404被图示为实现如由MPI论坛建立的MPI,但是应当理解,在其它实施例中,API堆栈400可以包括用于高性能计算应用中的进程间和/或节点间通信的任何中间件库。附加地,在一些实施例中,线程306可以与和底层通信库实现不同的接口的通信库交互。例如,线程306可以与适配器库而不是代理库交互,所述适配器库向代理进程312和/或MPI库404转发调用。

现在参考图5,在使用中,每个计算节点102可以执行用于基于代理的多线程消息传递的方法500。方法500可以初始例如由计算节点102的主机进程304执行。方法500以框502开始,其中计算节点102针对由主机进程304创建的每个线程306创建消息传递接口(MPI)端点。如上面描述的那样,计算节点102可以创建若干线程306以执行计算处理,并且所创建的线程306的数目可以取决于计算节点102的特性、处理工作量或其它因素。每个MPI端点可以被具体化为MPI次序、网络地址或者可以用于将消息定址到主机进程304内的相关联的线程306的其它标识符。例如,线程306中的每个可以具有嵌套在主机进程304的MPI次序内的唯一局部MPI次序。计算节点102可以通过调用例如如通过上面结合图4描述的MPI代理库402实现的MPI端点扩展接口来创建MPI端点。在创建MPI端点之后,方法500的执行并行地继续进行到使用线程306中的一些或全部的框504。例如,如图5中示出的那样,方法500可以并行地继续进行到使用线程306a的框504a、到使用线程306b的框504b,等等。附加地,虽然被图示包括两个线程306a、306b,但是应当理解,方法500可以针对许多线程306并行地执行。

在框504a中,计算节点102将线程306a分配给代理进程312a。作为将线程306a分配给代理进程312a的部分,计算节点102可以初始化线程306a和代理进程312a之间的节点内通信链接。计算节点102还可以执行使用代理进程312a支持MPI通信所要求的任何其它初始化,例如初始化用于代理进程312a的全局MPI次序。在一些实施例中,在框506a中,计算节点102可以钉住(pin)代理进程312a和线程306a以在同一处理核122上执行。在同一处理器核122上执行可以例如通过允许使用共享的高速缓冲存储器的数据传送来改进节点内通信性能。计算节点102可以使用用于钉住代理进程312a和/或线程306a的任何技术,包括将代理进程312a和线程306a分配给由同一处理器核122执行的硬件线程、设置操作系统处理器亲和性或者其它技术。附加地,虽然图示为向代理进程312并行地分配线程306,但是应当理解,在一些实施例中,可以例如通过主机进程304以串行或单线程方式向代理进程312分配线程306。

在框508a中,计算节点102接收由关于相关联的MPI端点的线程306a调用的MPI操作。MPI操作可以被具体化为任何消息传递命令,包括发送、接收、准备发送(即,仅在接收方端点准备好时发送)、集体操作、一侧通信操作或者其它命令。如图4中示出的那样,在一些实施例中,线程306a可以调用由计算节点102的系统MPI库404的接口提供的或者与所述接口兼容的MPI操作。该MPI操作可以被MPI代理库402拦截。

在框510a中,计算节点102将MPI操作从线程306a传送到代理进程312a。计算节点102可以使用用于节点内数据传送的任何技术。为了改进性能,计算节点102可以使用高效或者高性能技术以避免存储器126中的数据的非必要副本。例如,计算节点102可以使用存储器126的对于线程306a和代理进程312a二者可访问的共享存储器区域来传送MPI操作。在一些实施例中,线程306a和代理进程312a可以使用存储在共享存储器区域中的无锁命令队列进行通信。在一些实施例中,计算节点102可以允许线程306a和/或代理进程312a分派共享存储器区域内的数据缓冲区,这可以进一步减少数据副本。如图4中所图示的那样,在一些实施例中,可以将被MPI代理接口402拦截的MPI操作传递给节点内通信库406,所示节点内通信库406继而可以将MPI操作传送给适当的代理进程312。

在框512a中,计算节点102使用代理进程312a执行MPI操作。如图4中所图示的那样,代理进程312a可以使用由代理进程312a建立的系统MPI库404a的实例来执行所请求的MPI操作。MPI库404a因而可以在单线程模式中执行或者以其它方式避免可能降低MPI库404的性能的负面干扰。MPI库404a使用通信子系统130来执行MPI操作。附加地或者替代地,计算节点102可以使用诸如低级网络API之类的任何其它通信方法来执行MPI操作。通过MPI库404a或者其它通信方法对通信子系统130的访问可以由计算节点102的操作系统、虚拟机监视器(VMM)、管理程序或者其它控制结构来管理、调解或以其它方式控制。在一些实施例中,操作系统、VMM、管理程序或者其它控制结构可以高效地管理通过若干代理进程312对通信子系统130的并发访问。附加地或者替代地,在一些实施例中,代理进程312a可以被划分或者以其它方式分配专用联网资源,诸如专用网络适配器、专用网络端口、专用的大量网络带宽或者其它联网资源。在一些实施例中,在框514a中,计算节点102可以将MPI操作的结果返回给线程306a。计算节点102可以使用用于向代理进程312a传送MPI操作的相同或类似的节点内通信链接(例如使用共享存储器区域)来返回结果。在执行MPI操作之后,方法500循环回到框508a以继续处理MPI操作。

向后参考框502,如上面描述的那样,方法500的执行并行地继续进行到框504a、504b。框504b、508b、510b、512b分别对应于框504a、508a、510a、512a,但是其由计算节点102使用线程306b和代理进程312b而不是线程306a和代理进程312a来执行。在其它实施例中,方法500可以类似地针对许多线程306和代理进程312并行地执行框504、508、510、512。计算节点102可以并行地执行源于许多线程306并且由许多代理进程312执行的众多MPI操作。

示例

下面提供本文中公开的技术的说明性示例。技术的实施例可以包括下面描述的示例中的任何一个或多个以及任何组合。

示例1包括一种用于多线程消息传递的计算设备,计算设备包括主机进程模块,其用以(i)针对由计算设备的主机进程建立的多个线程中的第一线程创建第一消息传递接口端点,以及(ii)将第一线程分配给第一代理进程;消息传递模块,其用以(i)在第一线程的执行期间接收与第一消息传递接口端点相关联的第一消息传递接口操作,以及(ii)将第一消息传递接口操作从第一线程传送到第一代理进程;以及代理进程模块,其用以通过第一代理进程来执行第一消息传递接口操作。

示例2包括示例1的主题,并且其中第一消息传递接口操作包括发送操作、接收操作、准备发送操作、集体操作、同步操作、累积操作、得到操作或者放置操作。

示例3包括示例1和2中的任一个的主题,并且其中通过第一代理进程来执行第一消息传递接口操作包括通过第一代理进程使用计算设备的通信子系统与远程计算设备进行通信。

示例4包括示例1-3中的任一个的主题,并且其中使用计算设备的通信子系统进行通信包括使用通信子系统的网络资源进行通信,其中网络资源专用于第一代理进程。

示例5包括示例1-4中的任一个的主题,并且其中网络资源包括网络适配器、网络端口或者大量网络带宽。

示例6包括示例1-5中的任一个的主题,并且其中将第一线程分配给第一代理进程包括将第一线程和第一代理进程钉住到计算设备的处理器核。

示例7包括示例1-6中的任一个的主题,并且其中消息传递模块进一步用以响应于第一消息传递接口操作的执行而将来自第一代理进程的操作结果返回到第一线程。

示例8包括示例1-7中的任一个的主题,并且其中将第一消息传递接口操作从第一线程传送到第一代理进程包括使用计算设备的共享存储器区域传送第一消息传递接口操作。

示例9包括示例1-8中的任一个的主题,并且其中使用共享存储器区域传送第一消息传递接口操作包括使用计算设备的无锁命令队列传送第一消息传递接口操作。

示例10包括示例1-9中的任一个的主题,并且其中执行第一消息传递接口操作包括通过第一代理进程使用由第一代理进程建立的消息传递接口库的第一实例来执行第一消息传递接口操作。

示例11包括示例1-10中的任一个的主题,并且其中消息传递接口库的第一实例包括在执行的单线程模式中建立的消息传递接口库的第一实例。

示例12包括示例1-11中的任一个的主题,并且其中接收第一消息传递接口操作包括拦截被由主机进程建立的消息传递接口库的共享实例作为目标的第一消息传递接口操作。

示例13包括示例1-12中的任一个的主题,并且其中主机进程模块进一步用以(i)针对由计算设备的主机进程建立的多个线程中的第二线程创建第二消息传递接口端点,以及(ii)将第二线程分配给第二代理进程;消息传递模块进一步用以(i)在第二线程的执行期间接收与第二消息传递接口端点相关联的第二消息传递接口操作,以及(ii)将第二消息传递接口操作从第二线程传送到第二代理进程;并且代理进程模块进一步用以通过第二代理进程来执行第二消息传递接口操作。

示例14包括示例1-13中的任一个的主题,并且其中主机进程模块进一步用以(i)针对第一线程创建第二消息传递接口端点,以及(ii)将第一线程分配给第二代理进程;消息传递模块进一步用以(i)在第一线程的执行期间接收与第二消息传递接口端点相关联的第二消息传递接口操作,以及(ii)将第二消息传递接口操作从第一线程传送到第二代理进程;并且代理进程模块进一步用以通过第二代理进程来执行第二消息传递接口操作。

示例15包括示例1-14中的任一个的主题,并且其中主机进程模块进一步用以(i)针对由计算设备的主机进程建立的多个线程中的第二线程创建第二消息传递接口端点,以及(ii)将第二线程分配给第一代理进程;消息传递模块进一步用以(i)在第二线程的执行期间接收与第二消息传递接口端点相关联的第二消息传递接口操作,以及(ii)将第二消息传递接口操作从第二线程传送到第一代理进程;并且代理进程模块进一步用以通过第一代理进程来执行第二消息传递接口操作。

示例16包括一种用于多线程消息传递的方法,方法包括由计算设备针对由计算设备的主机进程建立的多个线程中的第一线程创建第一消息传递接口端点;由计算设备将第一线程分配给第一代理进程;在执行第一线程时由计算设备接收与第一消息传递接口端点相关联的第一消息传递接口操作;由计算设备将第一消息传递接口操作从第一线程传送到第一代理进程;以及由计算设备通过第一代理进程来执行第一消息传递接口操作。

示例17包括示例16的主题,并且其中接收第一消息传递接口操作包括接收发送操作、接收操作、准备发送操作、集体操作、同步操作、累积操作、得到操作或放置操作。

示例18包括示例16和17中的任一个的主题,并且其中通过第一代理进程来执行第一消息传递接口操作包括使用计算设备的通信子系统从第一代理进程向远程计算设备进行通信。

示例19包括示例16-18中的任一个的主题,并且其中使用计算设备的通信子系统进行通信包括使用通信子系统的网络资源进行通信,其中网络资源专用于第一代理进程。

示例20包括示例16-19中的任一个的主题,并且其中网络资源包括网络适配器、网络端口或者大量网络带宽。

示例21包括示例16-20中的任一个的主题,并且其中将第一线程分配给第一代理进程包括将第一线程和第一代理进程钉住到计算设备的处理器核。

示例22包括示例16-21中的任一个的主题,并且进一步包括响应于执行第一消息传递接口操作而由计算设备将来自第一代理进程的操作结果返回到第一线程。

示例23包括示例16-22中的任一个的主题,并且其中将第一消息传递接口操作从第一线程传送到第一代理进程包括使用计算设备的共享存储器区域来传送第一消息传递接口操作。

示例24包括示例16-23中的任一个的主题,并且其中使用共享存储器区域传送第一消息传递接口操作包括使用计算设备的无锁命令队列传送第一消息传递接口操作。

示例25包括示例16-24中的任一个的主题,并且其中执行第一消息传递接口操作包括通过第一代理进程使用由第一代理进程建立的消息传递接口库的第一实例来执行第一消息传递接口操作。

示例26包括示例16-25中的任一个的主题,并且其中通过第一代理进程来执行第一消息传递接口操作包括通过第一代理进程使用在执行的单线程模式中建立的消息传递接口库的第一实例来执行第一消息传递接口操作。

示例27包括示例16-26中的任一个的主题,并且其中接收第一消息传递接口操作包括拦截被由主机进程建立的消息传递接口库的共享实例作为目标的第一消息传递接口操作。

示例28包括示例16-27中的任一个的主题,并且进一步包括由计算设备针对由计算设备的主机进程建立的多个线程中的第二线程创建第二消息传递接口端点;由计算设备将第二线程分配给第二代理进程;在执行第二线程时由计算设备接收与第二消息传递接口端点相关联的第二消息传递接口操作;由计算设备将第二消息传递接口操作从第二线程传送到第二代理进程;以及由计算设备通过第二代理进程来执行第二消息传递接口操作。

示例29包括示例16-28中的任一个的主题,并且进一步包括由计算设备针对第一线程创建第二消息传递接口端点;由计算设备将第一线程分配给第二代理进程;在执行第一线程时由计算设备接收与第二消息传递接口端点相关联的第二消息传递接口操作;由计算设备将第二消息传递接口操作从第一线程传送到第二代理进程;以及由计算设备通过第二代理进程来执行第二消息传递接口操作。

示例30包括示例16-29中的任一个的主题,并且进一步包括由计算设备针对由计算设备的主机进程建立的多个线程中的第二线程创建第二消息传递接口端点;由计算设备将第二线程分配给第一代理进程;在执行第二线程时由计算设备接收与第二消息传递接口端点相关联的第二消息传递接口操作;由计算设备将第二消息传递接口操作从第二线程传送到第一代理进程;以及由计算设备通过第一代理进程来执行第二消息传递接口操作。

示例31包括一种计算设备,其包括处理器;以及具有存储在其中的多个指令的存储器,所述多个指令在由处理器执行时使计算设备实行示例16-30中的任一个的方法。

示例32包括一种或多种机器可读存储介质,其包括存储在其上的多个指令,所述多个指令响应于被执行而导致计算设备实行权利要求示例16-30中的任一个的方法。

示例33包括一种计算设备,其包括用于执行示例16-30中的任一个的方法的部件。

示例34包括一种用于多线程消息传递的计算设备,计算设备包括用于针对由计算设备的主机进程建立的多个线程中的第一线程创建第一消息传递接口端点的部件;用于将第一线程分配给第一代理进程的部件;用于在执行第一线程时接收与第一消息传递接口端点相关联的第一消息传递接口操作的部件;用于将第一消息传递接口操作从第一线程传送到第一代理进程的部件;以及用于通过第一代理进程来执行第一消息传递接口操作的部件。

示例35包括示例34的主题,并且其中用于接收第一消息传递接口操作的部件包括用于接收发送操作、接收操作、准备发送操作、集体操作、同步操作、累积操作、得到操作或放置操作的部件。

示例36包括示例34和35中的任一个的主题,并且其中用于通过第一代理进程来执行第一消息传递接口操作的部件包括用于使用计算设备的通信子系统从第一代理进程向远程计算设备进行通信的部件。

示例37包括示例34-36中的任一个的主题,并且其中用于使用计算设备的通信子系统进行通信的部件包括用于使用通信子系统的网络资源进行通信的部件,其中网络资源专用于第一代理进程。

示例38包括示例34-37中的任一个的主题,并且其中网络资源包括网络适配器、网络端口或者大量网络带宽。

示例39包括示例34-38中的任一个的主题,并且其中用于将第一线程分配给第一代理进程的部件包括用于将第一线程和第一代理进程钉住到计算设备的处理器核的部件。

示例40包括示例34-39中的任一个的主题,并且进一步包括用于响应于执行第一消息传递接口操作而将来自第一代理进程的操作结果返回到第一线程的部件。

示例41包括示例34-40中的任一个的主题,并且其中用于将第一消息传递接口操作从第一线程传送到第一代理进程的部件包括用于使用计算设备的共享存储器区域传送第一消息传递接口操作的部件。

示例42包括示例34-41中的任一个的主题,并且其中用于使用共享存储器区域传送第一消息传递接口操作的部件包括用于使用计算设备的无锁命令队列传送第一消息传递接口操作的部件。

示例43包括示例34-42中的任一个的主题,并且其中用于执行第一消息传递接口操作的部件包括用于通过第一代理进程使用由第一代理进程建立的消息传递接口库的第一实例来执行第一消息传递接口操作的部件。

示例44包括示例34-43中的任一个的主题,并且其中用于通过第一代理进程来执行第一消息传递接口操作的部件包括用于通过第一代理进程使用在执行的单线程模式中建立的消息传递接口库的第一实例来执行第一消息传递接口操作的部件。

示例45包括示例34-44中的任一个的主题,并且其中用于接收第一消息传递接口操作的部件包括用于拦截被由主机进程建立的消息传递接口库的共享实例作为目标的第一消息传递接口操作的部件。

示例46包括示例34-45中的任一个的主题,并且进一步包括用于针对由计算设备的主机进程建立的多个线程中的第二线程创建第二消息传递接口端点的部件;用于将第二线程分配给第二代理进程的部件;用于在执行第二线程时接收与第二消息传递接口端点相关联的第二消息传递接口操作的部件;用于将第二消息传递接口操作从第二线程传送到第二代理进程的部件;以及用于通过第二代理进程来执行第二消息传递接口操作的部件。

示例47包括示例34-46中的任一个的主题,并且进一步包括用于针对第一线程创建第二消息传递接口端点的部件;用于将第一线程分配给第二代理进程的部件;用于在执行第一线程时接收与第二消息传递接口端点相关联的第二消息传递接口操作的部件;用于将第二消息传递接口操作从第一线程传送到第二代理进程的部件;以及用于通过第二代理进程来执行第二消息传递接口操作的部件。

示例48包括示例34-47中的任一个的主题,并且进一步包括用于针对由计算设备的主机进程建立的多个线程中的第二线程创建第二消息传递接口端点的部件;用于将第二线程分配给第一代理进程的部件;用于在执行第二线程时接收与第二消息传递接口端点相关联的第二消息传递接口操作的部件;用于将第二消息传递接口操作从第二线程传送到第一代理进程的部件;以及用于通过第一代理进程来执行第二消息传递接口操作的部件。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1