写在前面

上一篇文章中,我们学习了如何在CUDA中隐藏数据传输,而其中用到的主要技术就是并发计算。这时你可能会问,这个专栏不是CUDA并行计算吗?怎么又说什么并发计算呢?其实,这里所说的“CUDA并行计算”并不是纯粹的并行计算,而是并行计算与并发计算相结合的一种技术。那么这两者的区别又是什么呢?我觉得是时候讲一下两者的区别与联系了,否则会对之后的学习产生误导。

什么是并行

并行(parallelism)是指在具有多个处理单元(如GPU或者多核CPU)的系统上,通过将计算或数据划分为多个部分,将各个部分分配到不同的处理单元上,各处理单元相互协作,同时运行,已达到加快求解速度或者提高求解问题规模的目的。

什么是并发

并发是一个程序、算法或者问题的可分解属性,它由多个顺序不依赖性或者局部顺序依赖性的结构或单元组成。这就意味着这些单元无论以何种顺序执行或者运算,最终结果都是一样的。

我们通常所接触到的并发大多是基于单处理机的,这常常是为了满足应用的功能需求。比如具有图形界面的程序,应该具有同时响应多个事件的能力,这样给用户的错觉就是同时执行,但实际上总的执行速度并没有提高。然而,并发并不总是基于单处理机的。对于基于多处理机的并发计算,可以获得很好的性能提升——大大提高执行速度。

区别

我在网上看到很多讲并发计算与并行计算区别的文章,感觉很多讲得不是很抽象就是不全面,因此我决定自己好好总结一下。闲话少说,先看一张图。

仔细看一下这张图,先有个大概印象再继续往下读。

loading ... ...

看完上面的图之后,这是我总结的几点:

  • 并发计算可以基于单处理器或者多处理器,基于单处理器时多个任务分时执行,轮流使用处理器;并行计算必须基于多处理器,多个任务同时使用多个处理器

  • 并发计算可以同时执行多个不同的任务;并行计算一般是同时执行多个相同的任务

NOTE:为了更好地比较并行与并发计算,我加入了串行计算。

  • 从专注程度上来看,三者的排名如下:

串行计算->并行计算->并发计算

串行计算最老实也最死板,任何时候只做一件事,雷打不动,这件完成才能做下一件事;并行计算相比就没有那么专注了,它可以同时做多个相同的事情;并发计算就更没有那么专注了,它可以同时做多个不同的事情。

联系

并行计算与并发计算关系密切。我们在操作系统课程中所学到的并发大多是基于单处理器的,进程交替执行,表现出一种同时执行的外部特征。这种并发计算无法实现真正的加速效果。

并行计算(纯粹的)通常是将一个较大的问题分为较小的多个子问题,然后同时处理这些子问题,类似于算法中的分治法。这种执行方式虽然可以获得较好的加速效果,但是还可以获得更好的加速效果。

在基于多核的计算中,常常将并发计算与并行计算相结合,这样可以获得比并行计算更好的加速效果。在专栏的上一篇文章中,我们应用的就是这个技术。

总结

这篇文章主要介绍了并行计算与并发计算的区别与联系。如果要深入地学习并发计算,可以参考操作系统的相关书籍,比如比较经典的《操作系统精髓与设计原理》。在掌握了二者的区别与联系之后,我们会继续学习CUDA并行计算。

参考资料

  1. 维基百科-Concurrent_computing

  2. 维基百科-Parallel_computing

  3. 维基百科-Concurrency (computer science))

  4. 操作系统精髓与设计原理 第六版, [美]William Stallings, 机械工业出版社

并发计算 VS 并行计算相关推荐

  1. 串行计算、并行计算、分布式计算、网格计算与云计算

    并行计算 并行计算可以划分成时间并行和空间并行.时间并行即流水线技术,空间并行使用多个处理器执行并发计算,当前研究的主要是空间的并行问题. 并行计算是相对于串行计算来说的.要理解并行计算,首先需要了解 ...

  2. 并发计算中的串行思考

    软件系统性能的提升的重要方法之一是支持并发性编程,尤其是采用多核体系结构的时候.在全局数据库.云计算和区块链应用程序中,并发性对于实现容错和分布式服务也是至关重要的.然而,对并发性的掌握一直是令人畏惧 ...

  3. Java并行计算线程池_干货!线程池+CountDownLatch,实现 多线程并发计算、汇总

    目录结构 抽象类:求和器 单线程 求和器 VS 多线程 求和器 1)线程池 多个线程 一起并发执行,性能很生猛 2)CountDownLatch 主线程 使用 latch.await() 阻塞住,直到 ...

  4. float gpu 加速_(总结篇)使用 MATLAB GPU 加速计算|MATLAB 并行计算与分布式服务器|MATLAB技术论坛...

    本帖最后由 蓝云风翼 于 2013-12-18 17:28 编辑 注: 利用gpu加速有一下工具 1.JACKET 可从帖子中寻找 2.MATLAB a.并行计算工具箱 gpuArray,查看支持gp ...

  5. 黄仁勋:串行计算过时并行计算是未来

    上个月,NVIDIA公司联合创始人.总裁兼首席执行官黄仁勋先生亲自来华,主持了2010年度GPU高性能计算峰会(GPU High Performence Forum 2010),并且亲自带领NVIDI ...

  6. LNMP网站并发计算

    established:已成功建立tcp连接,可传输数据 一个php-cgi支持50个左右的established 200*50=1W 就是200个php-cgi检查支持1W个并发 一个php请求页面 ...

  7. ABAP并发计算的一个实例

    During myTask performance optimization, I realized that currently the read implementation of 5 expan ...

  8. 操作系统——并发相关问题

    目录 1. 什么是操作系统中的并发(Concurrency)? 1.1 并发的概念 1.2 并发引起的问题 1.3 编程中的并发 1.3.1 并发计算与并行计算 1.3.2 为什么要使用并发计算? 2 ...

  9. 国四网络工程笔记(究极错题)

    难题 难题 I/O设备管理中,I/O软件的层次结构有( ). A) 用户应用层 B) 设备独立层 C) 设备驱动层 D) 中断处理层 E) 设备执行层 ABCD[解析]整个I/O系统可以看成具有四个层 ...

最新文章

  1. Control Compliance Suite,听说过吗?
  2. FPGA/IC技术交流2020
  3. 聊聊 Java 的几把 JVM 级锁
  4. mysql 视图锁_如何诊断和处理锁等待
  5. Java 字符,整型,字符串三者转换
  6. Java 各种日期/时间 对象转Long时间戳
  7. mysql学习笔记--表操作
  8. 经济学专业向计算机方向创业,基于市场需求的经济学专业人才培养模式研究
  9. 重新启用ClustrMaps记数
  10. Microsoft SQL Server Integration Service文章总结
  11. 泰克示波器面板上的旋钮的作用有哪些
  12. Unity 第三人称人物移动
  13. html网页综合项目实战
  14. mac下报 504 Gateway Time-out
  15. python自学课堂_python自学——列表
  16. F - Ubiquitous Religions
  17. mindspore| lenet模型 推理过程记录
  18. java 庖丁解牛中文分词_庖丁解牛中文分词包
  19. 华大单片机HC32L130 / HC32L136 / HC32F030 系列硬件开发指南
  20. Python的数据库

热门文章

  1. 查看centos硬件配置
  2. 修改linux最大文件句柄数
  3. Gson解析纯Json数组
  4. linux 常用命令系列—cp 复制文件与文件夹
  5. [置顶] 使用Joson的格式字符串在Socket中通讯时数据格式的转换
  6. 区分元素特性attribute和对象属性property
  7. Spark 集群安装
  8. python 如何加密自己的脚本
  9. 使用 Hasor 从数据库查询显示到页面上
  10. Part 2 —— 迁移到 Go Modules