模式转变:并行编程方面的设计注意事项

本文以 Visual Studio 工具的预发布版为基础。文中的所有信息均有可能发生变更。

本文将介绍以下内容:

并行计算

并发编程

性能提高

本文使用了以下技术:

多线程

从 1986到 2002 年,微处理器的性能每年提高了 52%。这一惊人的技术进步源自晶体管成本依据摩尔 法则不断地缩减,以及处理器厂商在工程方面的出色表现。微软的研究员 Jim Larus 将上述两种因素的 组合称为“摩尔红利”,他解释了这一红利如何造就了现代软件业并使计算机得以广泛普及(请参阅 go.microsoft.com/fwlink/?LinkId=124628)。

从软件方面讲,这一现象称为“免费的午餐”—只需升级运行应用程序的硬件就能改进其性能。(有 关这方面的详细信息,请参阅“面向软件并发的基本转变”,网址为 ddj.com/184405990。)

但如今的模式正在发生改变,处理器的增加使性能得到了改进。多核系统现在已是无处不在了。当然 ,只有软件能同时执行多个任务,多核方式才能提高性能。如果想让多处理器实现多处理器计算机所承诺 的性能提高,必须编写可以使用顺序技术出色完成任务的函数。

并发和并行

现在,程序员有时必须要考虑并行给编程所带来的难题—并发。为了保证响应,需要有某种方式能从 输入事件的处理线程卸载响应时间过长的活动。过去这类活动大部分涉及文件 I/O,但现在更多的是涉及 与 Web 服务的会话。

Microsoft .NET Framework 提供了异步编程模型和后台工作程序理念,以适应这一常用编程需要。虽 然在并行编程中平行编程的复杂性大部分相雷同,但基本模式和目标却各异。多核处理器不会减少并发编 程需求,这种技术是用于优化后台活动和系统中的其它计算,目的是提高性能。

时间: 2024-09-20 15:21:34

模式转变:并行编程方面的设计注意事项的相关文章

深入理解并行编程-分割和同步设计(三)

设计准则 上面的章节中给出了三个并行编程的目标:性能.生产率和通用性.但是还需要更详细的设计准则来真正的指导真实世界中的设计,这就是本节将解决的任务.在真实世界中,这些准则经常在某种程度上冲突,这需要设计者小心的权衡得失. 这些准则可以被认为是设计中的阻力,对这些阻力进行恰当权衡,这就称为"设计模式"[Ale79],[GHJV95]. 基于三个并行编程目标的设计准则是加速.竞争.开销.读写比率和复杂性. 加速:性能增加是花费如此多时间和精力进行并行化的主要原因.加速的定义是运行程序的顺

多核时代:并行程序设计探讨(7)——并行编程模式概览

                                          并行编程模式概览 前面的5.6篇博文,都是和并行编程相关的基础知识,如果你一路看来,基本上也能够开始进行并行编程设计了,也可以和别人吹吹牛.聊聊天了. 但"欲穷千里目,更上一层楼",前面的毕竟都是基础知识,拿来直接设计,虽然能够完成任务,但就像在茫茫大海中航行,没有灯塔,难免会走很多弯路.甚至绝路! 所以我们要在这些基础知识之上,学习一套系统的分析问题.设计方案.应用实现的理论来指导我们作出正确的.优秀

深入理解并行编程-分割和同步设计(二)

双端队列是一种元素可以从两端插入或删除的数据结构[Knu73].据说实现一种基于锁的允许在双端队列的两端进行并发操作的方法非常困难[Gro07].本节将展示一种分割设计策略,能实现合理且简单的解决方案,请看下面的小节中的三种通用方法. 1.1. 右手锁和左手锁 图1.1:带有左手锁和右手锁的双端队列 右手锁和左手锁是一种看起来很直接的办法,为左手端的入列操作加一个左手锁,为右手端的出列操 作加一个右手锁,如图1.1所示.但是,这种办法的问题是当队列中的元素不足四个时,两个锁的范围会发生重叠.这种

.NET并行编程实践(一:.NET并行计算基本介绍、并行循环使用模式)

阅读目录: 1.开篇介绍 2.NET并行计算基本介绍 3.并行循环使用模式 3.1并行For循环 3.2并行ForEach循环 3.3并行LINQ(PLINQ) 1]开篇介绍 最近这几天在捣鼓并行计算,发现还是有很多值得分享的意义,因为我们现在很多人对它的理解还是有点不准确,包括我自己也是这么觉得,所以整理一些文章分享给在使用.NET并行计算的朋友和将要使用.NET并行计算的朋友: NET并行编程推出已经有一段时间了,在一些项目代码里也时不时会看见一些眼熟的并行计算代码,作为热爱技术的我们怎能视

《深入理解并行编程》中文版

原文的下载地址:http://kernel.org/pub/linux/kernel/people/paulmck/perfbook/perfbook.html 中文版下载地址:深入理解并行编程V1.0 (4.1M) 本书是linux内核大牛paul的力作,和鲁阳同学一起,花了两个月时间进行翻译. 目前没有翻译问答部分,主要是时间不够,也担心不能将这部分翻译准确. 对内核深度发烧的同学可以看看. 本书目录 1. 简介----------------------------------- 14 1

《OpenACC并行编程实战》—— 导读

前 言     2010年以来,中国超级计算机建设突飞猛进,欣欣向荣.一个原因是国力强盛,大力投资高新科技:另一个原因是整体科技水平提高,需求旺盛.天气预报.石油物探.工程仿真.基因测序等传统应用对计算资源的需求持续增长,以深度学习为代表的人工智能大爆发,资金雄厚的互联网公司对计算能力极度渴求.超级计算机的建设.应用主战场正在从教育科研单位转向科技企业. 本书特色     笔者学习超算技术时有过苦泪:教材一上来就讲技术细节,只能机械地学习,不清楚这些算法.语法要解决什么问题,花费巨大精力后却发现

《OpenACC并行编程实战》—— 第1章 并行编程概览 1.1 加速器产品

第1章 并行编程概览 对绝大多数人而言,编程语言只是一个工具,讲究简单高效.科学家的主要精力应该用在科研创新活动上,编程工作仅仅是用来验证创新的理论,编程水平再高也不可能获得诺贝尔奖.对学生和企业程序员而言,技术无穷尽,永远学不完,不用即忘,应该认清技术发展方向,学习有前途的技术,不浪费青春年华. OpenACC语言专为超级计算机设计,因此读者需要了解超级计算机的技术演进方向,特别是主流加速器的体系架构.编程模型,看清OpenACC的应用场景,有的放矢.普通读者虽然不会用到大型机群,但小型机群甚

利用F#在Silverlight中实现并行编程

随着.NET 4的发布,要在.NET平台之上进行并行编程可谓是易如反掌.实际上,微软为大家提供了三种并行编程的基础功能.第一种是提供给C++使用的并发运行时 (Concurrency Runtime);第二种是藉由.NET平台提供给托管语言的一组并行编程函数库(包括TPL.PLINQ和并行编程数据结构等);最后一种就是基于F# 本身的并行编程特性. 然而,由于考虑精简的缘故,当前的CoreCLR并未包含.NET 4中的并行函数库,从而在Silverlight(即使最新的Silverlight 4

用Hadoop进行分布式并行编程, 第1部分

Hadoop 是一个实现了 MapReduce 计算模型的开源分布式并行编程框架,借助于 Hadoop, 程序员可以轻松地编写分布式并行程序,将其运行于计算机集群上,完成海量数 据的计算.本文将介绍 MapReduce 计算模型,分布式并行计算等基本概念,以及 Hadoop 的安装部署和基本运行方法. Hadoop 简介 Hadoop 是一个开源的可运行于大规模集群上的分布式并行编程框架,由于分布式存储 对于分布式编程来说是必不可少的,这个框架中还包含了一个分布式文件系统 HDFS( Hadoo