.Net并行编程系列之一:并行基础
现在普通PC平台上面多核处理器的普及,让我们领教了能够利用多核进行并行计算的软件的处理能力,同时继承更多地核心正是当前处理器发展的趋势。
但是作为一个.NET开发人员,是否有时候会发现你的程序占用了其中一个核心的大部分运行时间,甚至达到了100%,除了继续优化处理问题的算法。
那么还有方法能够利用CPU的其它核心为你的应用程序所用么?答案是显然可以的。
你所要做的,就是把应用程序的任务分割成块,使各块在同一时间运行。
.Net 4.0引入了一种新的编程模型,结合VS2010使得开发并行应用程序变得更加容易。.Net4.0提供了任务并行库(TPL)与并行语言查询集合(PLINQ)。VS2010提供了调试并行程序的工具和分析工具。
把现行的程序任务改编成可以并行运行的任务需要以下几个步骤:
1.分解:了解任务,选择合适的粒度把任务拆分成离散的单元方法(函数)
2.协调:选择协调这些并行任务的方法(数据流或者控制流)
3.可扩展共享:任务间共享数据的设计(例如通过阻塞并发线程实现数据同步,锁,比较并交换,信号灯等),记住,不管是什么同步设计都必然产生顺序的形式,都会对性能效率产生负面影响。
并发与并行的区别:
并发的目的是防止线程饥饿,强调的是每个线程都能有自己的时间片来运行,减少相应的时延。
并行解决的问题是关于吞吐量的,是一种优化手段,目的是为了充分利用多核处理器。
既然并行可以利用多核处理器的威力,那么当内核数目增加时,我们的应用程序加速是否可以随着利用的内核数目增加而成线性增长呢?
答案是否定的,除非需要处理的任务没有顺序执行部分。
例如: 假设一个任务分为两部分:不能被并行化的部分a,可以并行化的部分b。
当任务在单核处理器上面顺序执行时,分别需要的时间为 Ta,Tb,记Ta+Tb=S
如果把任务放到n核心处理器上面运行,则理论的运行时间应该是〉=Ta+(Tb/n)
则得到加速比 r〈=[S/(Ta+Tb/n)]=[S/(Ta+(S-Ta)/n)]=1/[Ta/S+(1-Ta/S)/n]
当n无限增大时 r的极限为r〈=S/Ta
所以加速比的极限为S/Ta。
此定律为阿姆达尔定律,它为我们的并行计算指明了可以改进的方向,尽量减少顺序部分占所有时间的比例。并且如果任务的顺序部分比例很大的时候,即使把可并行部分转换为并行执行,也是意义不大的。
完毕。
作者:Andy Zeng
欢迎任何形式的转载,但请务必注明出处。
http://www.cnblogs.com/andyzeng/p/3704333.html
.Net并行编程系列之一:并行基础的更多相关文章
- .NET 并行(多核)编程系列之六 Task基础部分完结篇
原文:.NET 并行(多核)编程系列之六 Task基础部分完结篇 .NET 并行(多核)编程系列之六 Task基础部分完结篇 前言:之前的文章介绍了了并行编程的一些基本的,也注重的讲述了Task的一些 ...
- .NET 4.0 任务和并行编程系列
8天玩转并行开发 8天玩转并行开发——第一天 Parallel的使用 8天玩转并行开发——第二天 Task的使用 8天玩转并行开发——第三天 plinq的使用 8天玩转并行开发——第四天 同步机制(上 ...
- C#并行编程系列-文章导航
菜鸟初步学习,不对的地方请大神指教,参考<C#并行编程高级教程.pdf> 目录 C#并行编程-相关概念 C#并行编程-Parallel C#并行编程-Task C#并行编程-并发集合 C# ...
- C#并行编程之数据并行
所谓的数据并行的条件是: 1.拥有大量的数据. 2.对数据的逻辑操作都是一致的. 3.数据之间没有顺序依赖. 运行并行编程可以充分的利用现在多核计算机的优势.记录代码如下: public class ...
- 五 浅谈CPU 并行编程和 GPU 并行编程的区别
前言 CPU 的并行编程技术,也是高性能计算中的热点,也是今后要努力学习的方向.那么它和 GPU 并行编程有何区别呢? 本文将做出详细的对比,分析各自的特点,为将来深入学习 CPU 并行编程技术打下铺 ...
- C#并行编程--命令式数据并行(Parallel.Invoke)
命令式数据并行 Visual C# 2010和.NETFramework4.0提供了很多令人激动的新特性,这些特性是为应对多核处理器和多处理器的复杂性设计的.然而,因为他们包括了完整的新的特性,开 ...
- 第五篇:浅谈CPU 并行编程和 GPU 并行编程的区别
前言 CPU 的并行编程技术,也是高性能计算中的热点,也是今后要努力学习的方向.那么它和 GPU 并行编程有何区别呢? 本文将做出详细的对比,分析各自的特点,为将来深入学习 CPU 并行编程技术打下铺 ...
- .Net并行编程系列之三:创建带时间限制(Timeout)的异步任务并取得异步任务的结果
尝试创建基于MVVM三层架构的异步任务: 场景:View层触发ViewModel层的动作请求,ViewModel层异步的从Model层查询数据,当数据返回或者请求超时时正确更新ViewModel层数据 ...
- C#并行编程--命令式数据并行(Parallel.Invoke)---与匿名函数一起理解(转载整理)
命令式数据并行 Visual C# 2010和.NETFramework4.0提供了很多令人激动的新特性,这些特性是为应对多核处理器和多处理器的复杂性设计的.然而,因为他们包括了完整的新的特性,开 ...
随机推荐
- 【RL系列】On-Policy与Off-Policy
强化学习大致上可分为两类,一类是Markov Decision Learning,另一类是与之相对的Model Free Learning 分为这两类是站在问题描述的角度上考虑的.同样在解决方案上存在 ...
- JPA error org.hibernate.AnnotationException: No identifier specified for entity
错误:org.hibernate.AnnotationException: No identifier specified for entity 原因:JPA所使用的Entity需要标注@Id,在引用 ...
- “我爱淘”第二冲刺阶段Scrum站立会议8
完成任务: 完成学院分类的点击查看书籍功能,可以点击书的条目查看书的详细信息.完善界面显示,实现购买功能,优化提示,购买后就将该书从数据库中删去. 计划任务: 将书的详细信息进行完善,并且可以点击收藏 ...
- “我爱淘”第二冲刺阶段Scrum站立会议3
完成任务: 完成了注册界面的设计,以及部分代码,但是还没有完成服务器端的添加功能. 计划任务: 将注册功能实现了它,可以对数据库进行添加,在客户端实现分类功能,通过学院的分类查看书籍. 遇到问题: 分 ...
- Requests库与HTTP协议
了解HTTP协议 请求与响应模式的协议: 用户提出对URL(用来定位网络中的资源位置)地址数据的操作请求,服务器给予相应. 无状态的应用层协议:两次请求之间不会互相影响. HTTP协议支持的请求种类: ...
- Swift-setValuesForKeysWithDictionary
重写 setValuesForKeysWithDictionary 那么字典中可以有的字段在类中没有对应属性 class Person : NSObject { var age :Int = // 重 ...
- 定制安全的PHP环境
除了熟悉各种PHP漏洞外,还可以通过配置php.ini来加固PHP的运行环境.PHP官方也曾经多次修改php.ini的默认设置.在本书中,推荐php.ini中一些安全相关参数的配置. register ...
- 第87天:HTML5中新选择器querySelector的使用
一.HTML5新选择器 1.document.querySelector("selector");selector:根据CSS选择器返回第一个匹配到的元素,如果没有匹配到,则返回n ...
- Codeforces 786C Till I Collapse
题意: 给出一个长度为n的序列,每个数值在1-n之间且为整数,现在要把这个序列划分为若干段,使得每一段的颜色种数不超过k,求最少的区间数目.对于从1到n的n种k的取值,分别输出这时的最少区间数目. 分 ...
- 一些noip模拟题一句话题解
Problem A: 序列 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 12 Solved: 9[Submit][Status][Web Boar ...