并发计算 VS 并行计算

写在前面

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

什么是并行

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

什么是并发

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

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

区别

我在网上看到不少讲并发计算与并行计算区别的文章,感受不少讲得不是很抽象就是不全面,所以我决定本身好好总结一下。闲话少说,先看一张图。spa

methods

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

loading ... ...设计

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

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

  • 并发计算能够同时执行多个不一样的任务;并行计算通常是同时执行多个相同的任务事件

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

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

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

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

联系

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

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

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

combine

总结

这篇文章主要介绍了并行计算与并发计算的区别与联系。若是要深刻地学习并发计算,能够参考操做系统的相关书籍,好比比较经典的《操做系统精髓与设计原理》。在掌握了两者的区别与联系以后,咱们会继续学习CUDA并行计算。

参考资料

  1. 维基百科-Concurrent_computing

  2. 维基百科-Parallel_computing

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

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

相关文章
相关标签/搜索