- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux下程序编译与优化;;GNU编译器;Intel编译器;PGI编译器;其它x86编译器;;程序编译流程;源代码后缀规范;最简单的例子;最简单的例子;最简单的例子;最简单的例子;多个源文件的例子;多个源文件的例子;使用头文件的例子;Linux下函数库文件介绍;使用头文件;库函数的生成(静态库);库函数的生成(动态库);库函数的使用;库函数的使用;程序运行时动态库的搜索路径;编译调试选项;;OpenMP简介;OpenMP程序示例;OpenMP程序的编译、执行;;MPI简介;MPI程序示例;MPI程序的编译;MPI程序的编译示例;MPI程序的运行;MPI程序的运行示例;;确认你要优化的应用是否可以获得源代码。
物理化学材料:大部分可获得,除了商业应用gaussian和MS。
CAE:主流应用基本均为商业应用。
生命科学:除少量商业应用,基本均为开源应用。
气象环境科学:基本均为开源应用。
地震资料处理:基本均为商业应用。
动漫渲染:基本均为商业应用。
;找出而执行文件生成的各个环节。
从每个环节尽可能的提高代码的执行效率。
对于高性能应用,编译优化一般从以下几个环节入手
编译器及编译选项的选择
依赖的数学库的选择
MPI的选择;常用编译优化选项;常用编译优化选项;?;实现指令级向量化操作;过程间分析;常用高性能应用软件依赖的数学库。
Blas、lapack、blacs,scalapack数学库
线性方程组相关库函数,在物理化学材料应用领域广泛使用。在分子动力学应用领域也有使用
FFT数学库。
傅里叶变化相关库,是分子动力学等领域主要使用的库函数。
其它数学库。
netcdf、jasper及其它数学库。
;BLAS库,基本线性代数库(Basic Linear Algebra Subroutines),提供最基本的线性代数函数接口。BLAS分为三级:BLAS 1(Level 1)向量与向量操作、BLAS 2(Level 2):矩阵与向量操作、BLAS 3(Level 3):矩阵与矩阵操作。
BLAS库为高性能计算最为基础的库函数,BLAS库的选择的好坏,甚至可以影响应用20%-50%的性能。
目前一般编译的过程中,使用优化的blas库,主要有如下几种。
MKL
ACML
Gotoblas
Atlas;对于Intel平台,MKL依然是最佳性能。
对于这一代的AMD平台,gotoblas依然是性能最佳。
数学库的选择和CPU的架构、应用的具体类型息息相关,具体的最佳性能还要具体的测试。;MPI类型
OpenMPI
Intel mpi
mpich2
Mvapich2
网络类型
TCP
IB only
IB+sm(shared memory)
IPoIB;结果总结:
单点通信:
相比以太网络,IB网络在通信的延时和带宽上均提升较大,而IPoIB仅提升了带宽,延时未明显变化
Intel MPI配IB网络在在所有单点测试中性能最佳,带宽达到3196 MB/sec
集合通信:
Intel MPI在配IB网络加共享内存时,各MPI函数测试能达到最佳性能,mvapich2和openmpi配IB+sm性能次之。Openmpi的tcp网络性能较差。
共享内存通信方式保证单个节点内的所有进程都通过内存来进行网络通信,由于内存的访问性能高于目前的网络设备,同时,内存的通讯降低了网络设备的负载,从而提高了应用的性能。
;MPI类型;MPI类型;目前有两种进程绑定策略供选择:命令行形式和rankfile形式。
1. 命令行形式
常用的进程绑定选项如下:
--bind-to-socket 按socket绑定进程
--bind-to-core 按core绑定进程
--bind-to-none 不设进程绑定(默认)
--bysocket 尽量利用连续的socket(与--bind-to-socket配合使用)
--bycore 尽量利用连续的core(与--bind-to-core配合使用)
--report-bindings 报告进程绑定信息
;2. rankfile形式
OpenMPI可以通过rankfile对进程绑定进行更加详细的设置,rankfile规定了每个进程
(即rank,从0开始编号)在节点及CPU上的分布情况,文件格式如下:
$ cat rankfile
rank 0=node0 slot=2
rank 1=node1 slot=4-7,0
rank 2=node2 slot=1:0
rank 3=node3 slot=1:2-3
$ mpirun -np 4 -hostfile hostfile --rankfile rankfile ./program
rankfile说明:
一行一个
文档评论(0)