重新认识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:
更重要的是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不在于提高性能,在于能集成多种互连或其他模块,向上提供一个统一的界面。
最后,来看一下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不在于提高性能,在于能集成多种互连或其他模块,向上提供一个统一的界面。