刀片及胖节点超级计算系统使用指南李会民2016年5月27日目录1前言42刀片及胖节点超算系统概述53用户登录与文件传输74串行及OpenMP程序编译94.
1编译器简介94.
1.
1IntelC/C++Fortran编译器简介94.
1.
2PGIC/C++Fortran编译器简介104.
1.
3GNUC/C++Fortran编译器简介104.
2C/C++程序的编译114.
2.
1输入输出文件后缀与类型的关系114.
2.
2IntelC/C++编译器重要编译选项124.
2.
3PGIC/C++编译器重要编译选项134.
2.
4GNUC/C++编译器GCC重要编译选项164.
2.
5C/C++程序编译举例194.
3Fortran程序的编译204.
3.
1输入输出文件后缀与类型的关系20目录24.
3.
2IntelFortran编译器重要编译选项204.
3.
3PGIFortran编译器重要编译选项234.
3.
4GNUFortran编译器重要编译选项274.
3.
5Fortran程序编译举例304.
4OpenMP程序的编译与运行315MPI并行程序编译335.
1MPI并行程序的编译335.
2MPI并行程序的运行345.
3MPI并行程序调试346数值函数库356.
1IntelMKL356.
1.
1MKL主要内容356.
1.
2MKL目录内容366.
1.
3链接MKL367作业管理系统397.
1查看队列情况:bqueues397.
2提交作业:bsub407.
2.
1提交到特定队列:bsub-q407.
2.
2运行串行作业:bsub-qserial417.
2.
3指明所需要的CPU核数:bsub-n417.
2.
4运行MPI作业:bsub-nNUMmpijob417.
2.
5运行OpenMP共享内存作业:bsub-q417.
2.
6运行MPI和OpenMP共享内存混合并行作业417.
2.
7运行排他性作业:bsub-x417.
2.
8指明输出、输出文件运行:bsub-i-o-e427.
2.
9交互式运行作业:bsub-I427.
2.
10使用fat48和fat64大共享内存队列427.
3终止作业:bkill42目录37.
4挂起作业:bstop437.
5继续运行被挂起的作业:bresume437.
6设置作业最先运行:btop437.
7设置作业最后运行:bbot437.
8修改排队中的作业选项:bmod447.
9查看作业的排队和运行情况:bjobs447.
10查看运行中作业的屏幕正常输出:bpeek457.
11查看各节点的运行情况:lsload457.
12查看各节点的空闲情况:bhosts457.
13查看用户信息:busers468运行Gaussian等大IO程序注意事项479联系方式481前言41前言本用户使用指南主要将对在中国科学技术大学超级计算中心刀片及胖节点超级计算系统上进行编译以及运行作业做一基本介绍,详细信息请参看相应的指南.
为了便于查看,主要排版约定如下:命令:commandparameters文件:/path/file脚本文件:§exportOPENMPI=/opt/openmpi-1.
4.
3_intel-11.
1.
073exportPATH=$OPENMPI/bin:$PATHexportMANPATH=$MANPATH:$OPENMPI/share/man命令输出:QUEUE_NAMEPRIOSTATUSMAXJL/UJL/PJL/HNJOBSPENDRUNSUSPserial50Open:Active-120--0000fat4843Open:Active-264--0000fat6443Open:Active-128--0000long40Open:Active-828--14401440normal30Open:Active-828--8732166570由于受水平和时间所限,错误和不妥之处在所难免,欢迎指出错误和改进意见,本人将尽力完善.
请从中国科大超算中心主页(http://scc.
ustc.
edu.
cn)上下载更新后的手册.
2刀片及胖节点超算系统概述52刀片及胖节点超算系统概述中国科大超级计算中心刀片及胖节点超级计算系统,主要由曙光CB60-G刀片、CB60-G2刀片、联想B710刀片、曙光A950服务器、曙光I620r-G服务器、曙光I420r-G服务器、浪潮TS850服务器、联想万全R630G7服务器、HPDL580G7服务器构成,共计105个计算节点1528个CPU核心,总双精度峰值计算能力为每秒15.
46万亿次.
具体参数为:管理和用户登录节点:–节点名为sugon.
–用户主登录节点,可以进行编译与通过作业调度系统提交作业.
禁止直接在此节点上运行作业.
–曙光I620机架式服务器一台,2颗主频2.
40GHz的IntelXeonE5620x86_644核CPU(共8核),8GBDDR31333MHz内存.
计算节点:–刀片或机架式计算节点:用户都可使用.
节点名型号数量CPU内存(GB)node1-node40曙光CB60-G40IntelXeonX5650,共12核,主频2.
66GHz24node41-node60曙光CB60-G220IntelXeonX5650,共12核,主频2.
66GHz24node61-node70联想B71010IntelXeonX5650,共12核,主频2.
66GHz24node71-node80曙光CB60-G210IntelXeonX5650,共12核,主频2.
66GHz48node93-node103曙光CB60-G或I620r-G11IntelXeonE5620,共8核,主频2.
4GHz16node104-node105曙光I420r-G2IntelXeonE5620,共4核,主频2.
4GHz8–胖计算节点:更多CPU核大共享内存节点,数量有限,需要特殊申请使用.
节点名型号数量CPU内存(GB)node81-node83浪潮TS8503IntelXeonE7540,共48核,主频2.
0GHz128node84-node85浪潮TS8502IntelXeonE7-8837,共64核,主频2.
66GHz256node86-node87曙光A9502AMDOpteron8431,共48核,主频2.
40GHz128node88曙光A620r-G1AMDOpteron6168,共24核,主频1.
90GHz32node89-node90联想R630G72IntelXeonE7430,共16核,主频2.
13GHz64node91-node92HPDL580G72IntelXeonE7-4807,共24核,主频1.
87GHz962刀片及胖节点超算系统概述6存储:13TB曙光DS600-F20SAS磁盘阵列,用户主目录/home所用存储.
磁盘配额:用户默认50GB,如需更大空间,请提出申请.
计算网络:千兆以太网.
操作系统:x86_64架构的64位CentOS6.
5Linux操作系统.
编译器:Intel、PGI、GNU等C/C++Fortran编译器1.
数值函数库:IntelMKL.
并行环境:OpenMPI,支持MPI并行程序;各节点内的CPU为共享内存,节点内既支持分布式内存的MPI并行方式,也支持共享内存的OpenMP并行方式;同时支持在节点内部共享内存,节点间分布式内存的混合并行模式.
资源管理和作业调度:PlatformLSF.
常用公用软件安装目录:/opt,请自己查看有什么软件,有些软件需要在自己/.
bashrc等配置文件中设置后才可以使用.
图1:刀片及胖节点超算系统1Intel、PGI编译器为试用版.
3用户登录与文件传输73用户登录与文件传输本系统的操作系统为x86_64的CentOS6.
2,不支持TELNET方式登录,用户需以SSH方式(在MSWindows下可利用putty、SSHSecureShellClient等支持SSH协议的客户端软件2)登录到用户登录节点(sugon,IP为211.
86.
151.
102)后进行编译、提交作业等操作,用户数据可以利用FTP和SFTP协议进行数据传输.
为了安全,短时间内5次密码错误登录时的IP将被自动封锁10分钟,可以换个IP登录,或联系我们解封.
用户可以在登录节点上运行passwd命令修改密码(利用passwd命令在登录节点之外的节点上修改密码无效).
请不要设置简单密码和向无关人员泄漏密码,以免造成您的损失.
用户登录进来的默认语言环境为中文zh_CN.
UTF-8,以方便查看登录后的中文提示.
如果希望使用英文或GBK中文,可以在/.
bashrc中添加exportLC_ALL=C或exportLC_ALL=zh_CN.
GBK.
针对zh_CN.
UTF-8的putty客户端配置修改如下3:打开putty主程序,选择SESSION登入到服务器点击左上角changesetting.
.
.
.
,打开设置面板选择window>Appearance>Fontsettings>Change.
.
.
,选择Fixedsys字体,字符集选择CHINESE_GB2312在window>Appearance>Translation中,Receiveddataassumedtobeinwhichcharacterset中,把Usefontencoding改为UTF-8切换到session选项,选中常用的那个,点击SAVE,把这些设置保存在session里面(否则下次打开又不支持中文).
账户开设时,默认50GB磁盘存储空间,请及时清除不需要的文件,以便释放空间.
运行quota命令可以查看当前自己的磁盘空间使用情况,du-hs目录可以查看目录占用的空间.
如需要更大存储空间,请与管理人员联系.
超算中心无法提供数据备份服务,数据一但丢失将无法恢复,请及时下载保存自己的数据.
2putty下载:http://scc.
ustc.
edu.
cn/yhsq/dlrjxz/200910/t20091014_13029.
htmlhttp://www.
chiark.
greenend.
org.
uk/sgtatham/putty/download.
html3putty客户端中文设置请参考:http://scc.
ustc.
edu.
cn/yhsq/dlrjxz/200910/t20091014_13029.
html3用户登录与文件传输8超算系统可从校内IP登录,校外一般无法直接访问.
如果需要从校外等登录,可以使用学校的VPN(教师网络通带有此功能,学生的不带),也可联系我们放开此校外IP(如不清楚自己在校外当前使用的IP,可利用http://scc.
ustc.
edu.
cn/myip.
php获取当前使用的IP),或者申请超算中心VPN(http://scc.
ustc.
edu.
cn/vpn/),此VPN设置了只能访问超算服务器,无法访问校内外其它资源.
CentOS(CommunityENTerpriseOperatingSystem)是Linux主流发行版之一,它来自于RedHatEnterpriseLinux依照开放源代码规定释出的源代码所编译而成.
由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的RedHatEnterpriseLinux使用.
两者的不同在于CentOS并不包含封闭源代码软件.
一般来说可以用man命令或者命令加-h或–help等选项来查看该命令的详细用法,详细信息可参考CentOS、RedHatEnterpriseLinuxAS手册或通用Linux手册.
4串行及OPENMP程序编译94串行及OpenMP程序编译在本系统上可运行C/C++、Fortran的串行程序,以及与OpenMP和MPI结合的并行程序.
用户只需在登录节点(sugon)上以相应的编译命令和选项进行编译即可(用户不应到其余节点上进行编译,以免影响系统效率,其它节点一般只设置了运行作业所需要的库路径等,未必设置了编译环境).
当前安装的编译环境主要为:C/C++、Fortran编译器:Intel、PGI和GNU编译器,支持OpenMP并行.
MPI并行环境:OpenMPI并行环境用户可以单独设置自己所需的串行编译环境(如在/.
bashrc中设置),也可直接运行mpi-selector-menu4命令按照提示选择自己使用的MPI和串行编译环境,注意数字后需要加u,设置完成后最好重新登录以便设置生效:Currentsystemdefault:openmpi-1.
4.
5_intel-12.
1.
3.
293Currentuserdefault:openmpi-1.
4.
5"u"and"s"modifierscanbeaddedtonumericand"U"commandstospecify"user"or"system-wide".
1.
openmpi-1.
4.
3_intel-11.
1.
0732.
openmpi-1.
4.
4_intel-12.
1.
3.
2933.
openmpi-1.
4.
5_intel-12.
1.
3.
2934.
openmpi-1.
4.
5_pgi-10.
6U.
UnsetdefaultQ.
QuitSelection(1-4[us],U[us],Q):本节主要介绍串行程序和OpenMP并行程序的编译,MPI并行程序的编译将在后面介绍.
4.
1编译器简介4.
1.
1IntelC/C++Fortran编译器简介IntelC/C++Fortran编译器是一种主要针对Inetl平台的高性能编译器,可用于开发复杂且要进行大量计算的程序.
4此命令虽然是针对MPI设计的,但设置后会更改串行的编译环境.
4串行及OPENMP程序编译10系统已经安装并设置默认使用64位的12.
1.
3.
293版本的Intel编译器,目录为/opt/intel/composer_xe_2011_sp1.
9.
293,用户直接使用即可,无需自己设置.
系统还安装有64位(未装32位的)11.
1.
073版本的编译器,安装的目录为/opt/intel/Compiler/11.
1/073,用户如想使用,可以在自己的/.
bashrc之类环境设置文件中添加代码(表示空格):§.
/opt/intel/Compiler/11.
1/073/bin/ifortvars.
shintel64Intel编译器编译C和C++源程序的编译命令分别为icc和icpc;编译Fortran源程序的命令为ifort.
icpc命令使用与icc命令相同的编译器选项,利用icpc编译时将后缀为.
c和.
i的文件看作为C++文件,而利用icc编译时将后缀为.
c和.
i的文件则看作为C文件.
用icpc编译时,总会链接C++库,而用icc编译时,只有在编译命令行中包含C++源文件时才链接C++库.
官方手册目录:12.
1.
3.
293版本:/opt/intel/composer_xe_2011_sp1.
9.
293/Documentation11.
1.
073版本:/opt/intel/Compiler/11.
1/073/Documentation4.
1.
2PGIC/C++Fortran编译器简介PGIC/C++Fortran编译器是一种针对多种CPU与操作系统的高性能编译器,可用于开发复杂且要进行大量计算的程序.
当前安装的版本为2010v10.
6,安装在/opt/pgi/linux86-64/10.
6.
PGI编译器编译C、C++、Fortran77源程序的命令分别为pgcc、pgCC和pgf77,编译Fortran90(为了描述方便,本文中将Fortran90、95、2003、2008标准统称为Fortran90)的源程序的命令有pgf90、pgf901、pgf902、pgf90_ex、pgf95和pgfortran.
官方手册目录:/opt/pgi/linux86-64/10.
6/doc.
4.
1.
3GNUC/C++Fortran编译器简介GNUC/C++Fortran(GCC)编译器为系统自带的编译器,当前安装的版本为4.
4.
6和3.
4.
6,默认为4.
4.
6版本,用户无需特殊设置即可使用.
GNU编译器编译C、C++源程序的命令分别为4.
4.
6版本的gcc和g++及3.
4.
6版本的gcc34和g++34;4.
4.
6版本的gfortran可以直接编译Fortran77、90源程序.
3.
4.
6版本的g77只能编译F77程序,不可编译Fortran90源程序.
4串行及OPENMP程序编译114.
2C/C++程序的编译本节主要介绍C/C++源程序的常用编译方式.
建议采用性能较好的Intel编译器,用户也可以选择适合自己程序的编译器,以获取更好的性能.
4.
2.
1输入输出文件后缀与类型的关系编译器默认将按照输入文件的后缀判断文件类型,输入文件的后缀与类型的关系见表1.
表1:输入文件后缀与类型的关系文件名解释动作filename.
cC源文件传给编译器filename.
Cfilename.
CCfilename.
ccC++源文件传给编译器filename.
cppfilename.
cxxfilename.
afilename.
so库文件传递给链接器filename.
i已预处理的文件传递给标准输出filename.
o目标文件传递给链接器filename.
s汇编文件传递给汇编器编译器默认将输出按照文件类型与后缀相对应,输出文件的后缀与类型的关系见表2.
表2:输出文件后缀与文件类型的关系文件名解释filename.
i已预处理的文件,由使用-p选项生成filename.
o目标文件,由添加-c选项生成filename.
s汇编文件,由添加-s选项生成a.
out默认生成的可执行文件4串行及OPENMP程序编译124.
2.
2IntelC/C++编译器重要编译选项-Bdynamic:在运行时动态链接所需要的库.
-Bstatic:静态链接用户生成的库.
-c:仅编译成目标文件(.
o文件).
-fast:最大化整个程序的速度.
这里是所谓的最大化,还是需要结合程序本身使用合适的选项,默认不使用此选项.
-g:包含调试信息.
-ip:在单个文件中进行过程间优化(InterproceduralOptimizations-IPO).
-ipo[n]:在多文件中进行过程间优化,非负整数n为可生成的目标文件数.
-I:指明头文件的搜索路径.
-L:指明库的搜索路径.
-l:指明所需链接的库名,如库名为libxyz.
a,则可用-lxyz指定.
-ofile:指定生成的文件名.
-openmp:编译OpenMP程序.
注意:在本系统上只能在同一个节点内的CPU上运行OpenMP程序,提交作业时请结合相应选项,以保证在同一个节点运行.
-O:设定优化级别,默认为O2.
O与O2相同,推荐使用;O3为在O2基础之上增加更激进的优化,比如包含循环和内存读取转换和预取等,但在有些情况下速度反而慢,建议在具有大量浮点计算和大数据处理的循环时的程序使用.
-p:进行概要导向优化(ProfileGuidedOptimization-PGO).
-shared:生成共享目标而不是可执行文件,必须在编译每个目标文件时使用-fpic选项.
-static:静态链接所有库.
-std=:标准可以为c89、c99、gnu89、gnu++98或c++0x,分别对应相应标准.
-w:编译时不显示任何警告,只显示错误.
-wall:编译时显示所有警告.
4串行及OPENMP程序编译13-x:类型可以为c、c++、c-header、cpp-output、c++-cpp-output、assembler、assembler-with-cpp或none,分别表示c源文件等,以使所有源文件都被认为是此类型的.
建议仔细看看编译器手册中关于程序优化的部分,特别是IPO、PGO和HLO部分,多加测试,选择适合自己程序的编译选项以提高性能.
4.
2.
3PGIC/C++编译器重要编译选项PGI编译器选项非常多,下面仅仅是列出一些本人认为常用的关于编译C程序的pgcc命令的重要选项.
编译C++程序的pgCC命令有稍微不同,建议仔细查看PGI相关资料.
一般选项:–-#:显示编译器、汇编器、链接器的调用信息.
–-c:仅编译成目标文件(.
o文件).
–-defaultoptions和-nodefaultoptions:是否使用默认选项,默认为使用.
–-flags:显示所有可用的编译选项.
–-help[=option]:显示帮助信息,option可以为groups、asm、debug、language、linker、opt、other、overall、phase、phase、prepro、suffix、switch、target和variable.
–-Minform=level:控制编译时错误信息的显示级别.
level可以为fatal、file、severe、warn、inform,默认为-Minform=warn.
–-noswitcherror:显示警告信息后,忽略未知命令行参数并继续进行编译.
默认显示错误信息并且终止编译.
–-ofile:指定生成的文件名.
–-show:显示现有pgcc命令的配置信息.
–-silent:不显示警告信息,与-Minform=severe等同.
–-v:详细模式,在每个命令执行前显示其命令行.
–-V:显示编译器版本信息.
–-w:编译时不显示任何警告,只显示错误.
优化选项:–-fast:编译时选择针对目标平台的普通优化选项.
用pgcc-fast-help可以查看等价的开关.
优化级别至少为O2,参看-O选项.
4串行及OPENMP程序编译14–-fastsse:对支持SSE和SSE2指令的CPU(如Xeon)编译时选择针对目标平台的优化选项.
用pgcc-fastsse-help可以查看等价的开关,优化级别至少为O2,参看-O选项.
–-fpic或-fPIC:编译器生成位置无关代码,以便可用于生成共享目标文件(动态链接库).
–-Kpic或-KPIC:与-fpic或-fPIC相同,为了与其余编译器兼容.
–-Minfo[=option[,option,…]]:显示有用信息到标准错误输出,选项可为all、autoinline、inline、ipa、loop或opt、mp、time或stat.
–-Mipa[=option[,option,…]]和-Mnoipa:启用指定选项的过程间分析优化,默认为-Mnoipa.
–-Mneginfo=option[,option…]:使编译器显示为什么特定优化没有实现的信息.
选项包括concur、loop和all.
–-Mnoopenmp:当使用-mp选项时,忽略OpenMP并行指令.
–-Mnosgimp:当使用-mp选项时,忽略SGI并行指令.
–-Mpfi:生成概要导向工具,此时将会包含特殊代码收集运行时的统计信息以用于子序列编译.
-Mpfi必须在链接时也得使用.
当程序运行时,会生成概要导向文件pgfi.
out.
–-Mpfo:启用概要导向优化,此时必须在当前目录下有概要文件pgfi.
out.
–-Mprof[=option[,option,…]]:设置性能功能概要选项.
此选项可使得结果执行生成性能概要,以便PGPROF性能概要器分析.
–-mp[=option]:打开对源程序中的OpenMP并行指令的支持.
–-O[level]:设置优化级别.
level可设为0、1、2、3、4,其中4与3相同.
–-pg:使用gprof风格的基于抽样的概要刨析.
调试选项:–-g:包含调试信息.
预处理选项:–-C:预处理时保留C源文件中的注释.
–-D:预处理时定义宏name为def.
–-dD:打印源文件中已定义的宏及其值到标准输出.
–-dI:打印预处理中包含的所有文件信息,含文件名和定义时的行号.
–-dM:打印预处理时源文件已定义的宏及其值,含定义时的文件名和行号.
–-dN:与-dD类似,但只打印源文件已定义的宏,而不打印宏值.
4串行及OPENMP程序编译15–-E:预处理每个.
c文件,将结果发送给标准输出,但不进行编译、汇编或链接等操作.
–-I:指明头文件的搜索路径.
–-M:打印make的依赖关系到标准输出.
–-MD:打印make的依赖关系到文件file.
d,其中file是编译文件的根名字.
–-MM:打印make的依赖关系到标准输出,但忽略系统头文件.
–-MMD:打印make的依赖关系到文件file.
d,其中file是编译的文件的根名字,但忽略系统头文件.
–-P:预处理每个文件,并保留每个file.
c文件预处理后的结果到file.
i.
–-U:去除预处理中的任何name的初始定义.
链接选项:–-Bdynamic:在运行时动态链接所需的库.
–-Bstatic:静态链接所需的库.
–-Bstatic_pgi:动态链接系统库时静态链接PGI库.
–-g77libs:允许链接GNUg77或gcc生成的库.
–-l:指明所需链接的库名.
如库为libxyz.
a,则可用-lxyz指定.
–-L:指明库的搜索路径.
–-m:显示链接拓扑.
–-Mrpath和-Mnorpath:默认为-rpath,以给出包含PGI共享目标的路径.
用-Mnorpath可以去除此路径.
–-pgf77libs:链接时添加pgf77运行库,以允许混合编程.
–-r:生成可以重新链接的目标文件.
–-R:对共享目标文件总搜索directory目录.
–-pgf90libs:链接时添加pgf90运行库,以允许混合编程.
–-shared:生成共享目标而不是可执行文件,必须在编译每个目标文件时使用-fpic选项.
–-soname:生成共享目标时,用内在的DT_SONAME代替指定的name.
–-u:传递给链接器,以生成未定义的引用.
语言选项:–-B:源文件中允许C++风格的注释,指的是以//开始到行尾内容为注释.
除非指定-C选项,否则这些注释被去除.
4串行及OPENMP程序编译16–-c8x或-c89:对C源文件采用C89标准.
–-c9x或-c99:对C源文件采用C99标准.
平台相关选项:–-Kieee和-Knoieee:浮点操作是否严格按照IEEE754标准.
使用-Kieee时一些优化处理将被禁止,并且使用更精确的数值库.
默认为-Knoieee,将使用更快的但精确性低的方式.
–-Ktrap=[option,[option]…]:控制异常发生时CPU的操作.
选项可为divz、fp、align、denorm、inexact、inv、none、ovf、unf,默认为none.
–-Msecond_underscore和-Mnosecond_underscore:是否对已有_的Fortran名字添加第二个_.
为与g77兼容时使用,因g77默认符号后添加第二个_.
–-mcmodel=small|medium:使内存模型是否限制目标小于2GB(small)或允许数据块大于2GB(medium).
medium时暗含-Mlarge_arrays选项.
–-tptarget:target可以为nehalem-64等,默认与编译时的平台一致.
建议仔细看看编译器手册中关于程序优化的部分,多加测试,选择适合自己程序的编译选项以提高性能.
本系统采用的是IntelXeonX5650(Westmere核心架构)CPU,需要仔细选择,特别是保证结果的正确性.
4.
2.
4GNUC/C++编译器GCC重要编译选项GNU编译器GCC是Linux系统自带的编译器,系统安装的版本为4.
4.
6和3.
4.
6,选项非常多,下面仅仅是列出一些针对4.
4.
6本人认为常用的重要选项,建议仔细看GCC相关资料.
控制文件类型的选项:–-xlanguage:明确指定而非让编译器判断输入文件的类型.
language可为:*c、c-header、c-cpp-output*c++、c++-header、c++-cpp-output*objective-c、objective-c-header、objective-c-cpp-output*objective-c++objective-c++-headerobjective-c++-cpp-output*assembler、assembler-with-cpp*ada*f95、f95-cpp-input*java4串行及OPENMP程序编译17*treelang当language为none时,禁止任何明确指定的类型,其类型由文件名后缀决定.
–-c:仅编译成目标文件(.
o文件),并不进行链接.
–-ofile:指定生成的文件名.
–-v:详细模式,显示在每个命令执行前显示其命令行.
–-###:显示编译器、汇编器、链接器的调用信息但并不进行实际编译,在脚本中可以用于捕获驱动器生成的命令行.
––help:显示帮助信息.
––target-help:显示目标平台的帮助信息.
––version:显示编译器版本信息.
C语言选项:–-ansi:C模式时,支持所有ISOC90指令.
在C++模式时,去除与ISOC++冲突的GNU扩展.
–-std=:控制语言标准,可以为c89、iso9899:1990、iso9899:199409、c99、c9x、iso9899:1999、iso9899:199x、gnu89、gnu99、gnu9x、c++98、gnu++98.
–-B:在源文件中允许C++风格的注释,指的是以//开始到行尾内容为注释.
除非指定-C选项,否则这些注释被去除.
–-c8x或-c89:对C源文件采用C89标准.
–-c9x或-c99:对C源文件采用C99标准.
警告选项:–-fsyntax-only:仅仅检查代码的语法错误,并不进行其它操作.
–-w:编译时不显示任何警告,只显示错误.
–-Wfatal-errors:遇到第一个错误就停止,而不尝试继续运行显示更多错误信息.
调试选项:–-g:包含调试信息.
–-ggdb:包含利用gbd调试时所需要的信息.
4串行及OPENMP程序编译18优化选项:–-O[level]:设置优化级别.
优化级别level可以设置为0、1、2、3、s.
预处理选项:–-C:预处理时保留C源文件中的注释.
–-Dname:预处理时定义宏name的值为1.
–-Dname=def:预处理时定义name为def.
–-Uname:预处理时去除的任何name初始定义.
–-undef:不预定义系统或GCC声明的宏,但标准预定义的宏仍旧被定义.
–-dD:显示源文件中定义的宏及其值到标准输出.
–-dI:显示预处理中包含的所有文件,包括文件名和定义时的行号信息.
–-dM:显示预处理时源文件中定义的宏及其值,包括定义时文件名和行号.
–-dN:与-dD类似,但只显示源文件中定义的宏,而不显示宏值.
–-E:预处理各.
c文件,将结果发给标准输出,不进行编译、汇编或链接.
–-I:指明头文件的搜索路径.
–-M:打印make的依赖关系到标准输出.
–-MD:打印make的依赖关系到文件file.
d,其中file是编译文件的根名字.
–-MM:打印make的依赖关系到标准输出,但忽略系统头文件.
–-MMD:打印make的依赖关系到文件file.
d,其中file是编译的文件的根名字,但忽略系统头文件.
–-P:预处理每个文件,并保留每个file.
c文件预处理后的结果到file.
i.
链接选项:–-pie:在支持的目标上生成位置无关的可执行文件.
–-s:从可执行文件中去除所有符号表.
–-rdynamic:添加所有符号表到动态符号表中.
–-static:静态链接所需的库.
–-shared:生成共享目标而不是可执行文件,必须在编译每个目标文件时使用-fpic选项.
–-shared-libgcc:使用共享libgcc库.
–-static-libgcc:使用静态libgcc库.
–-u:确保符号symbol未定义,强制链接一个库模块来定义它.
4串行及OPENMP程序编译19–-I:指明头文件的搜索路径.
–-l:指明所需链接的库名,如库为libxyz.
a,则可用-lxyz指定.
–-L:指明库的搜索路径.
–-B:设置寻找可执行文件、库、头文件、数据文件等路径.
Intel386和AMDx86-64平台相关选项:–-mtune=cpu-type:设置优化针对的CPU类型,可为:generic、core2、k8、opteron等,core2为针对本系统至强XeonCPU的.
–-march=cpu-type:设置指令针对的CPU类型,CPU类型与上行中一样.
–-mieee-fp和-mno-ieee-fp:浮点操作是否严格按照IEEE标准.
约定成俗的选项:–-fpic:生成位置无关的代码以用于共享库.
–-fPIC:如果目标机器支持,将生成位置无关的代码.
–-fopenmp:编译OpenMP并行程序.
–-fpie和-fPIE:与-fpic和-fPIC类似,但生成的位置无关代码,只能链接到可执行文件中.
建议仔细看看编译器手册中关于程序优化的部分,多加测试,选择适合自己程序的编译选项以提高性能.
4.
2.
5C/C++程序编译举例IntelC/C++编译器编译举例:–icc-oyourprogyourprog.
c将C程序yourprog.
c编译为可执行文件yourprog.
–icpc-oyourprogyourprog.
cpp将C++程序yourprog.
cpp编译为可执行文件yourprog.
–icc-oyourprog-omp-openmpyourprog.
c将OpenMP指令并行的C程序yourprog-omp.
c编译为可执行文件yourprog-omp.
PGIC/C++编译器编译举例:–pgcc-oyourprogyourprog.
c将C程序yourprog.
c编译为可执行文件yourprog.
4串行及OPENMP程序编译20–pgCC-oyourprogyourprog.
cpp将C++程序yourprog.
cpp编译为可执行文件yourprog.
–pgcc-oyourprog-omp-mpyourprog.
c将OpenMP指令并行的C程序yourprog-omp.
c编译为可执行文件yourprog-omp.
GNUC/C++编译器编译举例:–gcc-oyourprogyourprog.
c将C程序yourprog.
c编译为可执行文件yourprog.
–g++-oyourprogyourprog.
cpp将C++程序yourprog.
cpp编译为可执行文件yourprog.
–gcc-oyourprog-omp-fopenmpyourprog.
c将OpenMP指令并行的C程序yourprog-omp.
c编译为可执行文件yourprog-omp.
4.
3Fortran程序的编译4.
3.
1输入输出文件后缀与类型的关系编译器默认将按照输入文件的后缀判断文件类型,输入文件的后缀与类型的关系见表3.
编译器默认将输出按照文件类型与后缀相对应,输出文件的后缀与类型的关系见表4.
4.
3.
2IntelFortran编译器重要编译选项-Bdynamic:运行时动态链接所需要的库.
-Bstatic:静态链接用户生成的库.
-c:仅编译成目标文件(.
o文件).
-convert[关键字]:转换无格式数据的类型,比如关键字为big_endian和little_endian时,分别表示无格式的输入输出为big_endian和little_endian格式,更多格式类型,请看编译器手册.
-cpp:对源代码进行预处理,等价于-fpp.
-extend-source[size]:指明固定格式的Fortran源代码宽度,选项size可为72、80和132.
也可直接用-72、-80和-132指定,默认为72字符.
4串行及OPENMP程序编译21表3:输入文件后缀与文件类型的关系文件名解释动作filename.
a目标库文件传给编译器filename.
ffilename.
forfilename.
ftn固定格式的Fortran源文件被Fortran编译器编译filename.
ifilename.
fppfilename.
FPPfilename.
F固定格式的Fortran源文件自动被Fortran编译器预处理后再被编译filename.
FORfilename.
FTNfilename.
f90filename.
i90自由格式的Fortran源文件被Fortran编译器编译filename.
F90自由格式的Fortran源文件自动被Fortran编译器预处理后再被编译filename.
s汇编文件传递给汇编器filename.
so库文件传递给链接器filename.
o目标文件传递给链接器表4:输出文件后缀与类型的关系文件名解释生成方式filename.
o目标文件编译时添加-c选项生成filename.
so共享库文件编译时指定为共享型,如添加-shared,并不含-cfilename.
mod模块文件编译含有MODULE声明时的源文件生成filename.
s汇编文件编译时添加-S选项生成a.
out默认生成的可执行文件编译时没有指定-c时生成4串行及OPENMP程序编译22-fast:最大化整个程序的速度.
这里是所谓的最大化,还是需要结合程序本身使用合适的选项.
-fixed:指明Fortran源代码为固定格式,默认由文件后缀决定格式类别.
-fpic:生成位置无关代码,当编译成共享目标文件时必须使用此选项,等价于-fPIC,默认为-fno-pic.
-free:指明Fortran源程序为自由格式,默认由文件后缀决定格式类别.
-g:包含调试信息.
-ip:在单个文件中进行过程间优化(InterproceduralOptimizations-IPO).
-ipo[n]:在多文件中进行过程间优化,非负整数n为可生成的目标文件数.
-I:指明头文件的搜索路径.
-implicitnone:指明默认变量名为未定义,建议在写程序时添加implicitnone语句,以避免出现由于默认类型造成的错误.
-L:指明库的搜索路径.
-l:指明所需链接的库名,如库文件为libxyz.
a,则可用-lxyz指定.
-nofree:指明Fortran源程序为固定格式.
-openmp:编译OpenMP指令并行程序,注意:在本系统上只能在同一个节点内CPU上运行OpenMP程序,提交作业时请结合相应选项,以保证在同一个节点上运行.
-O:设定优化级别.
默认为O2,O与O2相同,推荐使用.
O3为在O2基础之上增加更激进的优化,比如包含循环和内存读取转换和预取等,但在有些情况下速度反而慢,建议在具有大量浮点计算和大数据处理的循环时的程序使用.
-p:进行概要导向优化(ProfileGuidedOptimization-PGO).
-shared:生成共享目标而不是可执行文件,必须在编译每个目标文件时使用-fpic选项.
-stand:以指定Fortran标准进行编译,编译时显示源文件中不符合此标准的信息.
标准可为f03、f90、f95和none,分别对应显示不符合Fortran2003、90、95的代码信息和不显示任何非标准的代码信息,也可写为-std,此时标准不带f,可为03、90、95.
-static:静态链接所有库.
4串行及OPENMP程序编译23-unroll[n]:循环最大可展开的层数,与性能相关.
-us:编译时给外部用户定义的函数名添加一个下划线,等价于-assumeunderscore,如果编译时显示_函数找不到时也许添加此选项即可解决.
-w:编译时不显示任何警告,只显示错误.
-wall:编译时显示所有警告.
-X:编译时不用默认的头文件搜索目录,与-I结合可使用指定的头文件目录.
建议仔细看看编译器手册中关于程序优化的部分,特别是IPO、PGO和HLO部分,多加测试,选择适合自己程序的编译选项以提高性能.
另外Intel手册是针对IntelCPU写的,本系统采用的是AMDOpteronBarcelonaCPU,因此参数未必合适,建议参考IntelXeonCPU的编译参数,并仔细选择,首先是保证结果的正确性.
4.
3.
3PGIFortran编译器重要编译选项PGI编译器选项非常多,下面仅仅是列出一些本人认为常用的编译Fortran9x程序的pgf90重要选项,编译Fortran77程序的pgf77等编译命令也许有部分不同,建议仔细看PGI相关资料.
一般选项:–-#:显示编译器、汇编器、链接器的调用.
–-c:仅编译成目标文件(.
o文件).
–-defaultoptions和-nodefaultoptions:是否使用默认选项,默认为使用.
–-flags:显示所有可用的编译参数.
–-help[=option]:显示帮助信息,option可以为groups、asm、debug、language、linker、opt、other、overall、phase、phase、prepro、suffix、switch、target和variable.
–-Minform=level:控制编译时错误信息的显示级别,level可以为fatal、file、severe、warn、inform,默认为-Minform=warn.
–-noswitcherror:显示警告信息后,忽略未知命令行参数继续进行编译;默认为显示错误信息并终止编译.
–-ofile:指定生成的文件名.
–-show:显示现有pgf90命令的配置信息.
–-silent:不显示警告信息,与-Minform=severe等同.
4串行及OPENMP程序编译24–-v:详细模式,显示在每个命令执行前显示其命令行.
–-V:显示编译器版本信息.
–-w:编译时不显示任何警告,只显示错误.
优化选项:–-fast:编译时选择针对目标平台的普通优化参数,用pgf90-fast-help可以查看等价的开关.
优化级别至少为O2,参看-O参数.
–-fastsse:对支持SSE和SSE2指令的CPU(如Opteron)编译时选择针对目标平台的普通优化参数,用pgcc-fastsse-help可以查看等价的开关.
优化级别至少为O2,参看-O参数.
–-fpic或-fPIC:编译器生成位置无关代码,以便可以用于生成共享目标文件(动态链接库).
–-Kpic或-KPIC:与-fpic或-fPIC相同,为了与其余编译器兼容.
–-Minfo[=option[,option,…]]:显示有用的信息到标准错误输出,选项可以为all、autoinline、inline、ipa、loop或opt、mp、time或stat.
–-Mipa[=option[,option,…]]和-Mnoipa:对过程间分析启用和指定参数,默认为-Mnoipa.
–-Mneginfo=option[,option…]:使编译器生成关于为什么特定优化没有实现的信息.
选项包括concur、loop和all.
–-Mnoopenmp:当使用-mp选项时,忽略OpenMP指令.
–-Mnosgimp:当使用-mp选项时,忽略SGI并行指令.
–-Mpfi:生成概要导向工具,此时将会包含特殊代码以收集运行时的统计信息以用于子序列的编译中.
-Mpfi必须在链接时也得使用.
当程序运行时,会生成概要导向文件pgfi.
out.
–-Mpfo:启动概要导向优化,此时必须在当前目录下存在概要文件pgfi.
out.
–-Mprof[=option[,option,…]]:设置性能功能概要选项.
用此选项可使结果执行生成性能概要,以便PGPROF性能概要器可以分析.
–-mp[=option]:打开对源程序中的OpenMP并行指令的支持.
–-O[level]:设置优化级别.
level可设为0、1、2、3、4,其中4与3相同.
–-pg:使用gprof风格的基于抽样的概要刨析.
调试选项:–-g:包含调试信息.
预处理选项:4串行及OPENMP程序编译25–-C:预处理时保留C源文件中的注释.
–-D:预处理时定义name为def.
–-dD:显示源文件中定义的宏及其值到标准输出.
–-dI:显示预处理中包含的所有文件,包括文件名和定义时的行号信息.
–-dM:显示预处理时源文件中定义的宏及其值,包括定义时文件名和行号.
–-dN:与-dD类似,但只显示源文件中已定义的宏,而不显示宏值.
–-E:预处理各.
c文件,将结果发给标准输出,不进行编译、汇编或链接.
–-I:指明头文件的搜索路径.
–-M:显示make的依赖关系到标准输出.
–-MD:显示make的依赖关系到文件file.
d,其中file是编译文件的根名字.
–-MM:显示make的依赖关系到标准输出,但忽略系统头文件.
–-MMD:显示make的依赖关系到文件file.
d,其中file是编译的文件的根名字,但忽略系统头文件.
–-P:预处理每个文件,并保留每个file.
c文件预处理后的结果到file.
i.
–-U:预处理去除时name的初始定义.
链接选项:–-Bdynamic:运行时动态链接所需的库.
–-Bstatic:静态链接所需的库.
–-Bstatic_pgi:对动态链接系统库时静态链接PGI库.
–-g77libs:允许链接GNUg77或gcc生成的库.
–-l:指明所需链接的库名,如库为libxyz.
a,则可用-lxyz指定.
–-L:指明库的搜索路径.
–-m:显示链接拓扑.
–-Mrpath和-Mnorpath:默认为-rpath,以设置包含PGI共享目标的路径.
用-Mnorpath可以去除此路径.
–-pgf77libs:链接时添加pgf77运行库,以允许混合编程.
–-r:生成可以重新链接的目标文件.
–-R:对共享目标文件总搜索directory目录.
–-pgf90libs:链接时添加pgf90运行库,以允许混合编程.
–-shared:生成共享目标而不是可执行文件,必须在编译每个目标文件时使用-fpic选项.
4串行及OPENMP程序编译26–-soname:生成共享目标时,用内在的DT_SONAME代替指定的name.
–-u:传递给链接器,以生成未定义的引用.
语言选项:–-byteswapio或-Mbyteswapio:对无格式Fortran数据文件在输入输出时从大端(big-endian)到小端(little-endian)交换比特,或者相反.
此选项可以用于读写Sun或SGI等系统中的无格式的Fortran数据文件.
–-i2:将INTEGER变量按照2比特处理.
–-i4:将INTEGER变量按照4比特处理.
–-i8:将默认的INTEGER和LOGICAL变量按照4比特处理.
–-i8storage:对INTEGER和LOGICAL变量分配8比特.
–-Mallocatable[=95|03]:按照Fortran95或2003标准分配数组.
–-Mbackslash和-Mnobackslash:将反斜线(\)当作正常字符(非转义符)处理,默认为-Mnobackslash.
-Mnobackslash导致标准的C反斜线转义序列在引号包含的字串中重新解析.
-Mbackslash则导致反斜线被认为和其它字符一样.
–-Mextend:设置源代码的行宽为132列.
–-Mfixed、-Mnofree和-Mnofreeform:强制对源文件按照固定格式进行语法分析,默认.
f或.
F文件被认为固定格式.
–-Mfree和-Mfreeform:强制对源文件按照自由格式进行语法分析,默认.
f90、.
F90、.
f95或.
F95文件被认为自由格式.
–-Mi4和-Mnoi4:将INTEGER看作INTEGER*4.
-Mnoi4将INTEGER看作INTEGER*2.
–-Mnomain:当链接时,不包含调用Fortran主程序的目标文件.
–-Mr8和-Mnor8:将REAL看作DOUBLEPRECISION,将实(REAL)常数看作双精度(DOUBLEPRECISION)常数.
默认为否.
–-Mr8intrinsics[=float]和-Mnor8intrinsics:将CMPLX看作DCMPLX,将REAL看作DBLE.
添加float选项时,将FLOAT看作DBLE.
–-Msave和-Mnosave:是否将所有局部变量添加SAVE声明,默认为否.
–-Mupcase和-Mnoupcase:是否保留名字的大小写.
-Mnoupcase导致所有名字转换成小写.
注意,如果使用-Mupcase,那么变量名X与变量名x不同,并且关键字必须为小写.
–-Mcray=pointer:支持Cray指针扩展.
–-moduledirectory:指定编译时保存生成的模块文件的目录.
–-r4:将DOUBLEPRECISION变量看作REAL.
4串行及OPENMP程序编译27–-r8:将REAL变量看作DOUBLEPRECISION.
平台相关选项:–-Kieee和-Knoieee:浮点操作是否严格按照IEEE754标准,默认为不.
使用-Kieee时一些优化处理被禁止,并且使用更加精确的数值库,默认为-Knoieee,将使用更快的但精确性低的方式.
–-Ktrap=[option,[option]…]:控制异常发生时,CPU的操作.
选项可以为divz、fp、align、denorm、inexact、inv、none、ovf、unf,默认为none.
–-Mlarge_arrays和-Mnolarge_arrays:是否允许数组大于2GB,默认不允许.
当使用-mcmodel=medium时暗含-Mlarge_arrays选项.
–-mcmodel=small|medium:使用内存模型是否限制目标小于2GB(small)或允许数据块大于2GB(medium),medium时暗含-Mlarge_arrays选项.
–-Msecond_underscore和-Mnosecond_underscore:是否对已经有_的Fortran名字添加第二个_.
主要在与g77兼容时使用,g77默认给符号添加第二个_.
–-Mvarargs和-Mnovarargs:是否生成从Fortran调用C程序时用变量参数调用序列,默认为否.
–-tptarget:target可以为amd64、amd64e、barcelona、barcelona-64、k8-32、k8-64、k8-64e、x64等,默认与编译时的平台一致.
建议仔细看看编译器手册中关于程序优化的部分,特别是IPA、PGA等部分,多加测试,选择适合自己程序的编译选项以提高性能.
本系统采用的是AMDOpteronBarcelonaCPU,需仔细选择,首先要保证结果的正确性.
4.
3.
4GNUFortran编译器重要编译选项GNUFortran编译器是Linux系统自带的Fortran编译器,系统安装的版本为4.
4.
6,支持大部分gcc选项,下面仅仅是列出一些针对4.
4.
6的gfortran本人认为常用的重要选项,建议仔细看GNUFortran和gcc的相关资料.
控制Fortran语言类型的选项:–-ffree-form和-ffixed-form:声明源文件是自由格式还是固定格式,默认从Fortran90起的源文件为自由格式,之前的Fortran77等的源文件为固定格式.
–-fdefault-double-8:设置DOUBLEPRECISION类型为8比特.
–-fdefault-integer-8:设置INTEGER和LOGICAL类型为8比特.
–-fdefault-real-8:设置REAL类型为8比特.
4串行及OPENMP程序编译28–-fno-backslash:将反斜线(\)当作正常字符(非转义符)处理.
–-ffixed-line-length-:设置固定格式源代码的行宽为n.
–-ffree-line-length-:设置自由格式源代码的行宽为n.
–-fmax-identifier-length=:设置名称的最大字符长度为n,Fortran95和200x的长度分别为31和65.
–-fimplicit-none:禁止变量的隐式声明,所有变量都需要显式声明.
–-fcray-pointer:支持Cray指针扩展.
–-fopenmp:编译OpenMP并行程序.
–-std=:指明Fortran标准,std可以为f95、f2003、legacy.
–-M和-J:指定编译时保存生成的模块文件目录.
–-fconvert=:指定对无格式Fortran数据文件表示方式,其值可以为:native,默认值;swap,在输入输出时从大端(big-endian)到小端(little-endian)交换比特,或者相反;big-endian,用大端方式读写;little-endian,用小端方式读写.
一般选项:–-c:仅编译成目标文件(.
o文件),并不进行链接.
–-ofile:指定生成的文件名.
–-v:详细模式,显示在每个命令执行前显示其命令行.
–-###:显示编译器、汇编器、链接器的调用信息但并不进行实际编译,在脚本中可以用于捕获驱动器生成的命令行.
––help:显示帮助信息.
––target-help:显示目标平台的帮助信息.
––version:显示编译器版本信息.
警告选项:–-fsyntax-only:仅仅检查代码的语法错误,并不进行其余操作.
–-w:编译时不显示任何警告,只显示错误.
–-Wfatal-errors:遇到第一个错误就停止,而不尝试继续运行.
调试选项:–-g:包含调试信息.
–-ggdb:包含利用gbd调试时所需要的信息.
4串行及OPENMP程序编译29优化选项:–-O[level]:设置优化级别.
优化级别level可以设置为0、1、2、3、s.
预处理选项:–-C:保留预处理的C源文件中的注释.
–-Dname:在预处理中定义宏name的值为1.
–-Dname=def:在预处理中定义name为def.
–-Uname:去除预处理中的任何name初始定义.
–-undef:不预定义系统或GCC声明的宏,但标准预定义的宏仍旧被定义.
–-dD:显示源文件中定义的宏及其值到标准输出.
–-dI:显示预处理中包含的所有文件,包括文件名和定义时的行号.
–-dM:显示预处理时源文件中定义的宏及值,含定义时文件名和行号.
–-dN:与-dD类似,但只显示源文件中定义的宏,而不显示宏值.
–-E:预处理各文件,将结果发给标准输出,不进行编译、汇编或链接.
–-I:指明头文件的搜索路径.
–-M:打印make的依赖关系到标准输出.
–-MD:打印make的依赖关系到文件file.
d,其中file是编译文件的根名字.
–-MM:打印make的依赖关系到标准输出,但忽略系统包含.
–-MMD:打印make的依赖关系到文件file.
d,其中file是编译的文件的根名字,但忽略系统头文件.
–-P:预处理每个文件,并保留每个file.
c文件预处理后的结果到file.
i.
链接选项:–-pie:在支持的目标上生成位置无关的可执行文件.
–-s:从可执行文件中去除所有符号表.
–-rdynamic:添加所有符号表到动态符号表中.
–-static:静态链接所需的库.
–-shared:生成共享目标而不是可执行文件,必须在编译每个目标文件时使用-fpic选项.
–-shared-libgcc:使用共享libgcc库.
–-static-libgcc:使用静态libgcc库.
–-u:确保符号symbol未定义,强制连接一个库模块来定义它.
4串行及OPENMP程序编译30–-I:指明头文件的搜索路径.
–-l:指明所需链接的库名,如库为libxyz.
a,则可用-lxyz指定.
–-L:指明库的搜索路径.
–-B:设置寻找可执行文件、库、头文件、数据文件等路径.
Intel386和AMDx86-64平台相关选项:–-mtune=cpu-type:设置优化针对的CPU类型,可为:generic、core2、k8、opteron等,core2为针对本系统至强XeonCPU的.
–-march=cpu-type:设置指令针对的CPU类型,CPU类型与上行中一样.
–-mieee-fp和-mno-ieee-fp:浮点操作是否严格按照IEEE标准.
约定成俗的选项:–-fno-automatic:将每个程序单元的本地变量和数组声明具有SAVE属性.
–-ff2c:与g77和f2c生成的代码兼容.
–-fno-underscoring:不在名字后添加_.
注意:gfortran默认行为与g77和f2c不兼容,为了兼容需要加-ff2c选项.
除非使用者了解与现有系统环境的集成,否则不建议使用-fno-underscoring选项.
–-funderscoring:对外部名字没有_的加_,以与一些Fortran编译器兼容.
–-fsecond-underscore:默认gfortran对外部名称添加一个_,如果使用此选项,那么将添加两个_.
此选项当使用-fno-underscoring选项时无效.
此选项当使用-ff2c时默认启用.
–-fpic:生成位置无关的代码以用于共享库.
–-fPIC:如果目标机器支持,将生成位置无关的代码.
–-fpie和-fPIE:与-fpic和-fPIC类似,但生成的位置无关代码只能链接到可执行文件中.
建议仔细看看编译器手册中关于程序优化的部分,多加测试,选择适合自己程序的编译选项以提高性能.
4.
3.
5Fortran程序编译举例IntelFortran编译器编译举例:–ifort-oyourprogyourprog.
for将Fortran77程序yourprog.
for编译为可执行文件yourprog.
4串行及OPENMP程序编译31–ifort-oyourprog-staticyourprog.
f90将Fortran90程序yourprog.
f90静态编译为可执行文件yourprog.
–ifort-oyourprog-omp-openmpyourprog.
f90将OpenMP指令并行的Fortran90程序yourprog-omp.
f90编译为可执行文件yourprog-omp.
PGIFortran编译器编译举例:–pgf77-oyourprogyourprog.
for将Fortran77程序yourprog.
for编译为可执行文件yourprog.
–pgf90-oyourprog-staticyourprog.
f90将Fortran90程序yourprog.
f90静态编译为可执行文件yourprog.
–pgf90-oyourprog-omp-mpyourprog.
f90将OpenMP指令并行的Fortran90程序yourprog-omp.
f90编译为可执行文件yourprog-omp.
GNUFortran编译器编译举例:–g77-oyourprogyourprog.
for将Fortran77程序yourprog.
for编译为可执行文件yourprog.
–gfortran-oyourprog-staticyourprog.
f90将Fortran90程序yourprog.
f90静态编译为可执行文件yourprog.
–gfortran-oyourprog-omp-fopenmpyourprog.
f90将OpenMP指令并行的Fortran90程序yourprog-omp.
f90编译为可执行文件yourprog-omp.
注意:g77不支持OpenMP,也不支持Fortran90标准.
4.
4OpenMP程序的编译与运行Intel、PGI、GNU编译器支持OpenMP并行,只需利用编译命令结合必要的OpenMP编译选项编译即可,对应此三种编译器的OpenMP选项分别为-openmp、-mp、-fopenmp.
Intel编译器:–icc-openmp-oyourprog-ompyourprog.
c将OpenMP的C程序yourprog-omp.
c编译为可执行文件yourprog-omp.
–ifort-openmp-oyourprog-ompyourprog.
f90将OpenMP的Fortran90程序yourprog-omp.
f90编译为可执行文件yourprog-omp.
4串行及OPENMP程序编译32PGI编译器:–pgcc-mp-oyourprog-ompyourprog.
c将OpenMP的C程序yourprog-omp.
c编译为可执行文件yourprog-omp.
–pgf90-mp-oyourprog-ompyourprog.
f90将OpenMP的Fortran90程序yourprog-omp.
f90编译为可执行文件yourprog-omp.
GNU编译器:–gcc-fopenmp-oyourprog-ompyourprog.
c将OpenMP的C程序yourprog-omp.
c编译为可执行文件yourprog-omp.
–gfortran-fopenmp-oyourprog-ompyourprog.
f90将OpenMP的Fortran90程序yourprog-omp.
f90编译为可执行文件yourprog-omp.
OpenMP的运行一般是通过在运行前设置环境变量OMP_NUM_THREADS来控制进程数,比如在bash中利用exportOMP_NUM_THREADS=12设置十二个进程运行.
注意,本系统为节点内共享内存节点间分布式内存的架构,因此只能在一个节点上的CPU之间运行OpenMP程序,在提交作业时需要使用相应选项以保证在同一个节点运行).
5MPI并行程序编译335MPI并行程序编译本系统的通信网络千兆以太网,系统默认设置使用的Intel12系列的编译器与OpenMPI的组合,其安装目录为/opt/openmpi-1.
4.
5,建议使用.
用户也可以运行mpi-selector-menu命令按照提示选择自己使用的MPI环境,注意数字后需要加u,设置完成后最好重新登录以便设置生效:Currentsystemdefault:openmpi-1.
4.
5_intel-12.
1.
3.
293Currentuserdefault:openmpi-1.
4.
5"u"and"s"modifierscanbeaddedtonumericand"U"commandstospecify"user"or"system-wide".
1.
openmpi-1.
4.
3_intel-11.
1.
0732.
openmpi-1.
4.
4_intel-12.
1.
3.
2933.
openmpi-1.
4.
5_intel-12.
1.
3.
2934.
openmpi-1.
4.
5_pgi-10.
6U.
UnsetdefaultQ.
QuitSelection(1-4[us],U[us],Q):上述选项的格式:MPI实现名-MPI实现版本_编译器名-编译器版本,以上述为例,如果想使用OpenMPI与PGI的配合,那么就输入4u.
5.
1MPI并行程序的编译OpenMPI的编译命令主要为:C程序:mpiccC++程序:mpic++、mpicxx、mpiCCFortran77程序:mpif77、mpif90Fortran90程序:mpif90对于并行程序,对应不同类型源文件的编译命令如下:mpicc-oyourprog-mpiyourprog-mpi.
c将C语言的MPI并行程序yourprog-mpi.
c编译为可执行文件yourprog-mpi.
5MPI并行程序编译34mpicxx-oyourprog-mpiyourprog-mpi.
cpp将C++语言的MPI并行程序yourprog-mpi.
cpp编译为可执行文件yourprog-mpi,也可换为mpic++或mpiCC.
mpif77-oyourprog-mpiyourprog-mpi.
f将Fortran77语言的MPI并行程序yourprog-mpi.
f编译为可执行文件yourprog-mpi.
mpif90-oyourprog-mpiyourprog-mpi.
f90将Fortran90语言的MPI并行程序yourprog-mpi.
f90编译为可执行文件yourprog-mpi.
MPI编译环境的编译命令实际上是调用Intel、PGI、GCC编译器进行编译,具体优化选项等,请参看OpenMPI以及Intel、PGI和GCC编译器手册.
5.
2MPI并行程序的运行在本系统上,MPI并行程序需结合作业调度系统TORQUE和Maui的作业提交命令qsub来调用作业脚本运行,请参看后面的作业调度系统介绍.
5.
3MPI并行程序调试并行程序调试比比较困难,并行程序的调试一般来说只能利用显示语句来逐步定位错误,建议利用尽量少的进程数来调试以方便进行追踪.
Intel编译器带有调试器:命令行的idbc和图形界面的idb,并且可以调试OpenMP和MPI并行程序,进入后运行help命令可以查看具体命令.
6数值函数库356数值函数库本系统上安装的数值函数库主要有IntelMathKernelLibrary(MKL),用户可以直接调用,以提高性能、加快开发.
6.
1IntelMKL当前安装的MKL版本为10.
2.
4.
073和10.
3.
9.
293,分别安装在/opt/intel/Compiler/11.
1/073/mkl和/opt/intel/composer_xe_2011_sp1.
9.
293.
11.
1.
073版本只安装有em64t(AMD64)版本(未安装针对i386的32位版本),对应的目录为MKL主目录下的lib/em64t子目录,10.
3.
9.
293版本的,具有em64t和i386版本(因为11.
1.
073版本的Intel编译器没有安装32位的,建议使用Intel编译器编译时不要使用i386版本,10.
3.
9.
293版本的编译器安装有em64t和i386版本,编译器版本和MKL版本最好别混用,以免出现错误).
以下将以10.
3.
9.
293针对em64t系统的版本为例介绍.
在bash下可以通过在/.
bashrc之类的环境变量设置文件中添加下面代码设置MKL所需的环境变量INCLUDE、LD_LIBRARY_PATH和MANPATH等:10.
3.
9.
293版本的编译器和MKL:§.
/opt/intel/composer_xe_2011_sp1.
9.
293/bin/compilervars.
shintel6410.
2.
4.
073版本:§.
/opt/intel/Compiler/11.
1/073/mkl/tools/environment/mklvarsem64t.
sh6.
1.
1MKL主要内容MKL主要包含如下内容:基本线性代数子系统库(BLAS)离散基本线性代数库(SparseBLAS)线性代数库(LAPACK)可扩展性线性代数库(ScaLAPACK)离散求解程序(SparseSolverroutines)向量数值库函数(VectorMathematicalLibraryfunctions)向量统计库函数(VectorStatisticalLibraryfunctions)6数值函数库36傅立叶变换程序(FourierTransformfunctions(FFT))集群版傅立叶变换程序(ClusterFFT)区间求解程序(IntervalSolverroutines)三角变换程序(TrigonometricTransformroutines)泊松、拉普拉斯和哈密顿求解程序(Poisson,Laplace,andHelMHzoltzSolverrou-tines)优化(信赖域)求解程序(Optimization(Trust-Region)Solverroutines)6.
1.
2MKL目录内容MKL的主要目录内容见表5.
6.
1.
3链接MKL为了在程序中链接MKL库中的libyyy.
a或libyyy.
so,可以采用两种方式:如以下环境变量已经设好:MKLROOT=/opt/intel/composer_xe_2011_sp1.
9.
293MKLPATH=$MKLROOT/lib/intel64MKLINCLUDE=$MKLROOT/include那么可以:在链接行中,列举含有相对或绝对路径的库名,比如:myprog.
o-L$MKLPATH-I$MKLINCLUDE-Wl,–start-group\$MKLPATH/libmkl_intel_lp64.
a$MKLPATH/libmkl_intel_thread.
a\$MKLPATH/libmkl_core.
a-Wl,–end-group-liomp5-lpthread其中,为链接命令,如ld,myprog.
o是用户的目标文件.
首先列举所需的MKL库,然后跟着系统库libpthread:在链接行中,利用-L列举含有相对或绝对路径的库名(指明搜索库的路径),和-I(指明搜索头文件的路径).
如果已经利用前面所说的compilervars.
sh设置好MKL环境变量,上面则可以简化为无需指定库所在的绝对路径,只需要利用-l指明所需要的库即可.
6数值函数库37表5:MKL目录内容目录内容MKL主目录,比如/opt/intel/composer_xe_2011_sp1.
9.
293/mkl/benchmarks/linpack包含OpenMP版的LINPACK的基准程序/benchmarks/mp_linpack包含MPI版的LINPACK的基准程序/docMKL文档目录/examples一些例子,建议用户参考学习/include含有INCLUDE文件/interfaces/blas95包含BLAS的Fortran90封装及用于编译成库的makefile/interfaces/LAPACK95包含LAPACK的Fortran90封装及用于编译成库的makefile/interfaces/fftw2xc包含2.
x版FFTW(C接口)封装及用于编译成库的makefile/interfaces/fftw2xf包含2.
x版FFTW(Fortran接口)封装及用于编译成库的makefile/interfaces/fftw3xc包含3.
x版FFTW(C接口)封装及用于编译成库的makefile/interfaces/fftw3xf包含3.
x版FFTW(Fortran接口)封装及用于编译成库的makefile/interfaces/fftw2x_cdft包含2.
x版MPIFFTW(集群FFT)封装及用于编译成库的makefile/lib/intel64较新系列版本MKL路径,包含EM64T架构的静态库和共享目标文件/lib/em64t较久系列版本MKL路径,包含EM64T架构的静态库和共享目标文件/man/man3MKL的man文档/tests一些测试文件/tools/builder包含用于生成定制动态可链接库的工具/tools/environment包含用于设置环境变量的shell脚本/tools/support包含使用IntelPremier支持时所需要的包ID和许可代码等信息6数值函数库38或者采用链接MKL库时指明库的路径和库名方式,如下:-L-I[-I/{ia32|intel64|{ilp64|lp64}}][-lmkl_blas{95|95_ilp64|95_lp64}][-lmkl_lapack{95|95_ilp64|95_lp64}][]-lmkl_{intel|intel_ilp64|intel_lp64|intel_sp2dp|gf|gf_ilp64|gf_lp64}-lmkl_{intel_thread|gnu_thread|pgi_thread|sequential}-lmkl_core-liomp5[-lpthread][-lm]注意:上面是动态链接的命令,如果想静态链接,需要将含有-l的库名用含有库文件的路径来代替,比如用$MKLPATH/libmkl_core.
a代替-lmkl_core,其中$MKLPATH为用户定义的指向MKL库目录的环境变量.
注:[]内的表示可选,|表示其中之一、{}表示含有.
7作业管理系统397作业管理系统本系统利用Platform公司的LSF进行资源和作业管理,所有需要运行的作业均必须通过作业提交命令bsub提交,提交后可利用相关命令查询作业状态等.
为了利用bsub提交作业,需要在bsub中指定各选项和需要执行的程序.
注意:不要在登录节点直接运行作业(编译等日常操作除外),以免影响其余用户的正常使用如果不通过作业调度系统直接在计算节点上运行将会被监护进程直接杀掉7.
1查看队列情况:bqueues利用bqueues可以查看现有队列信息,例如:bqueuesQUEUE_NAMEPRIOSTATUSMAXJL/UJL/PJL/HNJOBSPENDRUNSUSPQUEUE_NAMEPRIOSTATUSMAXJL/UJL/PJL/HNJOBSPENDRUNSUSPmem6459Open:Active-32--160160mem9658Open:Active-48--240240mem4855Open:Active-120--0000serial50Open:Active-24--250250fat4843Open:Active-264--760760fat6443Open:Active-128--340320200long40Open:Active-840--2881929608cpu36Open:Active-88--0000normal30Open:Active-840--231615008160其中,主要列的含义为:QUEUE_NAME:队列名PRIO:优先级,数字越大优先级越高STATUS:状态.
Open:Active表示已激活,可使用;Closed:Active表示已关闭,不可使用MAX:队列对应的最大CPU核数,-表示无限,以下类似JL/U:单个用户同时可以的CPU核数NJOBS:排队、运行和被挂起的总作业所占CPU核数7作业管理系统40PEND:排队中的作业所需CPU核数RUN:运行中的作业所占CPU核数SUSP:被挂起的作业所占CPU核数其中:fat48、fat64、mem48、mem64、mem96队列对应大共享内存服务器,数量有限,仅供真正有需求的用户使用,需要单独申请才可以使用.
7.
2提交作业:bsub用户需要利用bsub提交作业,其基本格式为bsub[options]command[arguments].
其中options设置队列、CPU核数等的选项,必需在command之前,否则将作为command的参数;arguments为设置作业的可执行程序本身所需要的参数,必须在command之后,否则将作为设置队列等的选项.
下面将给出常用的几种提交方式.
7.
2.
1提交到特定队列:bsub-q利用-q选项可以指定提交到哪个队列,作业队列会针对运行情况进行修改,请注意参看登录后的提示或运行bqueues-l命令查看,现有的队列为:normal:所需要的CPU核数不超过12个时,作业将在node1-node70上运行,此为默认队列.
long:所需要的CPU核数超过12个时,作业将在node1-node70上运行.
serial:所需要的CPU核数为一个时,作业将在node88上运行.
fat48:提交到此队列上的作业可运行于node81-node83,node86-node87节点上,大共享内存服务器,需要特殊申请使用权限.
fat64:提交到此队列上的作业可运行于node84,node85节点上,大共享内存服务器,需要特殊申请使用权限.
比如想提交到serial队列运行串行程序executable1,可以:bsub-qserialexecutable1或bsubexecutable1如果提交成功,将显示类似下面的输出:Jobissubmittedtodefaultqueue.
其中79722为此作业的作业号,以后可利用此作业号来进行查询及终止等操作.
Virmach对资源限制比较严格,建议查看TOS,自己做好限制,优点是稳定。 vCPU 内存 空间 流量 带宽 IPv4 价格 购买 1 512MB 15GB SSD 500GB 1Gbps 1 $7/VirMach:$7/年/512MB内存/15GB SSD空间/500GB流量/1Gbps端口/KVM/洛杉矶/西雅图/芝加哥/纽约等 发布于 5个月前 (01-05) VirMach,美国老牌、稳...
vollcloud怎么样?vollcloud LLC创立于2020年,是一家以互联网基础业务服务为主的 技术型企业,运营全球数据中心业务。VoLLcloud LLC针对新老用户推出全场年付产品7折促销优惠,共30个,机会难得,所有产品支持3日内无条件退款,同时提供产品免费体验。目前所有产品中,“镇店之宝”产品性价比高,适用大部分用户基础应用,卖的也是最好,同时,在这里感谢新老用户的支持和信任,我们...
之前分享过很多次CloudCone的信息,主要是VPS主机,其实商家也提供独立服务器租用,同样在洛杉矶MC机房,分为两种线路:普通优化线路及CN2 GIA,今天来分享下商家的CN2 GIA线路独立服务器产品,提供15-100Mbps带宽,不限制流量,可购买额外的DDoS高防IP,最低每月82美元起,支持使用PayPal或者支付宝等付款方式。下面分享几款洛杉矶CN2 GIA线路独立服务器配置信息。配...