并行软件设计

并行软件

在运行共享内存系统时,会启动一个单独的进程,然后派生(fork)出多个线程,所以当我们谈论共享内存程序时,我们指的是正在执行任务的线程。

需要在进程、线程之间平均分配的任务从而满足使得每个进程/线程获得大致相等的工作量称为负载均衡(load balancing)。

将串行程序或者算法转换为并行程序的过程称为并行化(parallelization)

我们需要协调进程/线程之间的工作,这些进程中,我们需要

安排进程、线程之间的同步
安排进程、线程之间的通信

共享内存

在共享内存系统,变量可以是共享的(shared)或者是私有的(private)。共享变量可以被任何线程读、些,而私有变量只能被单个线程访问。线程间的通信是通过共享变量实现的,所以通信是隐式的,而不是显式的。

动态线程和静态线程
在很多情况下,共享内存程序使用的动态线程,在这种范式中,有一个主线程,并且在任何时刻都有一组工作线程(可能为空)。主线程通常等待工作请求,当一个请求到达时,它派生出一个工作线程来执行该请求,当工作线程完成任务,就会终止再合并到主线程中。

在静态线程中,主线程在完成必须的设置后,派生出所有的线程,在工作结束前所有的线程都在运行。当所有的线程都合并到主线程后,主线程需要做一些清理工作,然后也终止。

非确定性

在任何一个MIMD系统中,如果处理器异步执行,可能很可能会引发非确定性。

非确定性是两个线程尝试同时更新内存区域x而造成的。

我们常说程序有竞争条件(race condition),因为线程或者进程处于竞争状态下,一次只能被一个线程执行的代码块称为临界区(critical section),通常是程序的负责来保证互斥地访问临界区。

保证互斥执行的最常用机制是互斥锁(mutual exclusion clock)或者互斥量(mutex)或者锁(lock)。互斥量是由硬件软件的一个特殊类型的对象。

还需要注意的是,使用互斥量加强了临界区的串行性(serialization)。因为在临界区中,一次只有一个线程能执行代码,代码有效地串行化了。

还有其他可以替代的互斥量的方式,信号量(semaphore)与互斥量类似,尽管他们的行为细节有很多不同,但是某些类型的线程,使用信号量实现同步比用互斥量实现要简单。监视器(monitor)能够在更高层次提供互斥执行,监视器是一个对象,这个对象的方法,一次只能被一个线程执行。

分布式内存

消息传递

消息传递的API(至少)要提供一个发送和一个接收函数。进程之间通过它们的序号(rank)互相识别,序号的范围从0∼p−10\sim p-10∼p−1,其中ppp表示进程的个数。

注意:

程序段是SPMD,两个进程使用相同的可执行代码,但是执行不同的操作。它们所执行的操作依赖于它们的序号
不同的进程中,变量message指的是不同的内存块
假设线程0能够写stdout。通常情况下,即使消息传递API没有显式的支持,但大多数实现消息传递的API程序都允许所有的进程访问stdout和stderrr。

单向通信

在消息传递中,一个进程必须调用一个发送函数,并且发送函数必须与另一个进程调用的接收函数匹配。任何通信都需要两个进程的显示参与。在单向通信(one-sided communication)或者远程内存访问(remote memory access)中,单个处理调用一个函数。

在这个函数中,或者用来自另一个进程的值来更新局部内存,或者使用来自于调用进程的值更新远程内存。这种方式能够简化通信,因为它需要一个进程参与,此外,还消除了两个进程间同步的代价,有效的降低了通信的开销,它取消了一个函数,也可以减少开销。

并行程序设计

并行化的步骤

划分(partitioning)将要执行的指令和数据按照计算部分拆分成多个小任务,关键在于识别出并行执行的任务。
通信(communication) 确定上一步所识别的任务之间需要执行那些通信
凝聚或聚合(agglomeration or aggregation)将第一步所确定的任何与通信季节和成更大的任务
分配(mapping)将上一步聚合好的任务分配到进程/线程中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值