Como parte de um projeto de pesquisa
Para teste
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.
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.
Fonte: opennet.ru