多核时代:并行程序设计探讨(9)——数据分解模式Data Decomposition-阿里云开发者社区

开发者社区> 华仔爱技术> 正文

多核时代:并行程序设计探讨(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)递归数据结构:可以采用“递归方式”对数据进行分解,所谓“递归方式”就是指针对数据的一部分操作和针对整个数据的操作原理上是一样的。典型的样例就是“树”这种数据结构了,每个子树其实都是一颗树,可以先对子树进行计算,然后将子树合并起来又是一颗树,这样就能够通过并行来完成树的计算了。

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
MaxCompute表设计最佳实践
MaxCompute表设计最佳实践 产生大量小文件的操作 MaxCompute表的小文件会影响存储和计算性能,因此我们先介绍下什么样的操作会产生大量小文件,从 而在做表设计的时候考虑避开此类操作。 使用MaxCompute Tunnel SDK上传数据,上传过程中,每commit一次就会产生一个文件。
3201 0
设计前沿:25款精妙的 iOS 应用程序图标
  在这篇文章中,我为大家精心挑选的25款巧妙设计的 iOS 应用程序图标,会激发你未来的工作。苹果的产品总是让人爱不释手,设计精美,对用户使用体验把握得淋漓尽致,iPhone、iPad、iPod和 iMac 等众多苹果产品备受用户追捧。
614 0
四种常见的 POST 提交数据方式
<p style="border:0px; font-family:Helvetica,Corbel,Verdana,Arial,sans-serif; font-size:16px; margin-top:15px; margin-bottom:15px; outline:0px; padding-top:0px; padding-bottom:0px; vertical-align:b
1227 0
如何将数据仓库从 AWS Redshift 迁移到阿里云 AnalyticDB for PostgreSQL
阿里云AnalyticDB for PosgreSQL与 AWS Redshift 均为采用PosgreSQL内核的MPP架构数据仓库服务,语法高度兼容一致。本文介绍两者的差异比较,以及如何从AWS Redshift迁移应用和数据到阿里云 ADB for PG。
3636 0
《Windows 程序设计(第3版)》——第6章 框架中的窗口 6.1 CWnd类的引出
在类的体系结构中,框架程序提供了CWnd类来封装窗口的HWND句柄,即使用CWnd类来管理窗口的对象,这包括窗口的创建和销毁、窗口的一般行为和窗口所接受的消息。
1038 0
为什么往dataGridView中添加数据会多一行
1、案例代码 this.dataGridView1.Rows.Clear(); if (Get_One_User(Convert.
730 0
基于DataFlux进行养猪场实时数据模拟生成和分析实践
摘要:DataFlux是驻云科技的实时大数据分析平台。经过对养猪场的数据分析需求,使用DataMock数据模拟器模拟生成原始数据并上传至DataFlux,快速实现了对养猪场数据的分析全流程。 注:本次业务分析、模拟数据分析生成和实践主要为培训和演示用途,旨在快速了解DataMock和DataFlux进行实时数据分析的功能和流程。
805 0
《多核与GPU编程:工具、方法及实践》----第2章 多核和并行程序设计 2.1 引言
本章目标 学习设计并行程序的PCAM方法。 使用任务图和数据依赖图来识别可以并行执行的计算部分。 学习将问题的解法分解为可并发执行部分的流行的分解模式。 学习编写并行软件的主要程序结构模式,如主/从和fork/join。 理解分解模式的性能特点,如流水线。
993 0
html5 getComputedStyle + resize 实现动态宽高度等比响应式页面设计
序:通常我们只能控制div的宽度 而不能控制高度,在响应式页面里 如果要这个div是正方形那么必须的用媒体查询在不同的分辨率下写死宽高度 今天突发奇想研究了个 用百分比来动态控制div的高度让其与宽度相同 成为一个正方形 甚至任何你想要比例 一,背景:目前移动端大多数图片或视频列表页面的显示,列出...
989 0
+关注
华仔爱技术
热爱技术的10多年IT老兵,既能深入底层写代码,又能高屋建瓴做架构;可以带领团队往前冲,也能侃侃而谈做演讲。著有《面向对象葵花宝典:思想、技巧与实践》。
114
文章
1
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载