并行处理

并行思维 [I]

懵懂的女人 提交于 2019-11-26 21:43:11
声明: 这篇文章主要想描述一下该怎样以一种安全和可伸缩性的方式使得程序并行化。在多核的今天,我们可能更加需要思考如何编写一个良好的并行程序。文中有相当的内容来自《Intel Threading Building Blocks》,虽说它针对 C++ 讲解,但原理通用,在跟语言,平台有关联的时候,楼主会使用 .NET 阐述。 每个软件开发人员都不得不面对并行编程。以前以及现在,我们在完成任务时,首先会考虑选择最佳算法,实现语言等。但现在我们必须首先考虑任务的内在并行性。而这反过来又会影响我们对算法和实现的抉择。如果试着在最后考虑并行,还不如不要思考并行。程序也不能很好的工作。 现实中,我们每天都在并行思考。举两个例子: 长时间等待。比如生病了,要去医院看医生。挂完号到门诊前时,发现排起了一条长龙,需要很长时间才能就诊。这时,我不会傻站着干等。在病情无大碍的情况下,我会一边做一些耗时更短的事情,一边等待就诊。比如打开 MP3 听听音乐,跟周围的病友们聊天,诸如此类。 大量重复性工作。当手头有个繁重的重复性任务,而周围又有多位相熟的朋友很悠闲,那我肯定希望这些人来帮忙以便更快的完成任务。比如搬家,网络管理员要在每台机器上安装同一个软件等。 我们对并行并不陌生。实际上,并行是相当自然的思维方式。只是似乎开发人员并不常用这种方式。一旦关注并且使用并行编程,那我们便会思考并行

并发与并行的区别

笑着哭i 提交于 2019-11-26 18:41:22
原文链接: https://www.bughui.com/2017/08/23/difference-between-concurrency-and-parallelism/ 很多年前,上操作系统课的时候,老师告诉我们“并行是指同一时刻同时做多件事情,而并发是指同一时间间隔内做多件事情”。这里的差别初看确实简单明了,不过较真的我表示不同意。老师们说的话,貌似并不严谨。时刻是指时间轴上的一个点,一个瞬间,这是个不可再分的量。如果在时间这个维度上没有增量,何来“做事”一说!也就是说,老师们口中的“时刻”与时间间隔(时间段)其实是等价的。那老师们说的那个“区别”有什么区别吗?多年过去,今天偶然又讨论起这个话题。。。 正是因为当初老师给同学们灌输了这种模棱两可的概念,所以每次提起这个话题的时候,总是免不了要有一番口水仗。关于这个问题,我在不同的场合与不同的小伙伴争论过无数次了,厌烦了。所以,今天我想把我自己理解的概念写下来,终结关于这个话题的争论。 首先,我们来看看前辈的看法: Concurrency is when two tasks can start, run, and complete in overlapping time periods. Parallelism is when tasks literally run at the same time, eg. on a

浅谈并发与并行(一)

拥有回忆 提交于 2019-11-26 18:41:04
一、引言 前天在 GitHub 上看到一幅图,问如何向五岁的小孩讲解并发和并行。然后有人以这幅图做答: 这幅图有点儿意思,用咖啡机的比喻来形容并发和并行,从中最直接的体会是,并发是有状态的,某一线程同时执行一个任务,完了才能进行到下一个,而并行是无状态的。 近些年,计算机的处理能力成指数能力增长。处理能力也越来越快,以前的一些工作站现在都可以移植到笔记本电脑或者手持设备上。但是近几年,由于处理器的处理速度已经达到了极限,所以处理器开始向多核方向发展,而提高程序性能的一个最简单的方式之一就是充分利用多核处理器的计算资源。但要编写利用多核处理器处理的程序并不那么简单。所以一些函数是编程语言,如F#,Scala,Erlang等又开始流行起来,因为他们带来的不可变性,递归思想等在一定程度上简化了并行和并发编程。 本文和下文从任务并行和数据并行两个方面,简要讨论一下.NET中的并行编程。这篇文章不可能讲完所有的API,框架,工具或者设计模式。对着方面感兴趣的同学可以看看专门的书籍如Concurrent Programming on Windows 、Concurrency and Parallelism in .NET, 这些书专门讲解了.NET中的并发和并行编程,本文主要参考.NET Performance 一书的部分章节。 二、问题及挑战 对于并行

并发并行与异步的概念

我的未来我决定 提交于 2019-11-26 18:40:46
为了提高CPU的使用效率、支持多任务操作,操作系统中引入了并发技术。 所谓并发是指系统中的多个程序或程序段能够同时执行,这里的同时执行并不是指某一个时刻多段程序在同进执行(除非有多个CPU),而是CPU能把时间分给不同的程序段。比如前面等待I/O的例子,若采用并发技术,当一个程序在等待I/O时,系统可以把CPU资源分配给另外的程序,这样能减少CPU的空闲时间提高了资源利用率。 就是程序同时执行,中间没有等待过程,如果遇到io阻塞继续执行后面的线程就是并行的 并发:   系统具有处理多个任务或者动作的能力(比如单核CPU 处理单任务;接着有处理其他的任务)   百度解释:并发是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。 并行   系统具有同时处理多个任务或者动作能力(比如多核CPU 同时处理多个任务)   百度解释:并排行走”或“同时实行或实施”。在 操作系统 中是指,一组程序按独立异步的速度执行,不等于时间上的重叠(同一个时刻发生)。要区别并发。并发是指:在同一个时间段内,两个或多个程序执行,有时间上的重叠( 宏观 上是同时, 微观 上仍是顺序执行)。并行也指8位数据同时通过并行线进行传送,这样数据传送速度大大提高,但并行传送的线路长度受到限制,因为长度增加,干扰就会增加

并行 并发 概念

南楼画角 提交于 2019-11-26 18:40:30
以下为读书笔记 术语并发是一个通用的概念(concurrency),指同时具有多个活动的系统;而术语并行(parallelism)指的是用并发使一个系统运行的更快。并行可以在计算机系统的多个抽象上运用。 1.线程级并发 2.指令级并行 3.单指令多数据并行 以下为转载 并行(Parallel),或曰并行代码,或曰并行系统都是讨论有关如何使用现有系统,通过任务分片(breaking into pieces)技术使得所有的任务都可以同时运行,以期提高运行速度。所以假设你要执行某项复杂的任务:将执行A,B和C三个过程。A和B为C的运行分别进行准备,但是A,B之间不会相互干预。现在你可以先执行A,直到它执行完毕,然后执行B,等待B执行完毕,然后再去执行C。或者你有多余的CPU,你可以同时执行A和B,当它们执行完毕以后,执行C。当你编写一个在同一时间内运行多个程序片段以达到提升运行速度的程序时,你所做的就是并行。 并发(Concurrency)讨论关于系统存在多个子部分,其中每个部分设计的明确目的是为能够响应在同一时间内发生的事件,并不是为了提高运行速度,但却是系统功能不可或缺的一部分。科技博客(ScienceBlogs)的服务器端系统(The backend system)处理着大量的并发,因为它被设计为能支持成千上万的访问者同时阅读网页内容

区分并发和并行

十年热恋 提交于 2019-11-26 18:40:14
你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。 你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发。 (不一定是同时的) 你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行。 并发的关键是你有处理多个任务的能力,不同时。 并行的关键是你有同时处理多个任务的能力。 一般是物理上 原文:https://blog.csdn.net/weixin_30363263/article/details/80732156 并发:指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在 宏观上 具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行。这就好像两个人用同一把铁锨,轮流挖坑,一小时后,两个人各挖一个小一点的坑,要想挖两个大一点得坑,一定会用两个小时。 原文:https://blog.csdn.net/java_zero2one/article/details/51477791 来源: https://www.cnblogs.com/wlandyy/p/10094860.html

Spark:使用工作集的集群计算

主宰稳场 提交于 2019-11-26 16:09:35
文章目录 摘要 1. 简介 2. 编程模型 2.1 弹性分布式数据集(RDD) 2.2 并行操作 2.3 共享变量 3. 示例 3.1 文本搜索 3.2 逻辑回归 3.3 交替的最小二乘 4. 实现 4.1 共享变量 4.2 编译器集成 5. 成果 5.1 逻辑回归 5.2 交替的最小二乘 5.3 交互式Spark 6. 相关工作 6.1 分布式共享内存 6.2 集群计算框架 6.3 语言集成 6.4 血缘 7. 讨论及未来的工作 8. 致谢 参考文章 摘要 MapReduce及其变体在商业集群上实现大规模数据密集型应用方面非常成功。但是,大多数这些系统都是围绕非迭代数据流模型构建的,而这种模型不适合其他流行的应用程序。本文重点介绍这样一类应用:在多个并行操作中复用一个工作集数据的应用。这包括许多迭代机器学习算法,以及交互式数据分析工具。我们提出了一个支持这类应用的名为Spark的新框架,同时保留MapReduce的可伸缩性和容错性。为了实现这些目标,Spark引入了一种称为弹性分布式数据集(RDD)的抽象。RDD是分区分布在一组机器上的一个只读对象的集合,如果一个分区数据丢失后可以重建。在迭代机器学习任务中,Spark的性能超过Hadoop 10倍,并且交互式查询39 GB数据集可以亚秒响应时间。 1. 简介 一种新的集群计算模型已经变得广泛流行

计算机组成原理复习题二

时光毁灭记忆、已成空白 提交于 2019-11-26 12:33:28
原文地址: https://wenku.baidu.com/view/935be3d1c1c708a1284a4446 一、选择题 1、在间址周期中,_C_____。 A.所有指令的间址操作都是相同的; B.凡是存储器间接寻址的指令,它们的操作都是相同的; C.对于存储器间接寻址或寄存器间接寻址的指令,它们的操作是不同的; D.以上都不对。 2、将有关数据加以分类、统计、分析,以取得有利用价值的信息,我们称其为_C_____。 A. 数值计算 B. 辅助设计 C. 数据处理 D. 实时控制 3、定点16位字长的字,采用2的补码形式表示时,一个字所能表示的整数范围是____A_。 A.-215 ~ +(215 -1) B.-(215 –1)~ +(215 –1) C.-(215 + 1)~ +215 D.-215 ~ +215 4、根据传送信息的种类不同,系统总线分为___B___。 A. 地址线和数据线 B. 地址线、数据线和控制线 C. 地址线、数据线和响应线 D. 数据线和控制线 5、外存储器与内存储器相比,外存储器__B____。 A.速度快,容量大,成本高 B.速度慢,容量大,成本低 C.速度快,容量小,成本高 D.速度慢,容量大,成本高 一个256K×8的存储器,其地址线和数据线总和为___C___。 注解:256=2的8次方,所以地址线为8,256K*8