串行及OpenMP程序编译及运行

在本超算系统上可运行C/C++、Fortran的串行程序,以及与OpenMP和MPI结合的并行程序。编译程序时,用户只需在登录节点(login01、login02)上以相应的编译命令和选项进行编译即可(用户不应到其余节点上进行编译,以免影响系统效率。其它节点一般只设置了运行作业所需要的库路径等,未必设置了编译环境)。当前安装的编译环境主要为:

  • C/C++、Fortran编译器:Intel、PGI [ 1 ] 和GNU编译器,支持OpenMP并行。

  • MPI并行环境:HPC-X、Open MPI和Intel MPI并行环境。

  • 安装目录为 /opt 等,系统设置采用module进行管理(参见 [module] ),用户可以采用下述方式之一等需设置自己所需的编译环境运行,如:

  • module load intel/2020

  • 在中设置(设置完成后需要 source ~/.bashrc 或重新登录以便设置生效):

  • . /opt/intel/2020/bin/compilervars.sh intel64
    

    注意:在中设置的级别有可能要高于使用module load设置的,可以运行icc -vwhich icc等命令查看实际使用的编译环境。

    建议采用对一般程序来说性能较好的Intel编译器,用户也可以选择适合自己程序的编译器,以取得更好的性能。

    本部分主要介绍串行C/C++ Fortran源程序和OpenMP并行程序的编译,MPI并行程序的编译将在后面介绍。

    串行C/C++程序的编译

    C/C++输入输出文件后缀与类型的关系

    编译器默认将按照输入文件的后缀判断文件类型,见下表。

    输入文件后缀与类型的关系

    filename.c filename.C filename.CC

    传给编译器

    filename.cc filename.cpp filename.cxx

    C++源文件

    传给编译器

    filename.a filename.so

    静态链接库文件 动态链接库文件

    传递给链接器

    filename.i

    已预处理的文件

    传递给标准输出

    filename.o

    传递给链接器

    filename.s

    传递给汇编器

  • 将Fortran 77程序yourprog.for编译为可执行文件yourprog:

  • gcc 4.x系列:gfortran -o yourprog yourprog.for

  • gcc 3.x系列:g77 -o yourprog yourprog.for

  • 将Fortran 90程序yourprog.f90编译为可执行文件yourprog:
    gfortran -o yourprog yourprog.f90
    将Fortran程序yourprog.f90编译为对象文件yourprog.o而不是可执行文件:
    gfortran -c yourprog.f90
    将Fortran程序yourprog.f90编译为汇编文件yourprog.s而不是可执行文件:
    gfortran -S yourprog.f90
    生成带有调试信息的可执行文件以用于调试:
    gfortran -g yourprog.f90 -o yourprog
    指定头文件路径编译:
    gfortran -I/alt/include -o yourprog yourprog.f90
    指定库文件路径及库名编译:
    gfortran -L/alt/lib -lxyz -o yourprog yourprog.f90

    OpenMP程序的编译

    Intel、PGI和GNU编译器都支持OpenMP并行,只需利用相关编译命令结合必要的OpenMP编译选项编译即可。对应此三种编译器的OpenMP编译选项:

  • Intel编译器:-qopenmp(2015及之后版)

  • PGI编译器:-mp

  • GNU编译器:-fopenmp

  • 采用这三种编译器的OpenMP源程序编译例子如下:

  • Intel编译器:

    将C程序yourprog-omp.c编译为可执行文件yourprog-omp:
    icc -qopenmp -o yourprog-omp yourprog.c
    将Fortran 90程序yourprog-omp.f90编译为可执行文件yourprog-omp:
    ifort -qopenmp -o yourprog-omp yourprog.f90

    OpenMP程序的运行

    OpenMP程序的运行一般是通过在运行前设置环境变量OMP_NUM_THREADS来控制线程数,比如在BASH中利用export OMP_NUM_THREADS=40设置使用40个线程运行。

    注意,本系统为节点内共享内存节点间分布式内存的架构,因此只能在一个节点上的CPU之间运行同一个OpenMP程序作业,在提交作业时需要使用相应选项以保证在同一个节点运行。

    [1]

    目前尚未配置,等以后配置上

  •