当前位置:首页>Linux>[Linux-超算]初识编译器

[Linux-超算]初识编译器

  • 2026-10-09 22:53:26
[Linux-超算]初识编译器
前言
我刚开始超算i安装软件的时候就会被各种编译器或者说缺少什么库,而头脑安装失败。比如说,研0的时候配置一个conda环境就得用一天的时间。
今天,我好好的查一下这些编译器/环境的资料。
一、先通过超算的介绍文档入手(比如)

 集群模块环境简要概括

你的超算环境非常丰富,模块主要分为三大类:

  • 应用软件(Apps):涵盖材料、化学、气象、流体力学等领域,如 LAMMPS、GROMACS、CP2K、QE(Quantum ESPRESSO)、WRF、OpenFOAM 等,版本众多。

  • 基础编译器与 MPI(Base):

    • 传统 Intel 编译器:提供 intel/2017、intel/2020、intel/2021.3.0 等(对应命令通常是 icc/ifort)。

    • 其他编译器:GCC(9.3.0、11.4.0 等)、PGI、NVHPC。

    • MPI 库:IntelMPI、HPCX、OpenMPI、MPICH 齐全。

    • 数学库:FFTW、HDF5、NetCDF、BLAS、LAPACK 等非常完善。

  • 用户自定义模块:/work/home/ln2026/apprepo/modules 下只有你自己(或你组内)放的 lammps-22Jul2025-oneapi2024.0.1。

module加载编译器

常用的三款编译器GCC、INTEL、PGI均可通过module加载实现。

在高性能计算(HPC)和软件开发领域,GCC、Intel 编译器和PGI 编译器是最著名的三套编译器家族。它们各具特色,适用于不同的硬件架构与应用场景。


一、 三者核心定位对比

维度
GCC (GNU Compiler Collection)
Intel 编译器 (oneAPI / Classic)
PGI 编译器 (已并入 NVIDIA HPC SDK)
开发者/组织
GNU 开源社区
Intel 公司
The Portland Group(现 NVIDIA)
开源属性
完全开源、免费(GPL/LGPL)
商业软件(已提供免费 oneAPI 版本)
商业软件(现作为 NVIDIA HPC SDK 免费提供)
核心优势
跨平台兼容性极佳、生态最广、通用性强
x86/Intel CPU 极限性能优化(AVX-512、MKL)
GPU 异构并行计算、OpenACC 支持强
C/C++ 命令
gcc
 / g++
icc
 / icpc (经典) 或 icx / icpx (oneAPI)
pgcc
 / pgc++ 或 nvc / nvc++
Fortran 命令
gfortranifort
 (经典) 或 ifx (oneAPI)
pgf90
 / pgfortran 或 nvfortran

GCC的开发者自由软件之“父”——Richard. M. Stallman

二、 共同点(相同之处)

  1. 基本功能与语言支持完整:
  • 三者均支持主流的科学计算和系统编程语言:C、C++ 以及 Fortran(77/90/95/2003/2008 等)。
  • 都能编译生成 Linux/Unix 环境下的 ELF 可执行文件和静态/动态库。
  1. 支持并行编程规范:
  • 均完整支持 OpenMP(多线程共享内存并行)。
  • 都能与主流的 MPI 库(如 OpenMPI、MPICH、Intel MPI)完美结合,用于大规模集群并行计算。
  1. 标准构建流程一致:
  • 在使用 CMake、Make 或 Autotools 构建项目时,三者都遵循一套统一的环境变量命名规范(如通过指定 CC、CXX、FC 环境变量来切换不同编译器)。

三、 不同点(差异与优势)

  • GCC:通用性第一。可以在 x86、ARM、MIPS、PowerPC 等几乎所有 CPU 架构上运行并生成代码。虽然优化不如 Intel/NVIDIA 深入,但代码的通用性和可移植性最好。

  • Intel 编译器:针对 Intel 处理器(x86_64) 做了极致的深度优化。其内置的自动矢量化(Auto-vectorization)、AVX-512 指令集支持以及与 Intel MKL 数学库的集成,能使代码在 Intel CPU 上跑出顶尖性能。

  • PGI (NVIDIA) 编译器:针对 NVIDIA GPU 显卡 以及异构计算进行深度优化。它是最早且最完整支持 OpenACC(通过指令自动将 CPU 循环下刷到 GPU 加速)的编译器之一。

  • GCC:开源自由软件,是 Linux 操作系统的标准编译器。

  • Intel 编译器:早期为高价商业许可,近几年转型推出了 Intel oneAPI,允许开发者免费下载和使用包含底层 LLVM 架构的新一代编译器(icx/ifx)。

  • PGI 编译器:被 NVIDIA 收购后,传统的 PGI(pgcc/pgf90)已被逐步重构并整合进 NVIDIA HPC SDK(命令转为 nvc/nvfortran),旨在服务于 GPU 算力集群。

  • GCC:对语言标准的语法审查相对宽松,报错信息丰富且社区解决方案极多。许多老旧源码(甚至语法不太规范的代码)用 GCC 往往最容易成功编译。

  • Intel / PGI 编译器:对语法和 Fortran/C++ 标准的要求更为严苛。很多在 GCC 下能“蒙混过关”的非法指针操作或未定义行为,在 Intel 或 PGI 编译器下可能会直接报编译错误。


----------------上述是Ai的解读------------

一、 什么是 Intel oneAPI?

oneAPI 是 Intel 推出的异构计算架构统一标准,也是一套完整的开发者工具包套件(Toolkit)。过去,针对 CPU 编程用 C/C++/Fortran,针对 GPU 用 CUDA,针对 FPGA 用 OpenCL,这导致代码很难跨硬件移植。Intel 推出 oneAPI 就是为了消除这种隔阂,实现“一套代码,跑在 CPU、GPU、FPGA 等不同硬件上”。

它不是单款软件,而是一个“大礼包”,里面包含:

  • 全新编译器组件:

  • icx / icpx:基于 LLVM 打造的下一代 Intel C/C++ 编译器(替代老旧的 icc)。

  • ifx:基于 LLVM 的下一代 Intel Fortran 编译器(替代老旧的 ifort)。

  • 支持 SYCL / DPC++ 语言(一种允许用标准 C++ 编写跨平台 GPU/CPU 代码的语言)。

  • 顶级数学与并行库:

  • oneMKL(即经典的 Intel MKL 数学库,提供极速的矩阵/FFT等计算)。

  • oneTBB(多线程构建块库)。

  • Intel MPI(分布式集群通讯库)。

  • 性能分析工具:

  • Intel VTune Profiler(极强悍的代码瓶颈与性能调优诊断工具)。

  • 它是开源的吗?
    部分开源,部分闭源。 oneAPI 的标准规范是公开且开源的,其底层编译器的驱动/部分库(如 SYCL 运行时)也是开源的;但 Intel 自身优化过的许多核心库和可执行程序(如 MKL 的核心优化算法、VTune)依旧是专有/闭源软件。

  • 免费模式:
    过去 Intel 的并行开发套件(Parallel Studio XE)售价高达上千美元,而现在的 Intel oneAPI Base / HPC Toolkit 已经完全免费提供给所有人下载使用(不限商业或个人用途),仅在用户需要“官方一对一企业技术支持”时才收费。


二、 什么是 NVIDIA HPC SDK?

NVIDIA HPC SDK 是 NVIDIA 推出的高性能计算软件开发工具包(Software Development Kit)。在前面提到过PGI 编译器(pgcc/pgf90),PGI 商业公司在被 NVIDIA 收购后,NVIDIA 将 PGI 编译器的技术彻底重构并整合,推出了这个全新的工具包。原 PGI 的核心命令也升级为 nvc / nvc++ / nvfortran。

它同样是一个面向 HPC(超算/科学计算)的大套件,专门为了发挥 CPU + NVIDIA GPU 联合加速而设计:

  • 核心编译器组件:

  • nvfortran:前身是 pgf90,业界极少数能将标准 Fortran 语言和 OpenACC 指令直接编译运行在 NVIDIA GPU 上的超级 Fortran 编译器。

  • **nvc++ / nvc**:支持标准 C/C++(含 C++17 Parallel Algorithms 自动 GPU Offload)以及 OpenACC/OpenMP 指令。

  • nvcc:NVIDIA 原生的 CUDA C++ 编译器。

  • GPU 核心加速库:

  • cuBLAS / cuSOLVER / cuFFT / cuSPARSE 等线性代数与数学库。

  • NCCL / NVSHMEM(用于多卡/超算集群间高带宽互连通信的库)。

  • 分析调试工具:

  • Nsight Systems / Nsight Compute(NVIDIA 官方的 GPU 性能剖析工具)。

  • 它是开源的吗?
    否,它绝大部分是闭源商业软件。 虽然它包含了 Open MPI 等部分开源组件,但 NVIDIA 的编译器核心和底层 GPU 算法库均属于 NVIDIA 专有闭源技术。

  • 免费模式:
    NVIDIA HPC SDK 现在免费向社区开发者开放下载(可在官网、Docker/Singularity 容器中自由部署使用),NVIDIA 仅针对“企业级编译器高级技术支持服务(Compiler Support Services)”收取许可订阅费用。


三、 总结对比表

对比维度
GCC
Intel oneAPI
NVIDIA HPC SDK
形态分类
单款/开源编译器套件
全栈式异构开发 SDK
全栈式 HPC/GPU 加速 SDK
开源属性
完全开源 (GPL/LGPL)
规范/部分组件开源 (结合闭源库)
大部分闭源 (专有商业软件)
费用
免费
免费(企业技术支持需付费)
免费(企业技术支持需付费)
核心编译器
gcc
, g++, gfortran
icx
, icpx, ifx
nvc
, nvc++, nvfortran (原PGI), nvcc
最强适用场景
通用 Linux/Unix 软件构建
Intel CPU 极致性能调优 & Intel 异构加速
NVIDIA GPU 科学计算/超算、OpenACC 移植

结论:如果把GCC比作一把纯手工制成的开源“军刀”;那么Intel oneAPI和NVIDIA HPC SDK就是各自硬件巨头为开发者打造的“军火重装备箱”(里面装满了编译器、数学库、通信库和性能分析仪表盘),且两个装备箱目前均可以免费获取使用。

那么,什么又是cmake,make,makefile呢?

GCC、CMake、CMakelist、Make、Makefile、Ninja啥关系?一图讲透!

Q:什么是源文件,头文件和可执行文件?
《C语言教程》006|认识源文件、头文件与可执行文件

程序源文件(Source File)是程序员使用编程语言(如C、C++、Java、Python等)编写的、包含程序原始代码的文本文件。它是程序最原始的形态,经过编译、链接等过程后,才能生成计算机可直接执行的可运行文件(如.exe文件)。

以c++的编译为例, .cpp .o ./hello

关于 .c / cpp 文件编译的过程

一份代码的编译过程有四个阶段:预处理、编译、汇编、链接。

【看到这里,我的理解就是从你写的人能看懂的程序代码.c/.cpp的经过gcc的编译make然后变成绿色的可以直接./运行的可执行程序】

【首先,有三款编译软件,基本上我们用到的是GNU的gcc去编译一些源文件,我们一行一行的写太慢了,就用到了make命令,这个make命令会找Makefile文件去编译这些文件,但工程量大了之后makefile文件比较难写,且与当前系统环境配置强相关,所有通过cmake来解决,cmake基于cmakelist.txt来生成makefile然后在make -j就好了】

CMakeLists.txt 文件怎么写?

# 1. 指定 CMake 的最低版本要求(建议设置)cmake_minimum_required(VERSION 3.10)# 2. 定义项目名称、版本号和使用的语言project(MyProject VERSION 1.0 LANGUAGES CXX)# 3. 指定 C++ 标准(例如 C++17)set(CMAKE_CXX_STANDARD 17)set(CMAKE_CXX_STANDARD_REQUIRED ON)# 4. 指定生成的可执行文件名称,以及对应的源码文件# 格式:add_executable(可执行文件名 源码文件1 源码文件2 ...)add_executable(my_program main.cpp)

cmake编译:

mkdir build && cd build   # 建议使用边外编译(Out-of-source Build),保持源码目录整洁cmake ..                  # 生成 Makefile(CMake 会自动寻找系统中的 GCC)make                      # 调用 GNU Make 进行编译./my_program              # 运行生成的二进制文件

参考资料:

知乎:5分钟理解make/makefile/cmake/nmake

https://zhuanlan.zhihu.com/p/111110992

【Makefile 20分钟入门,简简单单,展示如何使用Makefile管理和编译C++代码】 

https://www.bilibili.com/video/BV188411L7d2/?share_source=copy_web&vd_source=04215abb9b54bfd46dad12de6403ffbd

【CMake 6分钟入门,不用再写复杂的Makefile】

https://www.bilibili.com/video/BV1bg411p7oS/?share_source=copy_web&vd_source=04215abb9b54bfd46dad12de6403ffbd

写这么多,收获:

①各个模块module之间的加载关系

②使用cmake或者make装软件的底层关系

③GNU/GCC/cmake/make等一些文件的概念关系。

今天安装lammps后的疑问,下一期更新用cmake安装lammps软件。

喜欢的话,给个关注吧

最新文章

随机文章