多核时代:并行程序设计探讨(9)——数据分解模式Data Decomposition

简介:

                                                   Data Decomposition

1.1        问题

如何将待解决的问题的数据分解为能够并行运行的数据单元(units)?

1.2        上下文

并行算法的设计者必须首先详细了解待解决的问题,除此之外,还必须识别如下几个关键因素:

1)计算强相关的部分:待解决问题中的哪部分需要进行大量运算;

2)关键数据结构:主要是对什么数据进行运算;如何进行运算。

 

当基本问题理解后,设计师必须考虑解决问题的需要完成哪些任务以及这些任务中包含哪些数据。为了创建并行算法,关键不是要进行哪种分解,而是首先从哪种分解开始,任务分解和数据分解都要进行。

 

什么情况下该首先采用基于数据的分解方式呢?如果存在以下场景,则从数据分解开始时比较好的选择:

1)待解决问题中计算强相关的部分都是围绕数据进行组织的;

2)同样的操作应用到数据结构的不同部分;

 

1.3        考虑因素

1.3.1   灵活

此时考虑灵活性主要是为了能够让设计能够满足不同的实现需求,这里的实现就是具体采用的技术,例如采用Java编程,采用多CPU的小型机运行等,如果客户不强制要求,在这个阶段就不要限制这些。当然如果问题里面本身已经包含了这种实现,那就必须考虑这种实现的限制了。例如客户要求只能运行在小型机上面,那么设计的时候就需要考虑小型机的特点对人物分解的影响了。

1.3.2   有效

并行程序只有在随着并行计算机的规模增大时效率能够按比例增长才有意义。对于任务分解来说,这就意味着我们需要足够的任务来使得所有计算机都处于忙碌的状态。

通过使每个任务有足够的工作(Work)来弥补管理任务间的依赖带来的效率损失才能达到这点。当然,效率提升会带来灵活性的降低。

1.3.3   简单

再怎么好的程序也要人维护吧,所以再怎么复杂怎么好都要考虑怎么维护。

以上三种因素互相制约,具体怎么平衡,还是要看设计师的水平。

1.4        解决方法

如果已经基于任务进行了分解,则可以针对每个任务进行数据分解。如果定义良好且清晰的数据能够和每个人物关联,则数据分解就简单了。

 

如果我们从数据分解开始进行分解,则这个时候还没有任务,因此我们不能盯着任务进行分解了,而应该盯住最主要的数据结构,然后考虑如何将数据结构分解为数据块,使得针对数据块的操作能够并行。一些常见的样例如下:

1)线性数据结构:可以采用“分段方式”对数据进行分解,针对不同的数据段进行并行操作;如果是一个多维的数据结构,则可以采用多种方式进行分解:按列、按行、按数据块。

2)递归数据结构:可以采用“递归方式”对数据进行分解,所谓“递归方式”就是指针对数据的一部分操作和针对整个数据的操作原理上是一样的。典型的样例就是“树”这种数据结构了,每个子树其实都是一颗树,可以先对子树进行计算,然后将子树合并起来又是一颗树,这样就能够通过并行来完成树的计算了。

 

相关文章
|
JavaScript vr&ar
vue3通过ref获取dom元素并修改样式
vue3通过ref获取dom元素并修改样式
1061 0
|
运维 网络虚拟化 5G
带你读《ONAP技术详解与应用实践》之一:网络自动化挑战及ONAP介绍
国内首部系统剖析ONAP的书籍,也是理论性与实战性兼具的网络自动化实践指导书!本书详细全面地介绍了网络自动化的挑战和发展趋势,以及ONAP的概况、架构设计理念、设计原则、各模块实现细节、关键特性、应用场景和案例实践等。通过本书读者可以深入理解ONAP,提升对网络自动化及相关领域的认知。作者及其团队成员均是华为网络开源领域的专家,长期参与社区的治理、贡献和回馈,致力于通过产业协作,打造统一的平台,降低集成成本,加快新技术导入,助力新一代网络运维系统升级。同时,本书也融入了作者及其团队在网络开源领域的深刻洞察和见解,书中分享了华为参与网络开源的实践经验,是电信网络转型的重要参考。
面向服务架构(SOA)吐血整理
面向服务架构(SOA)吐血整理
面向服务架构(SOA)吐血整理
|
Kubernetes jenkins .NET
k8s+Jenkins+GitLab-自动化部署asp.net core项目
0、目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录   此文阅读目录: 1、闲聊 2、部署流程介绍 3、部署Harbor仓库 4、jenkins-slave镜像搭建 5、部署jenkins 6、jenkins+gitlab挂钩 7、k8s部署asp.net core项目   一、闲聊  现在基本上是隔几天写一篇文章,还是不够勤奋,努力把自己打造成勤奋的人,把工作上面所用到的技术点分享给大家。
3559 0
|
10月前
|
前端开发 Java Spring
Spring MVC核心:深入理解@RequestMapping注解
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的核心,它将HTTP请求映射到控制器的处理方法上。本文将深入探讨`@RequestMapping`注解的各个方面,包括其注解的使用方法、如何与Spring MVC的其他组件协同工作,以及在实际开发中的应用案例。
496 4
|
10月前
|
前端开发 Java 开发者
Spring MVC中的请求映射:@RequestMapping注解深度解析
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的关键,它将HTTP请求映射到相应的处理器方法上。本文将深入探讨`@RequestMapping`注解的工作原理、使用方法以及最佳实践,为开发者提供一份详尽的技术干货。
925 2
|
前端开发 Java Spring
请求映射掌握:探讨Spring MVC中@RequestMapping注解的妙用
请求映射掌握:探讨Spring MVC中@RequestMapping注解的妙用
387 1
请求映射掌握:探讨Spring MVC中@RequestMapping注解的妙用
|
编解码 人工智能 测试技术
安卓适配性策略:确保应用在不同设备上的兼容性
【4月更文挑战第13天】本文探讨了提升安卓应用兼容性的策略,包括理解平台碎片化、设计响应式UI(使用dp单位,考虑横竖屏)、利用Android SDK的兼容工具(支持库、资源限定符)、编写兼容性代码(运行时权限、设备特性检查)以及优化性能以适应低端设备。适配性是安卓开发的关键,通过这些方法可确保应用在多样化设备上提供一致体验。未来,自动化测试和AI将助力应对设备碎片化挑战。
1542 4
SpringMVC入门到实战------3、@RequestMapping注解(超详细基础知识+实际代码案例)
该博客文章详细介绍了SpringMVC中`@RequestMapping`注解的使用方法,包括其功能、位置、value属性、method属性、params属性、headers属性以及支持的路径风格和占位符,并通过实际代码案例展示了如何建立请求与控制器方法之间的映射关系。
SpringMVC入门到实战------3、@RequestMapping注解(超详细基础知识+实际代码案例)
|
机器学习/深度学习 算法 数据可视化
【复杂网络建模】——Python可视化重要节点识别(PageRank算法)
【复杂网络建模】——Python可视化重要节点识别(PageRank算法)
1370 0