Proxecto para engadir soporte para a paralelización do proceso de compilación a GCC

Como parte dun proxecto de investigación GCC paralelo Comezouse a traballar para engadir unha función a GCC que permite dividir o proceso de compilación en varios fíos paralelos. Actualmente, para aumentar a velocidade de compilación en sistemas multinúcleo, a utilidade make usa o lanzamento de procesos compiladores separados, cada un dos cales constrúe un ficheiro de código separado. O novo proxecto está experimentando con proporcionar paralelización a nivel de compilador, o que potencialmente mellorará o rendemento en sistemas multinúcleo.

Para probas preparado unha rama paralela separada de GCC, que ofrece un novo parámetro "—param=num-threads=N" para establecer o número de fíos. Na fase inicial, implementamos a transferencia de optimizacións interprocedementais en fíos separados, que se chaman cíclicamente para cada función e poden paralelizarse facilmente. As operacións de GIMPLE responsables das optimizacións independentes do hardware que avalían a interacción das funcións entre si colócanse en fíos separados.

Na seguinte fase, tamén se planea mover as optimizacións RTL interprocedurais en fíos separados, tendo en conta as características da plataforma de hardware. Despois diso, planeamos implementar a paralelización de optimizacións intraprocedimentais (IPA) aplicadas ao código dentro da función, independentemente das características específicas da chamada. A ligazón limitante polo momento é o colector de lixo, que engadiu un bloqueo global que desactiva as operacións de recollida de lixo mentres se executa en modo multiproceso (no futuro o colector de lixo adaptarase para a execución multiproceso de GCC).

Para avaliar os cambios no rendemento, preparouse unha suite de probas que ensambla o ficheiro gimple-match.c, que inclúe máis de 100 mil liñas de código e 1700 funcións. As probas nun sistema cunha CPU Intel Core i5-8250U con 4 núcleos físicos e 8 virtuais (Hyperthreading) mostraron unha diminución do tempo de execución das optimizacións de GIMPLE Intra Procedural de 7 a 4 segundos cando se executan 2 fíos e a 3 segundos cando se executan 4. fíos, é dicir. Conseguiuse un aumento da velocidade da fase de montaxe en consideración en 1.72 e 2.52 veces, respectivamente. As probas tamén demostraron que o uso de núcleos virtuais con Hyperthreading non aumenta o rendemento.

Proxecto para engadir soporte para a paralelización do proceso de compilación a GCC

O tempo de compilación global reduciuse nun 10 % aproximadamente, pero segundo as previsións, a paralelización das optimizacións RTL permitirá lograr resultados máis tanxibles, xa que esta etapa leva moito máis tempo durante a compilación. Aproximadamente despois da paralelización RTL, o tempo total de montaxe reducirase 1.61 veces. Despois disto, será posible reducir o tempo de construción noutro 5-10% paralelizando as optimizacións de IPA.

Proxecto para engadir soporte para a paralelización do proceso de compilación a GCC

Fonte: opennet.ru

Engadir un comentario