Progetto per aggiungere il supporto per la parallelizzazione del processo di compilazione a GCC

Nell'ambito di un progetto di ricerca GCC parallelo È iniziato il lavoro per aggiungere una funzionalità a GCC che consenta di dividere il processo di compilazione in diversi thread paralleli. Attualmente, per aumentare la velocità di compilazione sui sistemi multi-core, l'utilità make utilizza l'avvio di processi di compilazione separati, ognuno dei quali crea un file di codice separato. Il nuovo progetto sta sperimentando la possibilità di fornire parallelizzazione a livello di compilatore, che potenzialmente migliorerà le prestazioni sui sistemi multi-core.

Per i test preparato un ramo di parallelizzazione separato di GCC, che offre un nuovo parametro “—param=num-threads=N” per impostare il numero di thread. Nella fase iniziale, abbiamo implementato il trasferimento delle ottimizzazioni interprocedurali in thread separati, che vengono chiamati ciclicamente per ciascuna funzione e possono essere facilmente parallelizzati. Le operazioni GIMPLE responsabili delle ottimizzazioni indipendenti dall'hardware che valutano l'interazione delle funzioni tra loro sono collocate in thread separati.

Nella fase successiva si prevede inoltre di spostare le ottimizzazioni RTL interprocedurali in thread separati, tenendo conto delle caratteristiche della piattaforma hardware. Successivamente, prevediamo di implementare la parallelizzazione delle ottimizzazioni intraprocedurali (IPA) applicate al codice all'interno della funzione, indipendentemente dalle specificità della chiamata. Il collegamento limitante per ora è il Garbage Collector, che ha aggiunto un blocco globale che disabilita le operazioni di Garbage Collection durante l'esecuzione in modalità multi-thread (in futuro il Garbage Collector sarà adattato per l'esecuzione multi-thread di GCC).

Per valutare i cambiamenti nelle prestazioni è stata preparata una test suite che assembla il file gimple-match.c, che comprende più di 100mila righe di codice e 1700 funzioni. Test su un sistema con CPU Intel Core i5-8250U con 4 core fisici e 8 virtuali (Hyperthreading) hanno mostrato una diminuzione del tempo di esecuzione delle ottimizzazioni Intra Procedural GIMPLE da 7 a 4 secondi durante l'esecuzione di 2 thread e a 3 secondi durante l'esecuzione di 4 discussioni, cioè Un aumento della velocità della fase di assemblaggio in esame è stato ottenuto rispettivamente di 1.72 e 2.52 volte. I test hanno anche dimostrato che l'utilizzo di core virtuali con Hyperthreading non porta ad un aumento delle prestazioni.

Progetto per aggiungere il supporto per la parallelizzazione del processo di compilazione a GCC

Il tempo complessivo di compilazione è stato ridotto di circa il 10%, ma secondo le previsioni, parallelizzare le ottimizzazioni RTL consentirà di ottenere risultati più tangibili, poiché questa fase richiede molto più tempo durante la compilazione. Approssimativamente dopo la parallelizzazione RTL, il tempo totale di assemblaggio sarà ridotto di 1.61 volte. Successivamente sarà possibile ridurre i tempi di costruzione di un altro 5-10% parallelizzando le ottimizzazioni IPA.

Progetto per aggiungere il supporto per la parallelizzazione del processo di compilazione a GCC

Fonte: opennet.ru

Aggiungi un commento