并行思维(一)

声明:

这篇文章主要想描述一下该怎样以一种安全和可伸缩性的方式使得程序并行化。在多核的今天,我们可能更加需要思考如何编写一个良好的并行程序。文中有相当的内容来自《Intel Threading Building Blocks》,虽说它针对 C++ 讲解,但原理通用,在跟语言,平台有关联的时候,楼主会使用 .NET 阐述。

每个软件开发人员都不得不面对并行编程。以前以及现在,我们在完成任务时,首先会考虑选择最佳算法,实现语言等。但现在我们必须首先考虑任务的内在并行性。而这反过来又会影响我们对算法和实现的抉择。如果试着在最后考虑并行,还不如不要思考并行。程序也不能很好的工作。

现实中,我们每天都在并行思考。举两个例子:

长时间等待。比如生病了,要去医院看医生。挂完号到门诊前时,发现排起了一条长龙,需要很长时间才能就诊。这时,我不会傻站着干等。在病情无大碍的情况下,我会一边做一些耗时更短的事情,一边等待就诊。比如打开 MP3 听听音乐,跟周围的病友们聊天,诸如此类。

大量重复性工作。当手头有个繁重的重复性任务,而周围又有多位相熟的朋友很悠闲,那我肯定希望这些人来帮忙以便更快的完成任务。比如搬家,网络管理员要在每台机器上安装同一个软件等。

我们对并行并不陌生。实际上,并行是相当自然的思维方式。只是似乎开发人员并不常用这种方式。一旦关注并且使用并行编程,那我们便会思考并行。那时我们将会首先思考整个项目的并行性,然后才考虑如何进行编码。

应该怎样来实现程序并行呢?本文将讲述一种重要的思维方式:并行分解。

应用程序有多种并行方式,下面将分别描述。

数据并行

如图1所示,它是一种很典型的数据并行示例:拥有大量的数据,并且这些数据都采取同一种操作来转换每一块数据。

 

图1

图1表示,把数据集中的每一个英文小写字母均转换成相对应的英文大写字母。这个很简单的示例向我们展示了要操作的数据集和同时应用于每个元素的转换操作。那些为超级计算机编码的开发人员最喜欢碰到这种问题,因为要使其并行化实在简单。

时间: 2024-08-10 06:21:38

并行思维(一)的相关文章

并行思维(二)

可伸缩性与加速比 可伸缩性是衡量应用程序加速比多少的尺度之一(注:加速比指应用程序串行化与并行化之间所花费时间之比,它表示并行化之后的效率提升结果).2 倍的加速比表明并行程序仅需要花费串行程序的一半时间.比如理想情况下,运行在单处理器上的程序花费 30 秒,而在双核机器上运行仅需花费 15 秒. 我们总是期望运行在双核机器上的应用程序要比在单核上快的多.同理,运行在四核机器上也要比在双核上快的多.这就好像以前当 CPU 换代升级时,随着主频提升,我们的程序总是可以运行的更快.很不幸,大多数应用

并行思维(三)

线程是什么玩意 对于并行程序设计来说,线程的重要性不言而喻. 现代操作系统是典型的基于抢占式调度机制的多任务操作系统. 所谓多任务,指同一时刻,允许操作系统内有多个应用程序运行.比如,我们可以在同一时刻,一边收听音乐,一边浏览网页.当然,计算机能做到的远不止于此. 所谓抢占式调度机制,指在操作系统强制让另外的应用程序运行之前,正在运行的应用程序究竟可以占用 CPU 多少时间.这正是为什么我们感觉多个应用程序同时运行的真正原因,即使在单核处理器上.举例来说,Windows 操作系统任务调度的时间间

《CUDA C编程权威指南》——1.4 使用CUDA C编程难吗

1.4 使用CUDA C编程难吗 CPU编程和GPU编程的主要区别是程序员对GPU架构的熟悉程度.用并行思维进行思考并对GPU架构有了基本的了解,会使你编写规模达到成百上千个核的并行程序,如同写串行程序一样简单. 如果你想编写一个像并行程序一样高效的代码,那么你需要对CPU架构有基本的了解.例如,数据局部性在并行编程中是一个非常重要的概念.数据局部性指的是数据重用,以降低内存访问的延迟.数据局部性有两种基本类型.时间局部性是指在相对较短的时间段内数据和/或资源的重用.空间局部性是指在相对较接近的

《CUDA C编程权威指南》——1.4节使用CUDA C编程难吗

1.4 使用CUDA C编程难吗CPU编程和GPU编程的主要区别是程序员对GPU架构的熟悉程度.用并行思维进行思考并对GPU架构有了基本的了解,会使你编写规模达到成百上千个核的并行程序,如同写串行程序一样简单.如果你想编写一个像并行程序一样高效的代码,那么你需要对CPU架构有基本的了解.例如,数据局部性在并行编程中是一个非常重要的概念.数据局部性指的是数据重用,以降低内存访问的延迟.数据局部性有两种基本类型.时间局部性是指在相对较短的时间段内数据和/或资源的重用.空间局部性是指在相对较接近的存储

Swoole项目思维转换

PHP是最好的语言,Swoole重新定义了最好的语言,这当然是个梗了,不过php做为一个入门低.开发快.执行效率高的一门语言,而在以快速著称的pc互联网时代,无可争议的成为首选,这是php的优势,然后优势慢慢转化为思维定势,在很多工程师看来php开发就等同于web开发,然而如今已经是移动互联的时代,物联网,智能硬件也如火如涂,好像PHP不是那么受待见了(ps:一直如此),而swoole的出现,成功突破了这一思维定势,使phper可以从web开发跳出,进入了更大的服务器网络编程领域,但web开发和

雷军的互联网思维七字真言

对于雷军而言,互联网思维已经被浓缩到七个字里面:"专注.极致.口碑.快".最近,小编对小米的商务模式进行了一次调研,针对小米对"互联网思维"的实施情况进行了一个大概的了解. 诞生至今,互联网其实也不过走过了三十个年头,然而它却一次次地惊艳了人类.第一次,它征服了全球各地的大学和科研机构,使那些全人类社会都顶尖的创新平台得到了一种前所未有的知识交流.在上世纪90年代中的那场互联网商业化大狂欢,推出了一批闪亮的创业公司,一些文思敏捷的学者也顺势推出了"新经济&

《社会智能与综合集成系统》—第1章1.2节有关思维研究

1.2 有关思维研究 社会智能与综合集成系统1.2.1 信息时代的思维科学 20世纪80年代初,钱学森提倡开展思维科学研究不是偶然的事件.按作者的理解,这是因为科学技术,尤其是信息科学技术得到充分发展的时期,必须要研究这个问题,也就是社会发展.科学发展的必然要提出这个研究的领域.关于思维研究,自从有人类以来就一直在进行.为什么到20世纪80年代又提出开展思维科学研究?这应该说是时代和历史使然.现在这个信息时代,紧迫要求对思维进行研究,以迎接第五次产业革命(戴汝为,1994). 中国早在1984年

《港囧》火爆,徐峥收益多少?体验一下“业务思维×资本思维”的分析方法

这篇文章是根据前段时间和一些互联网创业者们的交流内容完善而成.过去几年,我讲了很多关于上市公司资本运作和并购成长的方法论,提出上市公司可以通过并购+核爆业务实现千亿市值的成长. 最近的几次交流中,我将关注点从上市公司的资本运作前移到非上市公司的资本化.证券化,或者更前移到创业公司该如何建立资本思维实现企业跨越式成长.资本思维不是上市公司专利,创业公司更需要资本思维. 我认为:新三板是创业企业和资本市场门槛最低的连接,是中国资本市场给创业企业一次难遇难求的制度红利.创业企业在苦练内功的同时,更要主

儿童游戏SNS市场潜力大 引导教育与盈利并行

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 传统互联网市场特别是游戏领域针对的用户人群大部分是成年人以及12岁以上青少年.随着互联网的不断发展,这块传统主流市场被深入开发逐渐成熟起来.而中国拥有接近两亿的儿童,互联网的普及,以及生活水平的提高,这些儿童中有很大一部分有条件上网,如何针对5-12岁这个年龄段提供互联网服务,成为众多创业者和vc思考的问题.国外成功的例子也让中国的创业者和v