寻找适合并行编程模型的中间件

并行计算有助于应用和资源管理的合理化,但是为此方案找到找到合适的中间件却是很棘手的问题。Tom Nolle解释了应该寻找什么。

一些计算功能跟流程绑定得如此紧密,以至于如果可以(在处理器内核之间、CPU与GPU之间甚至跨系统边界)有效共享的话就可以获得极大的好处。并发性一直都是通过多线程、同步以及锁定技术来支持的,但现在有了中间件工具以后可以让并发更容易实现。为了选出最好的,你需要理解你的并发编程应用的需求,考虑应用的来源和方向,最后还要了解一些政治的并行处理语言,即便你并不认为自己需要这样的语言。

大多数业务流程最好是评估为一组过程或者步骤,其后者往往要取决于前面的过程或步骤的结果。这种线性的方案几乎归纳了所有现代软件开发的特点,编程语言和中间件工具已经为此进行了优化演进。

一些包括了复杂的流程和计算的应用可以利用传统的工具和语言开发,但也可以受益于用额外系统、处理器或者内核的形式分配多个并行处理资源。对这些流程的优化支持需要为并行流程的同步提供安身之处,以确保数据在可用之前不会被使用或者流程不会在资源使用中发生冲突。锁和信号量是并发性的固定装置,但是很难调试,在伸缩性方面受限。

并发模型由何构成?
并行计算的挑战之一是确定“并行”究竟是什么意思。一些人认为任何形式的并发性支持就是并行编程,这样的话网格或集群计算以及多实例云和微服务应用都算是。有的则认为这种模型应该泛化到包括任何形式的跨并行资源的任务分布。考虑的出发点之一是随着时间转移会出现更多的并行选项,所以把自己限定在任何受限模型之内也许不是明智之举。

结果证明,使用并行编程的大多数机会都与特定算法的实现以及可用更高级语言声明的算法有关。如果该语言的解释以及结果代码的执行是由中间件管理的话,那它天生就是资源敏捷且并发友好的,就有可能避免一切传统的并发问题。

即便是更高级的语言—所谓的“非过程性”语言—也可用为并行编程模型框定起点。因为这些语言表达的上意图而不是过程,这些是可用语言处理器而不是靠开发者来并行化的。这说明了一条普遍事实:语言越高级,程序的并行化越容易—只要有合适中间件的话。反之,如果使用了更低级的过程性编程模型,那模型就不得不从目前的概念、包括哪些现在用来支持并发线程的概念进行演变,以便优化性支持并行选项。

确定模型
所有的并行编程都应该从用什么语言开始,有半打的基本模型可以确定语言。第一种并行模型优化了当前语言并引入了并发性的概念。最新的模型比如X10,是专门用来进行一般化的并行编程的。别的像Smalltalk和LINQ属于非过程性的,适合于并行编程,如果使用合适的中间件的话。

集群和网格计算中间件工具,甚至RESTful API以及微服务也可以使用Java、C#、MPI、PALM等语言来开发“并行”应用,Active Message中间件(全部都是开源的)在大多数支持并发开发的语言中都可以使用。还有一些是针对Java、C#、C++等特定语言的中间件工具。这些模型更容易采用,但很难让并行性支持多核或者多选题网格这样的一般事情。开发者可能还会发现显式任务同步的需求很难实现。

微软的LINQ和PLINQ就是从传统应用向并行计算演进的一般模型的例子。LINQ有助于定义表示计算模型而不是计算方法的算法。PLINQ是一款.NET中间件工具,这个工具可以管理这些算法的并行执行,这样应用就可以开发为将算发性要素从过程部分分离出来。Java 8也有类似的能力,因为它采用了Streams和一种合适的数据库模型。高性能Fortran (High-Performance Fortran)是一种支持并行处理的算法型语言。

这些方案还是需要开发者适应并行性,要么通过在编程中树立意识,要么要做算法处理中隐藏好它。由IBM发起作为开源项目开发的X10语言侧采取了不同的办法。它通过创建围绕着place以及异步任务这样的新概念开发的并行友好型过程性编程模型修改了“过程性”编程的概念。跟非过程性方案不一样的是,X10让开发者开发和管理并行性而不是隐藏它。

考虑你的目标
并行编程路径的数量令人眼花缭乱,很可能还会变得更加复杂。对于开发团队而言,考虑的关键是应用的来源和方向。如果你进行的是传统的商业化编程,希望给特定的算法处理增加并行支持的话,那可以看看针对特定语言的并发性中间件或者PLINQ。如果你更关心并行性而不是集群(网格)计算或微服务的话,把前者看成是基本方案。后者用来针对一般的并行化。

作为要素,开发的方向更难考虑进并行编程规划里面,这仅仅是因为很难知道有哪些选项。业界的一般硬件趋势正朝着每处理器内核数量更高、每小题处理器更多的方向发展。从更高的层面来说,这股趋势正朝着组件化以及计算、存储和网络功能分离的方向发展。即便中间件也日益被视为“服务”,系统展示的只是非常轻量的操作系统,并汇总微服务之类的平台功能。

这一基本事实是的像X10之类的东西成为合理选择。X10有一个基于Eclpse的开发环境,为了方便执行框架是用Java编写的。X10社区有着很好的文档和向导,对于任何计划使用并行编程模型的组织来说,花点时间学习这门语言并理解在系统—集群层次对并行性的适应会影响到语言结构和中间件工具是明智的。要想充分意识到一门看不见的技术之潜能总是很困难的,并行相关的开发最终也会证明这一点。
本文转自d1net(转载)

时间: 2024-08-02 01:55:13

寻找适合并行编程模型的中间件的相关文章

【图解】用Hadoop 进行分布式并行编程(一)

Hadoop 是一个实现了MapReduce 计算模型的开源分布式并行编程框架,借助于 Hadoop, 程序员可以轻松地编写分布式并行程序,将其运行于计算机集群上,完成海量数据的计算.本文将介绍 MapReduce 计算模型,分布式并行计算等基本概念,以及 Hadoop 的安装部署和基本运行方法. Hadoop 简介 Hadoop 是一个开源的可运行于大规模集群上的分布式并行编程框架,由于分布式存储对于分布式编程来说是必不可少的,这个框架中还包含了一个分布式文件系统 HDFS( Hadoop D

用Hadoop进行分布式并行编程, 第1部分

Hadoop 是一个实现了 MapReduce 计算模型的开源分布式并行编程框架,借助于 Hadoop, 程序员可以轻松地编写分布式并行程序,将其运行于计算机集群上,完成海量数 据的计算.本文将介绍 MapReduce 计算模型,分布式并行计算等基本概念,以及 Hadoop 的安装部署和基本运行方法. Hadoop 简介 Hadoop 是一个开源的可运行于大规模集群上的分布式并行编程框架,由于分布式存储 对于分布式编程来说是必不可少的,这个框架中还包含了一个分布式文件系统 HDFS( Hadoo

《并行计算的编程模型》一导读

前 言 对于正在编程的程序员,编程模型可被看作一台虚拟机,并可通过编程语言和函数库实现.如果某个编程模型成为计算机科学研究中的热点,需要具有以下特性:高效性(易于描述各种抽象算法).移植性(兼容各种硬件计算平台).高性能(高效均衡地利用硬件平台的计算能力).通用性(广泛地描述各种算法).针对特定的编程模型,同时具有上述四种特性中的一种或两种相对容易,但同时具备这四种特性几乎是不可能的.特定的编程模型无法同时具备四种特性的主要原因在于编程模型的多样性,因此需要根据具体的科学应用,选择不同的编程模型

《CUDA C编程权威指南》——2.1节CUDA编程模型概述

2.1 CUDA编程模型概述 CUDA编程模型提供了一个计算机架构抽象作为应用程序和其可用硬件之间的桥梁.图2-1说明了程序和编程模型实现之间的抽象结构的重要.通信抽象是程序与编程模型实现之间的分界线,它通过专业的硬件原语和操作系统的编译器或库来实现.利用编程模型所编写的程序指定了程序的各组成部分是如何共享信息及相互协作的.编程模型从逻辑上提供了一个特定的计算机架构,通常它体现在编程语言或编程环境中. 除了与其他并行编程模型共有的抽象外,CUDA编程模型还利用GPU架构的计算能力提供了以下几个特

《CUDA C编程权威指南》——第2章 CUDA编程模型 2.1 CUDA编程模型概述

第2章 CUDA编程模型 本章内容: 写一个CUDA程序 执行一个核函数 用网格和线程块组织线程 GPU性能测试 CUDA是一种通用的并行计算平台和编程模型,是在C语言基础上扩展的.借助于CUDA,你可以像编写C语言程序一样实现并行算法.你可以在NVIDIA的GPU平台上用CUDA为多种系统编写应用程序,范围从嵌入式设备.平板电脑.笔记本电脑.台式机.工作站到HPC集群(高性能计算集群).熟悉C语言编程工具有助于在整个项目周期中编写.调试和分析你的CUDA程序.在本章中,我们将通过向量加法和矩阵

《并行计算的编程模型》一3.6.1 全局同步屏障

3.6.1 全局同步屏障 全局同步屏障是大部分并行编程模型都有的同步机制,概念很清晰推理也简单,虽然对可扩展性的影响还有待改进.当所有PE调用屏障函数时,它能确保直到所有参与的PE都到达时函数调用才能返回.因此,当可能出现竞争时,经常添加屏障以协助调试.除了全局屏障shmem_barrier_all(),OpenSHMEM也提供了集合屏障shmem_barrier(),可以操作在PE的子集,这将在3.7节进行讨论,因为子集选择机制在这一节比较常见.

8天玩转并行开发——第六天 异步编程模型

原文:8天玩转并行开发--第六天 异步编程模型             在.net里面异步编程模型由来已久,相信大家也知道Begin/End异步模式和事件异步模式,在task出现以后,这些东西都可以被task包装 起来,可能有人会问,这样做有什么好处,下面一一道来.   一: Begin/End模式 1: 委托     在执行委托方法的时候,我们常常会看到一个Invoke,同时也有一对你或许不常使用的BeginInvoke,EndInvoke方法对,当然Invoke方法 是阻塞主线程,而Begi

基于并行编程计算模型的索贝尔滤波技术

基于并行编程计算模型的索贝尔滤波技术 徐昌荣 王聪颖 袁秀华 随着遥感影像数据量的骤增,单机环境下完成索贝尔边缘滤波运算所需的计算时间也剧增.根据遥感数据的分幅特征,结合MapReduce并行分布式计算模型,本文提出了一种将该运算迁徙到Hadoop集群环境中的方法,以完成海量影像数据的索贝尔滤波运算.实验结果表明集群运算能够显著缩短计算时间,并且该计算时间会随着集群节点数目的增加而趋于减少. 基于并行编程计算模型的索贝尔滤波技术

PAI分布式机器学习平台编程模型演进之路

什么是PAI? PAI的全称是Platform of Artificial Intelligence,主要在使用机器学习做模型训练时提供整套链路.机器学习即服务,把机器学习作为服务对外推出,大家可以在平台上使用比较先进的机器学习算法.将多种深度学习框架集成到PAI中,同时基于深度学习框架包装成更加易用的组件.具备异构的计算服务能力,把CPU计算能力和GPU计算能力统一调度起来,异构的计算能力透明,大家的注意力是哪些机器学习算法可以帮助业务,不用关心底层资源的申请和分配.PAI也支持在线预测服务,