GCC

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

compile_c.sh
#!/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++

compile_cpp.sh
#!/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

compile_fortran.sh
#!/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

compile_omp.sh
#!/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

compile_mpi.sh
#!/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

compile_with_libs.sh
#!/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

Flags de otimização GCC

Flag

Descrição

-O0

Sem otimização (padrão)

-O1

Otimização básica

-O2

Otimização recomendada (bom equilíbrio)

-O3

Otimização agressiva (máxima velocidade)

-Os

Otimização para tamanho

-march=native

Otimiza para a arquitetura atual

-mtune=native

Ajusta para a arquitetura atual

-funroll-loops

Desenrola loops (pode aumentar velocidade)

-ffast-math

Otimizações matemáticas agressivas

Job para Compilar e Executar

compile_and_run.sh
#!/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

test_flags_array.sh
#!/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

Ver também