跳转至

处理和映射

workers的数量并不足以在一个单一的步骤里解决一个特定的问题。因此前面的章节给出的分解技术是很有必要的。然而分解技术不应该被随意的应用,有一些因素会影响解决方案的性能。在数据或者任务分解之后,我们应该问这么一个问题:“我们应该在workers中如何划分进程的负载来获得比较好的性能?”这不是一个很好回答的问题,因为这取决于正在研究的问题。

基本上,我们在定义过程映射时可以提到两个重要的步骤:

  • 识别独立的任务
  • 识别需要数据交换的任务

识别独立的任务

在系统中识别独立的任务将允许我们在不同的workers之间分配任务,因为这些任务不需要持续的通信。因为不需要一个数据单元,所以任务可以在不同的workers间执行而不会影响其它任务的执行。

识别需要数据交换的任务

将需要相互通讯的任务组合起来放到单个worker中可以提高性能。当有大的通信负载的时候的时候这个真的可以提高性能,因为它能减少任务间信息交换的开销。

平衡负载

在并行解决方案中一个典型的问题是如何为不同的工作单元分配计算资源。我们越是将任务分配给不同的workers处理,我们将是需要越多的通信。另一方面,我们越是将任务组合起来分配給一个worker,与通信相关的开销越小。然而,我们可能会增加空转,也就是说,浪费了计算的能力。在并行编程中,浪费并不好。此外,越是将数据聚合在一个worker中,越会减少通过简单的添加更多的设备而增加计算能力的可扩展的灵活性。在一个基于通信的架构(轻微的数据聚合)中,为集群或者网格简单的增加机器从而提升处理性能甚至不需要中断正在运行的系统。


最后更新: 2023年2月28日
创建日期: 2015年2月15日