并行编程:共享内存与分布式内存的特性及并发算法设计
1. 共享内存并行与分布式内存并行的共同特性
在并行编程中,共享内存并行和分布式内存并行存在一些共同的特性,下面为你详细介绍:
- 冗余工作 :无论算法的并发程度如何,总会有一些部分需要串行执行。当串行计算的结果需要共享时,有两种处理方式。一种是在一个进程中进行计算,然后将结果广播给其他需要该数据的进程,但这会增加执行时间的开销;另一种是如果计算中使用的数据其他进程已经可用,每个进程可以在本地进行计算并生成结果,无需发送消息。在共享内存并行中,计算数据默认可能已经可用。虽然线程进行冗余工作可以让处理资源保持忙碌并消除额外的同步,但需要额外的内存空间来保存同一值的多个副本。
- 工作划分 :工作必须分配给线程和进程。可以通过分配一块数据,让每个线程或进程对分配的块执行相同的计算;也可以采用某种方法分配涉及执行应用程序中不同代码部分的计算。
- 数据共享 :应用程序有时需要共享数据,如计数器的值、浮点值向量或图顶点列表等。不同的并行方式共享数据的方法不同,共享内存程序只需访问内存中的指定位置,而分布式内存程序必须主动发送和接收要共享的数据。
- 工作的静态/动态分配 :根据串行算法的性质、并发版本以及线程/进程的数量,可以一次性分配所有工作(通常在计算开始时),也可以在代码执行过程中逐步分配。前者称为静态分配,一旦分配就不会改变;后者称为动态分配,根据需要分配工作。静态分配适用于工作可以分解为与线程/进程数量相等的部分,且每个部分的执行时间大致相同的情况,实现和维护代码最简单。动态分
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



