并行编程模型

编辑
本词条由“匿名用户” 建档。
在计算中,并行编程模型是抽象的并行计算机体系结构,与它方便表达的算法和它们在组合物的方案。一个编程模型的价值可以通过它的普遍性来判断:对于各种不同的体系结构,一系列不同的问题可以表达得有多好,以及它的性能:编译后的程序执行的效率有多高。并行编程模型的实现可以采用从顺序语言调用的库的形式,作为现有语言的扩展,或作为一种全新的语言。 围绕特定编程模型的共识很重要,因为它会导致构建支持该模型的...

并行编程模型

编辑

在计算中,并行编程模型是抽象的并行计算机体系结构,与它方便表达的算法和它们在组合物的方案。一个编程模型的价值可以通过它的普遍性来判断:对于各种不同的体系结构,一系列不同的问题可以表达得有多好,以及它的性能:编译后的程序执行的效率有多高。并行编程模型的实现可以采用从顺序语言调用的库的形式,作为现有语言的扩展,或作为一种全新的语言。

围绕特定编程模型的共识很重要,因为它会导致构建支持该模型的不同并行计算机,从而促进软件的可移植性。从这个意义上说,编程模型被称为硬件和软件之间的桥梁。

并行编程模型的分类

编辑

并行编程模型的分类可以大致分为两个领域:过程交互和问题分解。

过程交互

进程交互与并行进程能够相互通信的机制有关。最常见的交互形式是共享内存和消息传递,但交互也可以是隐式的(程序员不可见)。

共享内存

共享内存是在进程之间传递数据的有效方式。在共享内存模型中,并行进程共享一个它们异步读写的全局地址空间。异步并发访问会导致竞争条件,可以使用锁、信号量和xxx器等机制来避免这些。传统的多核处理器直接支持共享内存,许多并行编程语言和库,如Cilk、OpenMP和线程构建块,都旨在利用共享内存。

消息传递

在消息传递模型中,并行进程通过相互传递消息来交换数据。这些通信可以是异步的,即可以在接收者准备好之前发送消息,也可以是同步的,即接收者必须准备好。消息传递的通信顺序进程(CSP)形式化使用同步通信通道来连接进程,并导致了重要的语言,如Occam、Limbo和Go。相比之下,actor模型使用异步消息传递,并已用于D、Scala和SALSA等语言的设计

隐式交互

在隐式模型中,程序员看不到任何进程交互,而是由编译器和/或运行时负责执行它。隐式并行的两个例子是特定领域语言,其中规定了高级操作中的并发性,以及函数式编程语言,因为没有副作用允许并行执行非依赖函数。然而,这种并行性很难管理并且诸如ConcurrentHaskell和ConcurrentML之类的函数式语言提供了显式和正确地管理并行性的功能

问题分解

并行程序由同时执行的进程组成。问题分解与制定组成过程的方式有关。

并行编程模型

任务并行

任务并行模型侧重于进程或执行线程。这些过程通常在行为上是不同的,这强调了沟通的必要性。任务并行是表达消息传递通信的一种自然方式。在Flynn的分类法中,任务并行通常被归类为MIMD/MPMD或MISD。

数据并行

数据并行模型侧重于对数据集执行操作,通常是一个规则结构的数组。一组任务将对该数据进行操作,但独立于不相交的分区。在Flynn的分类法中,数据并行性通常被归类为MIMD/SPMD或SIMD。

隐式并行

与隐式进程交互一样,由于编译器、运行时或硬件负责,因此隐式并行模型不会向程序员透露任何信息。例如,在编译器中,自动并行化是将顺序代码转换为并行代码的过程,而在计算机体系结构中,超标量执行是一种利用指令级并行性并行执行操作的机制。

内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/127765/

(3)
词条目录
  1. 并行编程模型
  2. 并行编程模型的分类
  3. 过程交互
  4. 共享内存
  5. 消息传递
  6. 隐式交互
  7. 问题分解
  8. 任务并行
  9. 数据并行
  10. 隐式并行

轻触这里

关闭目录

目录