GCC
Nesta seção:
Descrição
GCC (GNU Compiler Collection) é um conjunto de compiladores para linguagens de programação como C, C++, Fortran, Ada, e outras. É software livre e amplamente utilizado em sistemas Unix-like.
Versões Disponíveis
gcc/5.3.0
gcc/7.2.0 (default)
gcc/9.3.0
gcc/10.2.0
gcc/11.5.0
gcc/13.2.0
gcc/14.3.0
gcc/15.1.0
Carregando Módulos
# Carregar versão específica
module load gcc/10.2.0
# Verificar versão
gcc --version
# Compiladores disponíveis
which gcc # Compilador C
which g++ # Compilador C++
which gfortran # Compilador Fortran
Compilação Básica
C
#!/bin/bash
#SBATCH -J compile_c
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 00:10:00
#SBATCH --mem=2G
export INPUT="programa.c"
export OUTPUT="programa"
module load gcc/10.2.0
job-nanny gcc -O3 -march=native -o programa programa.c
C++
#!/bin/bash
#SBATCH -J compile_cpp
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 00:10:00
#SBATCH --mem=2G
export INPUT="programa.cpp"
export OUTPUT="programa"
module load gcc/10.2.0
job-nanny g++ -O3 -march=native -std=c++11 -o programa programa.cpp
Fortran
#!/bin/bash
#SBATCH -J compile_fortran
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 00:10:00
#SBATCH --mem=2G
export INPUT="programa.f90"
export OUTPUT="programa"
module load gcc/10.2.0
job-nanny gfortran -O3 -march=native -o programa programa.f90
Compilação com OpenMP
#!/bin/bash
#SBATCH -J compile_omp
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 00:10:00
#SBATCH --mem=2G
export INPUT="programa_omp.c"
export OUTPUT="programa_omp"
module load gcc/10.2.0
job-nanny gcc -fopenmp -O3 -march=native -o programa_omp programa_omp.c
Compilação com MPI
#!/bin/bash
#SBATCH -J compile_mpi
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 00:10:00
#SBATCH --mem=2G
export INPUT="programa_mpi.c"
export OUTPUT="programa_mpi"
module load gcc/10.2.0
module load openmpi/4.1.5
job-nanny mpicc -O3 -march=native -o programa_mpi programa_mpi.c
Compilação com Bibliotecas Externas
#!/bin/bash
#SBATCH -J compile_libs
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 00:20:00
#SBATCH --mem=4G
export INPUT="programa.c"
export OUTPUT="programa"
module load gcc/10.2.0
module load gsl/2.6
module load boost/1.70.0
job-nanny gcc -O3 -march=native -o programa programa.c \
-lgsl -lgslcblas -lm -I$BOOST_ROOT/include -L$GSL_LIB
Flags de Otimização Comuns
Flag |
Descrição |
|---|---|
|
Sem otimização (padrão) |
|
Otimização básica |
|
Otimização recomendada (bom equilíbrio) |
|
Otimização agressiva (máxima velocidade) |
|
Otimização para tamanho |
|
Otimiza para a arquitetura atual |
|
Ajusta para a arquitetura atual |
|
Desenrola loops (pode aumentar velocidade) |
|
Otimizações matemáticas agressivas |
Job para Compilar e Executar
#!/bin/bash
#SBATCH -J compile_run
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 01:00:00
#SBATCH --mem=4G
export INPUT="simulacao.c dados.dat"
export OUTPUT="resultado.dat"
module load gcc/10.2.0
# Compilar
job-nanny gcc -O3 -march=native -o simulacao simulacao.c -lm
# Executar
./simulacao < dados.dat > resultado.dat
Job Array para Testar Diferentes Flags
#!/bin/bash
#SBATCH -J test_flags
#SBATCH --array=1-6
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 00:30:00
#SBATCH --mem=4G
FLAGS=("-O0" "-O1" "-O2" "-O3" "-Os" "-O2 -march=native")
FLAG=${FLAGS[$SLURM_ARRAY_TASK_ID-1]}
export INPUT="benchmark.c"
export OUTPUT="benchmark_flag_${SLURM_ARRAY_TASK_ID}/"
module load gcc/10.2.0
mkdir -p benchmark_flag_${SLURM_ARRAY_TASK_ID}
cd benchmark_flag_${SLURM_ARRAY_TASK_ID}
# Compilar com flag específica
job-nanny gcc $FLAG -o benchmark ../benchmark.c
# Executar e medir tempo
time ./benchmark > performance.txt 2>&1
Referências
Documentação: https://gcc.gnu.org/onlinedocs/
Manual GCC: https://gcc.gnu.org/onlinedocs/gcc/
Opções de otimização: https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
Ver também
Intel - Compiladores Intel
OpenMPI - MPI com GCC
Processando Simulações - Como submeter jobs