并行计算概述

本文介绍了并行计算的三种形式:并发、并行和分布式计算的定义和区别,强调了并行计算与分布式计算的相似性和界限模糊性。接着探讨如何编写并行程序,包括任务并行和数据并行两种方法,以及共享内存和分布式内存系统。提到了C语言的三个函数库:MPI、POSIX线程和OpenMP,分别用于分布式内存和共享内存系统的并行编程,比较了它们的特点和使用场景,并指出混合系统编程中MPI+OpenMP的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 并行计算概述:

(1)并发、并行、分布式之间的差别(尚无统一意见,比较认同的如下):

*并发计算中,一个程序的多个任务会在同一时段内可以同时执行。

*并行计算中,一个程序通过多个任务紧密协作来解决某个问题。

*分布式计算中,一个程序需要和其它程序协作来解决某个问题。

*并行计算和分布式计算都是并发的,某些程序如多任务操作系统也是并发的,因为即使它运行在单核机器上,多个任务都能在同一个时间里同时执行。

*并行计算和分布式计算之间没有一条明确的分界线。并行程序往往同时在多个核上执行多个任务,这些核在物理上紧密靠近或者通过高速网络相互连接。分布式程序的任务是在多个计算机上执行,这些计算机之间相隔较远并且任务是由独立创建的程序来完成的。


二 怎么编写并行程序?

(1)基本思想:都是将要完成的任务分配给各个核。

1.两种广泛采用的方法:任务并行和数据并行。

*任务并行:将待解决问题所需要执行的各个任务分配到各个核上执行。

*数据并行:将待解决问题所需要处理的数据分配给各个核,每个核在分配到的数据集上执行大致相似的操作。


2.两种主要的并行系统:

*共享内存系统:各个核能够共享访问计算机的内存,理论上每个核能够读写内存的所有区域,可以通过检测和更新共享内存中的数据来协调各个核。



*分布式内存系统:每个核都有自己的私有内存,核之间的通信是显式的,必须使用类似于在网络中发送消息的机制。




(2)函数库:

三个不同c语言扩展的函数库:MPI、POSIX线程、OpenMP。

MPI为分布式内存系统的编程而设计;Pthreads和OpenMP是为共享内存系统而设计的。

MPI和Pthreads是C语言的扩展;OpenMP包含了一个扩展库以及对C编译器的部分修改。

1.消息传递接口(Message-Passing Interface,MPI):分布式内存。

在消息传递系统上,运行在一个核-内存对上的程序通常称为进程。两个进程通过调用函数来进行通信。

2.POSIX线程:

在共享内存编程中,运行在一个处理器上的一个程序称为线程(不同于MPI,在MPI中称为进程)。

3.OpenMP:

与Pthreads一个针对共享内存并行编程的API。

4.OpenMP与Pthreads的区别:

*Pthreads:

------要求程序员显式的明确每个线程的行为;

------Pthreads和MPI一样是一个可以被链接到C程序的函数库,只要系统有Pthreads库,Pthreads程序就能够被任意C编译器使用。

------Pthreads更底层,并且提供了虚拟编写任何可知线程行为的能力,代价:每个线程行为的每一个细节都得由我们自己来定义。

*OpenMP:

------允许程序员只需要声明一块代码应该并行执行,然后由编译器和运行时系统来决定哪个线程执行哪个任务。

------OpenMP需要编译器的支持,有可能你使用的编译器无法把OpenMP程序编译成并行程序。

------使用OpenMP编程编写并行行为更容易些,但代价是难以对一些底层的线程交互进行编程。


三 混合系统编程: 

MPI+OpenMP为多处理器结点集群提供了一种有效的并行策略,结点内部共享内存空间编程模式适合 OpenMP并行,消息传递模型MPI被用在集群的结点与结点之间,这样就实现了并行的层次结构化。









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值