zoukankan      html  css  js  c++  java
  • 重新认识Intel软件产品-从编译器到FFT、LAPACK、SCALAPACK、ITC、ITA应有尽有

    首先是编译器,这个不多说了,谁都知道。

    更重要的是Intel的数学库,称为Math Kernel Library-MKL

    还有,Intel有一套Cluster Tools,里面包含了Cluster MKL、ITC、ITA、Intel MPI等。

    我们都知道,高性能计算大多用于工程计算,目前的工程计算主要需要这样几个东西:FFT(快速傅立叶变换)、LAPACK(线性代数Package)、BLAS(基础线性代数函数库)、SCAPACK(高扩展的LAPACK,主要用于分布式内存体系结构,也就是Cluster结构的并行化的LAPACK)。这些东西都有免费的开源实现,如FFTW(MIT做的FFT)、LAPACK和SCALAPACK都有免费实现,其中SCALAPACK还需要BLACS(基础线性代数通讯函数库)、BLAS也有atlas的、GOTO的等等。这个东西以前没接触过,这里有张Intel提供的图,很直观明了(从图上就能看出这个玩意是基于MPI的一个针对线性代数的库):

    附件1

    针对上面,Intel的MKL和Cluster MKL都提供了,而且性能都比以上开源的那些要好的多!其中,MKL能提供BLAS、LAPACK、FFT,Cluster MKL在此基础上,还提供了SCALAPACK和经过优化的Linpack执行程序-xhpl。所以,我们给集群用户推荐Intel的MKL,应该推Cluster MKL才对!以前居然都不知道!

    举两个例子吧,Linpack的xhpl就需要BLAS的支持;GROMACS需要FFTW;并行版的VASP需要FFT、SCALAPACK、BLAS。这些其实都可以直接用Intel的Cluster MKL,不需要手动再去自己编译那些开源的库了,而且性能更好!

    不过这里有一个小麻烦,就是FFT。快速傅立叶变换有很多很多种,FFTW,也就是MIT做的这个现在使用的非常广泛,很多代码都是针对这个库写的,而Intel在此基础上做了一个改进,同时,Intel的FFT的API也和FFTW不完全一样,这就导致了我们迁移应用的时候会带来一些困难和问题。比如,一个应用是针对FFTW写的,现在要迁移到Intel的MKL或Cluster MKL上来,就有可能需要做一些修改,因为两者的API不完全一样,这里有个Intel的官方文档,有一些这方面的Instruction:

    OK,通过上面的描述,现在我们应该知道,对于这些工程数学库来说,Intel的MKL是很好的解决方案,除了FFT有点小麻烦。:)

    最后,来看一下Intel整个软件产品线,做一些简单的讲解:

    1、Intel Compilers-不说了

    2、vTune - 这是一个非常power的性能调优工具,因为首先他不需要被调试的程序有源码,只要有可执行文件就行;其次,他可以分析目标,然后给出目标每句代码占用了多少个时钟周期,在程序的执行过程中,可以看到L1 Cache、L2 Cache等的hitrate!所以,非常强大。但是,vTune似乎只能调试SMP结构上的程序,无法调试Cluster结构上的程序。

    3、Intel Performance Primitives(IPP)-这个东东好像是用来做视频/音频编解码的,和HPC关系不大

    4、Intel Math Kernel Library和Intel Cluster Math Kernel Library-上面讲过了

    5、Intel Thread Tools-线程调试工具,和HPC关系不大,不谈了

    6、Intel Cluster Toolkit-其实这个东东就是整合了Intel MPI、ITC、ITA和Intel Cluster MKL的一个总包!呵呵,买这一个包就不用单独买那些了,也会便宜一些吧,HOHO

    7、Intel Trace Analyser和Intel Trace Collector(ITA和ITC)-Cluster程序的调优工具。首先,我们在链接一个程序的时候,要把ITC的库链接进去,然后,程序跑完之后,ITC就会生成一堆数据文件,然后,用ITA就可以看到分析结果了。他主要能分析程序中计算和通信的比重,从而告诉我们程序的瓶颈在哪。换句话说,我们只要拥有一个程序的.o文件或者是源文件,就可以为这个程序分析了(只有一个可执行文件就不行喽)。高级功能可以分析特定的一段代码,不过这就要求代码有一些改动了。

    8、Intel MPI-基于MPICH开发的MPI,特点在于能兼容Infiniband、Myrinet等多种互连,而且其他的一些东西可以通过Intel的一种什么开发语言集成到Intel的MPI中来。总体感觉就是Intel的MPI不在于提高性能,在于能集成多种互连或其他模块,向上提供一个统一的界面。
  • 相关阅读:
    【luogu P1307 数字反转】 题解
    【luogu P1111 公路修建】 题解
    字符串与正则运算
    Java 正则表达式的总结和一些小例子
    js -history.back(-1)和history.go(-1) 区别
    js
    html _ 提取html片段内的纯文本
    vue-x action 的相互调用
    java通过过滤器 设置跨域允许
    git-搭建企业git服务器
  • 原文地址:https://www.cnblogs.com/super119/p/2036391.html
Copyright © 2011-2022 走看看