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 지원 강화
- 2022 버전
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
'HPC > Software,OpenSource' 카테고리의 다른 글
[Linux] ANSYS 소프트웨어 설치 (0) | 2024.11.18 |
---|---|
[HPC]MPI compiler 연동 (0) | 2024.04.26 |
[HPC]One API(2023,2024) 수동 설치 (0) | 2024.04.25 |
[HPC]atomsk(강력한 원자 구조 생성 및 변환 도구) (0) | 2024.04.25 |
[HPC]GNU(gcc-11.4.0 , gcc-13.2.0) 수동 설치 (0) | 2024.04.24 |