关于高性能计算的知识记录汇总-菜鸟级别?

news/2024/7/5 23:27:16 标签: cuda, 语言, 集群, 服务器, fortran, 硬件驱动

关于高性能计算的知识记录汇总-菜鸟级别

菜鸟级别

 

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) 是一个为异构平台编写程序的框架,此异构平台可由CPU,GPU或其他类型的处理器组成

 

 

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

首先,时下越来越热的gpu计算,随着中国天津的大型计算机拿到国际头把运算力交椅,不得不让人重视。现有的技术,从阵营上分,有nvidia的cuda,AMD(ATI)的stream。还有一个开放标准:opencl

我是比较看好opencl的,因为他可以支持同时对不同品牌,不同核心cpu和gpu的优化和加速,特别适合异构环境。他的基本原理就是系统里边内置一个类似编译器,好像llvm的东西,软件写完的代码只有到最后的硬件执行的时候进行最终编译,这个编译过程似乎是通过系统里边的硬件驱动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的新闻。


http://www.niftyadmin.cn/n/1373498.html

相关文章

XSS和CSRF详解与防御

开年遇到的第一个问题就是解决XSS攻击>_<,可见要时刻保证网站的安全性至关重要。做好网站安全&#xff0c;不仅维护网站的稳定性&#xff0c;更保证用户数据的一致性。对此&#xff0c;总结一下笔者在工作中遇到的安全问题以及防御方法。前端中常见的两种网站应用安全漏洞…

真正的十大暴利商品 成本曝光

1、化妆品 男士也许该怀疑&#xff0c;大宝是暴利产品吗&#xff1f;NO。这里的化妆品是指进口高端产品。SK&#xff0d;II 著名的神仙水在中国零售价格为560元&#xff0c;而其制造成本仅为人民币6.5元。惊讶么&#xff1f;就算研 发成本都加进去&#xff0c;每单只成本也不…

计算机操作系统--PV操作详细说明

计算机操作系统--PV操作详细说明在计算机操作系统中&#xff0c;PV操作是进程管理中的难点。 首先应弄清PV操作的含义&#xff1a;PV操作由P操作原语和V操作原语组成&#xff08;原语是不可中断的过程&#xff09;&#xff0c;对信号量进行操作&#xff0c;具体定义如下&#x…

111:TemplateView讲解

TemplateView&#xff1a; django.views.generic.base.TemplateView&#xff0c;这个类视图是专门用来返回模版的。在这个类中&#xff0c;有两个属性是经常需要用到的&#xff0c;一个是template_name&#xff0c;这个属性是用来存储模版的路径&#xff0c;TemplateView会自动…

OpenCL和CUDA的使用比较

OpenCL和CUDA虽然不是同一个平级的东西,但是也可以横向比较! 对OpenCL和CUDA的异同做比较: 指针遍历 OpenCL不支持CUDA那样的指针遍历方式, 你只能用下标方式间接实现指针遍历. 例子代码如下: // CUDA struct Node { Node* next; } n n->next; // OpenCL struct Node …

超级详细的手写webpack4配置来启动vue2项目(附配置作用)

基础目录结构以及各个文件的作用 初始npm项目 npm init 一路回车&#xff0c;一律使用默认的npm项目配置 package.json修改scripts 如下&#xff1a; {"name": "doing-a-webpack4-vue2-pro","version": "1.0.0","description&quo…

西方妖怪大百科(下)

中网新空气之军事天地本文版权归作者 maomi 和中网新空气共同拥有, 转贴请注明作者及出处如将本文用于媒体出版, 请与作者本人联系文章标题&#xff1a; 西方妖怪大百科&#xff08;下&#xff09;——绝好的文章&#xff0c;看西方小说时碰到这方面的典故就不会疑惑了&#xf…

西方爵位的由来

中网新空气之军事天地本文版权归作者 maomi 和中网新空气共同拥有, 转贴请注明作者及出处如将本文用于媒体出版, 请与作者本人联系文章标题&#xff1a; 西方爵位的由来&#xff01;(确实是很好的史料&#xff0c;看西方古典小说不会迷惑了&#xff01;) (Zt)文章作者&#xff…