SPO600: Laboratório 4 – Construindo o GCC

Entenda o processo de construção do compilador GCC (GNU Compiler Collection) e como ele é realizado em diferentes arquiteturas de sistema. Este guia explora desde a obtenção do código fonte até a instalação e testes do compilador, oferecendo uma visão clara das etapas envolvidas e das diferenças de desempenho entre as arquiteturas AArch64 e x86.

O que é o GCC?

O GNU Compiler Collection (GCC) é um conjunto de compiladores do Projeto GNU, que suporta diversas linguagens de programação, arquiteturas de hardware e sistemas operacionais. Essencialmente, o GCC permite que o código escrito em uma linguagem de programação seja traduzido para uma forma que o computador possa entender e executar.

Obtendo o Código Fonte

O primeiro passo para a construção do compilador GCC é obter o código fonte. O código utilizado neste guia foi disponibilizado pela GNU. Para clonar o repositório, utilize o seguinte comando:

git clone git://gcc.gnu.org/git/gcc.git

Este processo é replicado em dois servidores com arquiteturas distintas: aarch64 e x86. A análise comparativa entre essas arquiteturas é crucial para entender o impacto no desempenho da compilação.

Aarch64 vs x86

Para entender qual arquitetura oferece melhor desempenho, é essencial comparar as especificações de cada uma. As diferenças no número de threads, tamanho do cache e conjuntos de instruções especializadas podem influenciar significativamente a velocidade da compilação.

Especificações da CPU

Feature x86_64 aarch64
CPU Cores 10 cores, 20 threads (2 threads per core) 16 cores, 16 threads (1 thread per core)
Clock Speed 3.70GHz base, up to 4.70GHz Not specified
Vendor Intel ARM

Memória Cache

Cache Level x86_64 aarch64
L1 Data 320 KiB total (32 KiB per core) 512 KiB total (32 KiB per core)
L1 Instruction 320 KiB total (32 KiB per core) 768 KiB total (48 KiB per core)
L2 10 MiB total (1 MiB per core) 8 MiB total (1 MiB per 2 cores)
L3 19.3 MiB (shared) 8 MiB (shared)
  • Vantagem de Threads: O sistema x86_64 possui 20 threads, enquanto o sistema ARM tem 16.
  • Cache: O sistema ARM tem caches L1 maiores, mas o sistema x86_64 tem um cache L3 significativamente maior (19.3MiB vs 8MiB). Como o GCC processa grandes quantidades de código, o cache L3 maior do x86_64 pode ser vantajoso.
  • O x86_64 possui conjuntos de instruções especializadas que podem acelerar certas tarefas de compilação, enquanto o sistema ARM utiliza uma abordagem mais simplificada.

A expectativa inicial é que o sistema x86_64 complete a construção do compilador GCC mais rapidamente.

Preparação da Construção

Antes de iniciar a compilação, é necessário criar diretórios específicos para organizar o processo. Utilize os seguintes comandos:

mkdir -p git gcc-build-001

Em seguida, navegue até o diretório git e clone o repositório do GCC:

cd git
git clone git://gcc.gnu.org/git/gcc.git

Configure o código fonte do GCC para uma construção personalizada. Como já existe uma versão do GCC instalada em /usr/local, é recomendável instalar a nova versão em ~/gcc-test-001:

~/git/gcc/configure --prefix=$HOME/gcc-test-001

Utilizando o Screen

A compilação do GCC pode levar de 20 minutos a várias horas. Para evitar interrupções causadas por problemas de conexão, utilize a ferramenta screen. Essa ferramenta permite criar uma sessão destacada, onde o processo de compilação pode continuar mesmo se a conexão for interrompida.

  • Crie uma sessão destacada:
screen -RaD
  • Execute o comando de compilação:
make
  • Para sair da sessão sem interromper o processo, use a combinação de teclas:
Ctrl+A+D
  • Para reconectar à sessão, utilize o comando:
screen -RaD

Hora de Compilar!

Com a sessão screen iniciada, é hora de começar a construção do compilador GCC. Certifique-se de estar no diretório ~/gcc-build-001:

cd gcc-build-001

Execute o comando make, redirecionando a saída padrão e os erros para um arquivo de log para análise posterior:

time make -j 24 |& tee build.log

Resultados da Compilação

Após a conclusão do processo de compilação em ambas as arquiteturas, os resultados foram:

  • x86_64: Concluído em 47 minutos e 37 segundos.
  • AArch64: Concluído em 124 minutos e 55 segundos.

Como previsto, a arquitetura x86_64 apresentou um desempenho superior na construção do compilador GCC.

Instalação da Construção

Após a compilação, instale o GCC com o comando make install. Para garantir que a instalação foi bem-sucedida, verifique a versão do GCC antes e depois da instalação.

Durante a preparação da construção, o código fonte do GCC foi configurado para ser instalado no diretório ~/gcc-test-001. Após a instalação, verifique se o diretório foi criado.

Para utilizar a nova versão do GCC, ajuste a variável PATH:

PATH=$HOME/gcc-test-001/bin:$PATH

Resultado da Instalação

Após ajustar o PATH, verifique a versão do GCC para confirmar que a nova versão foi instalada corretamente. A versão instalada será uma versão experimental ou de desenvolvimento, diferente da versão instalada anteriormente.

A nova versão do GCC deve ser capaz de criar e compilar programas simples em C.

Experimentos Adicionais

Para avaliar o desempenho do GCC, foram realizados dois experimentos:

  • Tempo necessário para recompilar o GCC após alterar o timestamp de um arquivo.
  • Tempo necessário para recompilar o GCC sem fazer nenhuma alteração.

Alteração de Timestamp

Para alterar o timestamp de um arquivo, utilize o comando touch. O arquivo passes.cc foi utilizado para este experimento.

  • Localize o arquivo passes.cc:
find ~/git/gcc -name "passes.cc"

result:
/home/amullagaliev/git/gcc/gcc/passes.cc
  • Atualize o timestamp:
touch /home/amullagaliev/git/gcc/gcc/passes.cc
  • Recompile o software.

Resultado do Experimento

A recompilação após a alteração do timestamp levou 59 segundos.

Recompilação sem Alterações

Recompile o software sem fazer nenhuma alteração prévia.

Resultado do Experimento

A recompilação sem alterações levou apenas 15 segundos.

Este conteúdo foi auxiliado por Inteligência Artificiado, mas escrito e revisado por um humano.
Via dev.to

Leave a Comment

Exit mobile version