Projeto para adicionar suporte para paralelização do processo de compilação ao GCC

Como parte de um projeto de pesquisa CCG paralelo Começaram os trabalhos para adicionar um recurso ao GCC que permite que o processo de compilação seja dividido em vários threads paralelos. Atualmente, para aumentar a velocidade de construção em sistemas multi-core, o utilitário make usa o lançamento de processos de compilador separados, cada um dos quais constrói um arquivo de código separado. O novo projeto está experimentando fornecer paralelização no nível do compilador, o que potencialmente melhorará o desempenho em sistemas multi-core.

Para teste preparado um ramo de paralelização separado do GCC, que oferece um novo parâmetro “—param=num-threads=N” para definir o número de threads. No estágio inicial, implementamos a transferência de otimizações interprocedimentos em threads separados, que são chamados ciclicamente para cada função e podem ser facilmente paralelizados. As operações GIMPLE responsáveis ​​por otimizações independentes de hardware que avaliam a interação das funções entre si são colocadas em threads separados.

Na próxima etapa, também está planejado mover as otimizações RTL interprocedimento para threads separados, levando em consideração as características da plataforma de hardware. Depois disso, planejamos implementar a paralelização de otimizações intraprocedimentais (IPA) aplicadas ao código dentro da função, independente das especificidades da chamada. O elo limitante por enquanto é o coletor de lixo, que adicionou um bloqueio global que desativa as operações de coleta de lixo durante a execução no modo multithread (no futuro o coletor de lixo será adaptado para execução multithread do GCC).

Para avaliar mudanças de desempenho, foi preparada uma suíte de testes que monta o arquivo gimple-match.c, que inclui mais de 100 mil linhas de código e 1700 funções. Testes em um sistema com CPU Intel Core i5-8250U com 4 núcleos físicos e 8 virtuais (Hyperthreading) mostraram uma diminuição no tempo de execução das otimizações Intra Procedural GIMPLE de 7 para 4 segundos ao executar 2 threads e para 3 segundos ao executar 4 tópicos, ou seja, O aumento na velocidade da etapa de montagem em questão foi alcançado em 1.72 e 2.52 vezes, respectivamente. Os testes também mostraram que o uso de núcleos virtuais com Hyperthreading não leva a um aumento de desempenho.

Projeto para adicionar suporte para paralelização do processo de compilação ao GCC

O tempo geral de construção foi reduzido em aproximadamente 10%, mas de acordo com as previsões, a paralelização das otimizações RTL permitirá obter resultados mais tangíveis, uma vez que esta etapa leva significativamente mais tempo durante a compilação. Aproximadamente após a paralelização RTL, o tempo total de montagem será reduzido em 1.61 vezes. Depois disso, será possível reduzir o tempo de construção em mais 5 a 10% paralelizando as otimizações IPA.

Projeto para adicionar suporte para paralelização do processo de compilação ao GCC

Fonte: opennet.ru

Adicionar um comentário