본문 바로가기
HPC/Software,OpenSource

[Linux] configure 옵션(Intel 컴파일러와 GCC 컴파일러)

by Yoon_estar 2025. 1. 28.
728x90

개요

소프트웨어 성능 최적화와 빌드 과정에서 자주 사용되는 configure 옵션을 정리하고, Intel 컴파일러와 GCC 컴파일러를 사용하는 환경에서의 차이점을 살펴보겠습니다. 이 글에서는 다양한 configure 옵션을 설명하고, Intel 컴파일러(2022 및 2023 버전)의 주요 차이점과 GCC 컴파일러 환경에서의 빌드 명령 예제를 포함합니다.

 

1. configure 옵션 이해하기

configure 명령어는 소프트웨어를 설치하기 전에 환경과 빌드 설정을 준비하는 스크립트입니다. 아래는 자주 사용되는 configure 옵션과 그 역할입니다.

기본 옵션

  • --prefix=<path> : 설치 경로를 지정
    • 예 : --prefix=/APP/enhpc/libs/fftw-3.3.10-ompi4-gcc8
  • --enable-shared : 공유 라이브러리를 생성
    • 동적으로 로드 가능한 .so 파일을 생성
  • --enable-static : 정적 라이브러리를 생성
    • 독립 실행 가능한 .a 파일을 생성
  • --disable-static : 정적 라이브러리를 비활성화

컴파일러 설정 옵션

  • CC=<compiler> : C 컴파일러 지정
    • 예 : gcc, icc, icx, mpicc
  • CXX=<compiler> : C++ 컴파일러 지정
    • 예 : g++, icpc, icx
  • FC=<compiler>
    • 예 : gfortran, ifort, ifx

병렬 처리 및 멀티 코어 옵션

  • --enable-mpi : MPI(Message Passing Interface) 지원을 활성화
  • --enable-mpi-fortran : Fortran에서 MPI 사용 활성화
  • --enable-mpi-cxx : C++에서 MPI 사용 활성화
  • --enable-mpi-threads : MPI 병렬 처리에서 스레드 지원 활성화
  • --with-threads : 멀티 스레드 지원을 활성화

플랫폼 및 최적화 옵션

  • --host=<platform> : 타겟 플랫폼을 지정
    • 예 : x86_64, aarch64
  • --build=<platform> : 빌드 플랫폼을 지정
  • --with-slurm : slurm 워크로드 매니저와 통합
  • --enable-avx, --enable-avx2, --enable-avx512 : AVX(Advanced Vector Extensions) 명령어를 활성화
  • --enable-openmp : OpenMP 멀티스레드 병렬처리 지원 활성화

2. Intel 컴파일러와 GCC 컴파일러 예제

Intel 컴파일러 환경에서의 configure 예제

# ./configure --prefix=/APP/enhpc/libs/fftw-3.3.10-intel2023 \
CC=/APP/enhpc/mpi/openmpi-4.1.5-intel/bin/mpicc \
LDFLAGS=-L/APP/enhpc/mpi/openmpi-4.1.5-intel/lib \
CPPFLAGS=-I/APP/enhpc/mpi/openmpi-4.1.5-intel/include \
F77=/APP/enhpc/mpi/openmpi-4.1.5-intel/bin/mpif77 \
FC=/APP/enhpc/mpi/openmpi-4.1.5-intel/bin/mpif90 \
--enable-fortran --enable-shared --enable-mpi \
--enable-long-double --enable-avx --enable-avx2 --enable-avx512

 

  • 주요 옵션
    • CC : C 컴파일러로 OpenMPI의 mpicc를 사용
    • --enable-mpi : MPI 병렬 처리 활성화
    • --enable-long-double : 장정밀도 부동소수점 연산 활성화
    • --enable-shared : 공유 라이브러리 생성
    • --enable-avx, --enable-avx2, --enable-avx512 
      • AVX(Advanced Vector Extensions)는 고성능 벡터 연산을 위한 명령어 집합입니다.
      • AVX : 256비트 벡터 연산 활성화, 부동 소수점 계산 속도 향상
      • AVX2 : 256비트 정수 연산과 더 향상된 부동소수점 연산
      • AVX512 : 512비트 벡터 연산 활성화, 최신 Intel 프로세서에서 고성능 병렬 처리를 지원

GCC 컴파일러 환경에서의 configure 예제

# export FC=gfortran
# export CC=gcc
# export CXX=g++
# ./configure --prefix=/APP/enhpc/mpi/openmpi4-gcc11 \
--enable-mpi-fortran \
--enable-mpi-cxx \
--enable-shared \
--enable-mpi-threads \
--with-slurm
# make && make install

 

  • 주요옵션
    • FC, CC, CXX 각각 Fortran, C, C++ 컴파일러를 GCC 계열로 지정
    • --enable-mpi-fortran : Fortran에서 MPI 지원 활성화
    • --with-slurm : Slurm 환경과 통합
    • --enable-mpi-threads : MPI 스레드 지원 활성화

 

3. Intel 컴파일러 2022 vs 2023 비교

컴파일러 아키텍처 

  • 2022 버전 
    • Intel Classic Compiler(ICC/IFORT) 기본 제공
    • 초기 LLVM 기반 컴파일러 (ICX/IFX) 도입
  • 2023 버전
    • LLVM 기반 컴파일러(ICX/IFX)가 기본 컴파일러로 자리잡음
    • 최신 아키텍처(Sapphire Rapids) 및 AMX 지원

지원 표준

  • 2022 버전
    • C++17, Fortran 2018 표준 일부 지원
  • 2023 버전
    • C++20 완전 지원
    • Fortran 2018 완전 지원 및 일부 Fortran 202X 기능 실험적 지원
  • 성능 및 최적화
    • 2022 버전
      • 기본적인 병렬 처리와 벡터 연산 최적화
      • AVX-512 명령어 지원
    • 2023 버전
      • 최신 Intel 아키텍처 최적화
      • OpenMP 5.2 및 SYCL 지원 강화

4. 빌드 및 최적화 팁

성능 최적화를 위한 일반적인 플래그

  • -O3 : 가장 높은 수준의 최적화
  • -march=native : 현재 CPU에 맞는 최적화 코드 생성
  • -fopenmp : OpenMP 활성화
  • -funroll-loops : 루프 언롤링을 활성화하여 반복문 성능 개선
  • -flto : 링크 타임 최적화

Intel Compiler를 사용할 때

Intel Compiler를 사용할 때, icc, icpc, ifort와 같은 컴파일러 명령을 통해 최적화 옵션을 지정할 수 있습니다. 위의 명령어를 Intel Compiler에 맞게 변환하려면 다음과 같은 주요 옵션과 변경 사항을 참고하세요.

 

Intel Compiler 기본 옵션 변환

  • CC : icc (Intel C Compiler)
  • CXX : icpc (Intel C++ Compiler C++ 코드 사용시)
  • F77, FC : ifort (Intel Fortran Compiler)

Intel Compiler 최적화 관련 주요 옵션

옵션 설명
-O3 최고 수준의 최적화, 벡터화, 루프 변환, 인라인 등을 적극 활용
-xHost 현재 CPU 아키텍처에 최적화된 코드를 생성
-ax  특정 아키텍처 집합에 최적화된 코드를 추가 생성 (예 : axAVX, AVX2, AVX512)
-march 목표 CPU 아키텍처 지정 (예 : -march=core-avx2)
-mtune 목표 CPU에서 최적 성능을 위해 코드를 튜닝
-ipo 전체 프로그램 최적화(Interprocedural Optimization)
-qopenmp OpenMP를 활성화
-fp-model 부동 소수점 연산의 정확도와 성능 간 트레이드오프 설정 (예 : -fp-model fast)
-mkl Intel MKL(Math Kernel Library) 활성

 

AVX 관련 옵션

Intel Compiler는 -x-ax 플래그로 AVX를 활용할 수 있습니다. 위 명령어에서 --enable-avx 등이 활성화된 경우 다음과 같은 옵션을 추가합니다

  • -xAVX: AVX 명령어 최적화.
  • -xAVX2: AVX2 명령어 최적화.
  • -xCORE-AVX512: AVX512 명령어 최적화.

예시

CFLAGS="-O3 -xHost -qopenmp -fp-model precise"
FFLAGS="-O3 -xAVX512 -ipo"

 

 

OpenMPI와 Intel Compiler 연동

Intel Compiler 기반의 OpenMPI를 사용하려면 mpicc, mpif90 등도 Intel 컴파일러를 사용해 빌드되어야 합니다

# ./configure --prefix=/APP/enhpc/libs/fftw-3.3.10-ompi4 \
CC=/APP/enhpc/mpi/openmpi4-intel/bin/mpicc \
CFLAGS="-O3 -xHost -qopenmp -fp-model fast" \
LDFLAGS=-L/APP/enhpc/mpi/openmpi4-intel/lib \
CPPFLAGS=-I/APP/enhpc/mpi/openmpi4-intel/include \
F77=/APP/enhpc/mpi/openmpi4-intel/bin/mpif77 \
FC=/APP/enhpc/mpi/openmpi4-intel/bin/mpif90 \
FFLAGS="-O3 -xAVX512 -ipo" \
--enable-fortran --enable-shared --enable-mpi