File tree Expand file tree Collapse file tree 4 files changed +14
-14
lines changed Expand file tree Collapse file tree 4 files changed +14
-14
lines changed Original file line number Diff line number Diff line change 1
1
##使用数据分解
2
2
3
- 并行化问题的方法之一是通过数据分解。想象一下有这么一个场景,在这个场景中我们要乘以一个2x2矩阵, 这个矩阵被称为矩阵A,它的标量值是4.在时序系统中 ,我们将一个接一个的执行每个乘法的操作,最后生成所有指令的最终结果。根据矩阵A的大小,这个问题的顺序解决方案可能是旷日持久的。然而,当数据分解被应用的时候,我们可以想象矩阵A被分解为一个一个小的部分,这些部分被相关的workers以并行的方式接受以及处理数据 。下图以一个2x2矩阵乘以一个标量值的栗子说明了数据分解应用的概念:
3
+ 并行化问题的方法之一是通过数据分解。想象一下有这么一个场景,在这个场景中我们要以标量4乘以一个2x2矩阵( 这个矩阵被称为矩阵A).在一个顺序执行系统中 ,我们将一个接一个的执行每个乘法的操作,最后生成所有指令的最终结果。根据矩阵A的大小,这个问题的顺序解决方案可能是旷日持久的。然而,当数据分解被应用的时候,我们可以想象矩阵A被分解为一个一个小的部分,这些分片数据被相关的workers以并行的方式接受并处理 。下图以一个2x2矩阵乘以一个标量值的栗子说明了数据分解应用的概念:
4
4
5
5
![ ] ( https://github.com/Voidly/Img/blob/master/Parallel%20Programming%20with%20Python/Chapter%202/Data%20decomposition%20in%20a%20matrix%20example.png?raw=true )
6
6
7
- 上图中出现的矩阵相乘的问题有一定的对称性,每个必要的操作的结果是由一个单独的worker执行的,而且每个worker执行同样数量的操作来解决问题。然而,在现实世界中,工人的数量和已分解的数据数量的关系是不对称的 ,这将直接影响解决方案的性能。最后,每个worker所产生的结果必须以一种使程序最终输出是有意义的方式来相关联。为了建立这种关联,workers之间必须使用信息交换的模式甚至是共享状态的标准来建立通信 。
7
+ 上图中出现的矩阵相乘的问题有一定的对称性,每个必要的操作的结果是由一个单独的worker执行的,而且每个worker执行同样数量的操作来解决问题。然而,在现实世界中,worker的数量和已分解的数据数量的关系是不对称的 ,这将直接影响解决方案的性能。最后,每个worker所产生的结果必须整合起来以便使程序最终输出意义结果。为了进行这种整合,workers之间需要进行信息交换或是共享状态 。
8
8
9
9
> 数据分解的粒度选择将会影响一个解决方案的性能。
10
10
Original file line number Diff line number Diff line change 1
1
##处理和映射
2
2
3
- workers的数量并不足以在一个单一的步骤里解决一个特定的问题。因此前面的章节给出的分解技术是很必要的。然而分解技术不应该被任意的应用 ,有一些因素会影响解决方案的性能。在数据或者任务分解之后,我们应该问这么一个问题:“我们应该在workers中如何划分进程的负载来获得比较好的性能?”这不是一个很好回答的问题,因为这取决于正在研究的问题。
3
+ workers的数量并不足以在一个单一的步骤里解决一个特定的问题。因此前面的章节给出的分解技术是很有必要的。然而分解技术不应该被随意的应用 ,有一些因素会影响解决方案的性能。在数据或者任务分解之后,我们应该问这么一个问题:“我们应该在workers中如何划分进程的负载来获得比较好的性能?”这不是一个很好回答的问题,因为这取决于正在研究的问题。
4
4
5
5
基本上,我们在定义过程映射时可以提到两个重要的步骤:
6
6
@@ -9,12 +9,12 @@ workers的数量并不足以在一个单一的步骤里解决一个特定的问
9
9
10
10
###识别独立的任务
11
11
12
- 在系统中识别独立的任务将允许我们在不同的workers之间分配任务,因为这些任务不需要不断的通信 。因为不需要一个数据单元,所以任务可以在不同的workers间执行而不会影响其它任务的执行。
12
+ 在系统中识别独立的任务将允许我们在不同的workers之间分配任务,因为这些任务不需要持续的通信 。因为不需要一个数据单元,所以任务可以在不同的workers间执行而不会影响其它任务的执行。
13
13
14
14
###识别需要数据交换的任务
15
15
16
- 将一个单独的worker建立持续的通信的任务分组可以提高性能 。当有大的通信负载的时候的时候这个真的可以提高性能,因为它能减少任务间信息交换的总开销 。
16
+ 将需要相互通讯的任务组合起来放到单个worker中可以提高性能 。当有大的通信负载的时候的时候这个真的可以提高性能,因为它能减少任务间信息交换的开销 。
17
17
18
- ###负载均衡
18
+ ###平衡负载
19
19
20
- 在并行解决方案中一个相关的特性是在不同的计算资源间工作单元的分配方式。我们给不同的workers分配越多的任务,我们将增加越多的通信粒度 。另一方面,我们以一个worker分组的任务越多,与通信相关的总开销越小。不过,我们可以增加空转 ,也就是说,闲置计算的能力 。在并行编程中,闲置并不好 。此外,位置的增加将会减少通过简单的添加更多的设备而增加计算能力的可扩展的灵活性 。在一个基于通信的架构(低数据位置),对于集群或者网格来说是简单的增加机器来提升处理性能甚至不需要中断正在运行的系统 。
20
+ 在并行解决方案中一个典型的问题是如何为不同的工作单元分配计算资源。我们越是将任务分配给不同的workers处理,我们将是需要越多的通信 。另一方面,我们越是将任务组合起来分配給一个worker,与通信相关的开销越小。然而,我们可能会增加空转 ,也就是说,浪费了计算的能力 。在并行编程中,浪费并不好 。此外,越是将数据聚合在一个worker中,越会减少通过简单的添加更多的设备而增加计算能力的可扩展的灵活性 。在一个基于通信的架构(轻微的数据聚合)中,为集群或者网格简单的增加机器从而提升处理性能甚至不需要中断正在运行的系统 。
Original file line number Diff line number Diff line change 1
1
##总结
2
2
3
- 在这一章节,我们讨论了一些创建并行解决方案的方法。你的注意力应重点放在在不同的workers之间划分处理负载,考虑位置而不是数据 。
3
+ 在这一章节,我们讨论了一些创建并行解决方案的方法。你的注意力应重点放在在不同的workers之间划分处理负载,考虑聚合而不是数据 。
4
4
5
- 在下一章节,我们将学习如何识别并行的问题。
5
+ 在下一章节,我们将学习如何识别并行的问题。
Original file line number Diff line number Diff line change 1
1
##用管道分解任务
2
2
3
- 管道技术被用来组织那些以合作的方式执行解决问题的任务。管道以并行的方式将大型的任务分割成独立的小任务。管道模型可以和汽车工厂的装配线相比较,在那里,底盘是原始材料,是输入 。原料经过不同的生产阶段,几个worker一个接一个执行不同的操作直到结束,以便我们有一辆车准备好了 。这个模型和顺序范式的开发类似,任务在数据上一个接一个的执行 ,正常情况下,一个任务有一个输入,这个输入时上一个任务的结果 。那么这个模型和顺序技术的区别是什么呢?每个管道技术的阶段都拥有自己的workers,并且workers在问题上都是以并行的方式执行的 。
3
+ 管道技术被用来组织多个任务,这些诶任务合作的方式来共同解决一个问题。管道将大型的任务分割成独立并行的小任务。管道模型可以类比成汽车工厂的装配线,只不过输入代替底盘称为加工的原始材料 。原料经过不同的生产阶段,几个worker一个接一个执行不同的操作直到产生最终结束 。这个模型和顺序范式的开发类似,任务一个接一个的作用于数据上 ,正常情况下,一个任务以上一个任务的结果为输入 。那么这个模型和顺序技术的区别是什么呢?管道技术中的每个阶段都拥有自己的workers,并且这些workers是以并行的方式执行的 。
4
4
5
- 计算上下文的一个栗子可能是一个系统过程是将图片批量和持续的数据提取到一个数据库中 。我们将有以下实际的顺序:
5
+ 计算上下文的一个栗子可能是一个批量处理图片,并将抽取出的数据存入数据库的系统 。我们将有以下实际的顺序:
6
6
7
- * 输入被接受的图像并且并行的排列,这将在第二阶段进行处理
7
+ * 接受输入的图像并且以对这些图片以并行的方式进行排列,这些图片将在第二阶段进行处理
8
8
* 解析图像,并且有用的信息将会被送到第三阶段
9
9
* 在第三阶段,过滤器被并行的应用在图像上
10
10
* 来自第三阶段的数据结果被保存在数据库中
11
11
12
- > 每个阶段的管道技术都用自己workers独立的执行。然而,它建立了数据通信机制,以便有信息的交换 。
12
+ > 每个阶段的管道技术都用自己workers独立的执行。然而,它建立了数据通信机制,以便进行信息的交换 。
13
13
14
14
下图展示了管道的概念:
15
15
16
- ![ ] ( https://github.com/Voidly/Img/blob/master/Parallel%20Programming%20with%20Python/Chapter%202/The%20pipeline%20technique.png?raw=true )
16
+ ![ ] ( https://github.com/Voidly/Img/blob/master/Parallel%20Programming%20with%20Python/Chapter%202/The%20pipeline%20technique.png?raw=true )
You can’t perform that action at this time.
0 commit comments