关于高性能计算(并行计算)的知识记录汇总(OpenMP、OpenCL、CUDA、TBB)

 关于高性能计算的知识记录汇总

      看了这个文章,对我的知识面有了很大的补充,感谢!

       MPI和openMPI的区别,或者CUDA和OpenCL的区别,这篇文章就是为了总结下高性能计算的相关知识。目前高性能计算有两大趋势,并行计算集群和CPU处理器GPU显卡的异构混合计算。下面做对这些名词进行一个简单的介绍:
      MPI-Message Passing Interface是一个并行计算的API,适合超级电脑,大规模集群。

      OpenMPI是一种高性能消息传递库,可以很方便的把串行程序,改为多线程并行程序,适合多核心电脑,可以和MPI搭配使用,对C语言和Fortran高性能计算支持很好。

      TBB-Intel Threading Building Blocks 线程构建模块,是Intel公司开发的并行编程开发的工具,能很好的支持C++并行计算编程。

      CUDA(Compute Unified Device Architecture),显卡厂商NVidia推出的运算平台,使用显卡和处理器进行异构并行计算,是比较高级的并行开发工具,不需要太多硬件知识。

      OpenCL (Open Computing Language) 是一个为异构平台编写程序的框架,属于API,和OpenGL架构类似,此异构平台可由CPU,GPU或其他类型的处理器组成。

 

       最近花了点时间,对OpenMPOpenCL,MPI(有多种实现,如Open MPI)等,关于高性能计算的技术,做了一下简单的浏览,我把这次简单浏览所学习到的一点东西记录在此。这些总结和记录都比较半吊子,还需要更深入的学习和研究。

       首先,时下越来越热的GPU计算,随着中国天津的大型计算机拿到国际头把运算力交椅,不得不让人重视。现有的技术,从阵营上分,有NVidia的CUDA,AMD(ATI)的stream。还有一个开放标准:OpenCL我是比较看好OpenCL的,因为他可以支持同时对不同品牌,不同核心CPU和GPU的优化和加速,特别适合异构环境。他的基本原理就是系统里边内置一个类似编译器,好像llvm,API的东西,软件写完的代码只有到最后的硬件执行的时候进行最终编译,这个编译过程似乎是通过系统里边的硬件驱动Driver,现在都还需要另外安装,intelnvidiaamd提供的sdk中都分别包含有自己Driver,得以执行。所以OpenCL的程序主线程,会根据系统中是几个核的多核CPU,那种架构的CPU(arm或者x86),有没有GPU,哪种GPU? 来决定最后生成的工作线程的代码传递给哪个Driver编译执行。系统会自动保存编译后的二进制代码以备后用。这个过程看起来好像是一个动态语言的过程,但是实际上现在OpenCL还主要是底层的,经过扩展的c语言来写。不同硬件的Driver充当了runtime的角色。

       intel,nvidia,amd等多家硬件厂商支持OpenCL,但是同时也有自己的小九九,比如nvidia的cuda,就提供了针对自己的更多的功能,而且函数上据说也更为高级。所以说,如果是专门针对特定硬件环境下,比如开发大运算量的科学程序的话,最好使用专门硬件自己的GPU加速sdk开发。只有在要求通用性,比如商业软件上,才使用OpenCL开发。

      另外,一贯讨厌开放标准的微软这次又和当年对待OpenGL一样,用他的DirectorX来玩个性了。反正我是能不鸟他,就不鸟他!

 

      其次,OpenMP和MPI,这两个都是已经被广泛使用的并行程序开发库。他们的区别是:OpenMP是针对多核处理器,使用的是共享内存的并行方式,可以说更为线程一些;MPI是针对服务器中,多个对称并行CPU或者集群服务器的情况,内容共享方式是混合的,更为进程一些。

       从某种角度上说,OpenCL有代替OpenMP的可能和趋势,里边会包含针对多核心CPU的处理。现在的环境下,还是OpenMP更合适——可以直接发挥多核心处理器的能力,而且不需要图形开发的知识。这里是一篇关于OpenMP和OpenCL性能的测试。

    现在的并行开发,主要就是MPI+OpenMP,前者负责将运算通过进程分布到不同服务器的不同CPU上去,后者负责通过多线程,有效利用CPU中每个核心的效能。

 

       再次,有文章显示,为了最好的发挥线程的效能,在同样算法条件下,最好程序使用的线程和cpu提供的最大线程数一致,而且最好能够绑定程序执行线程和CPU核心。GPU对某些计算加速效果特别好,效率也不错,但是由于必须通过PCI用CPU进行调度,所以,实际程序设计的时候,要考虑这个通信过程的延时

 

       最后,现有的几种并行计算技术:

1、系统层面,使用进程迁移技术,从而让所有支持多进程的程序,实现并行,如openmosix,这需要经过patch过的操作系统;

2、硬件层面,也就是OpenCL等GPU加速技术,需要相应的硬件支持;

3、开发语言方面,现在erlang这种动态语言,就提供了对集群环境的支持,他会自动向加入集群的服务器分布运算进程。google Go语言可能也是类似的。

 

       PS: 开发方面,OpenCL现在用起来门槛还是很高的,不知道以后会不会提供更高层的抽象库。不过,我发现QT,现在可以支持OpenCL了,QTOpenCL虽然还没有放入主枝,需要自己编译开发包,但是文档上说,提供了QT模式的函数。QT在被诺基亚收购之后,改变授权为lgpl,加上技术越来越全面,的确成了一个跨平台开发很好的解决方案了。真眼馋。

这个网站里边有OpenCL的新闻。

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《高性能计算并行编程技术pdf》是一本有关高性能计算和并行编程技术的参考书籍。该书旨在介绍不同类型的并行编程模型和技术,以及如何使用这些技术来开发高性能应用程序。 该书的前半部分主要介绍了并行计算的基础知识,包括并行计算的定义、优点和挑战等内容。其中,介绍了并行计算中使用的不同类型的并行编程模型,如共享内存模型、分布式内存模型和 GPU 计算模型等。此外,该书还解释了如何使用多线程和 SIMD 指令来优化串行代码。 在书的后半部分,作者更深入地讨论了并行编程技术。其中包括使用 MPI 编写分布式应用程序和使用 OpenMP 并行化共享内存应用程序。 此外,该书还通过实例介绍了CUDA并行编程技术和 OpenACC 的使用方法,以及如何使用这些技术来开发高效的GPU应用程序。 总的来说,《高性能计算并行编程技术pdf》是一本较为全面、系统性很高的高性能计算及并行编程技术参考书籍。该书适用于不同程度的读者,包括对高性能计算和并行编程技术有基本认识的新手以及具有一定并行编程经验的专业人士。 在实践中,读者可以根据自己的需求和项目特点选择合适的并行编程技术,使应用程序在并发情况下运行更快、更有效。 ### 回答2: 高性能计算并行编程技术是一本关于计算机技术的重要参考书。该书主要讲述了高性能计算领域中的并行编程技术,以及在实际应用中如何利用并行技术提高计算机的处理能力和运行效率。本书内容详实且深入,适合各类计算机科技爱好者阅读。书中还介绍了多种并行编程模型和框架,如MPI、OpenMP等,以及如何针对不同的硬件和架构进行并行编程优化。同时,该书还提供了丰富的并行编程实践案例,帮助读者更好地理解并掌握并行编程技术。该书对于从事高性能计算并行计算、科学计算等领域的学生和科研人员都有着重要的指导作用。总之,高性能计算并行编程技术pdf是一本具有实用价值和理论深度的优质计算机技术参考书籍,值得广大计算机爱好者阅读。 ### 回答3: 高性能计算并行编程技术pdf是一本介绍高性能计算并行编程技术的电子书。本书主要包括并行计算的基本概念、并行编程语言和库、分布式存储系统、分布式计算集群等内容。本书采用了循序渐进的讲解方式,能够让读者系统地学习并行编程的知识。 本书首先介绍了并行计算的基本概念,包括并行计算的执行模型、通信模型、并行体系结构等内容。接着,本书介绍了并行编程语言和库,包括MPI、OpenMPCUDA等。这些语言和库是并行编程中必须掌握的工具。 本书还介绍了分布式存储系统和分布式计算集群等内容。这些技术是构建高性能计算系统的关键。本书对这些技术进行了详细介绍,并给出了实际应用的案例。 总体来说,高性能计算并行编程技术pdf的内容丰富、深入、系统,适合想要学习并行编程技术的读者。本书中也提供了一些编程实践,能够帮助读者实际应用所学知识

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值