Progetto per l'aggiunta al GCC del supporto per il parallelismo nel processo di compilazione

Nell'ambito del progetto di ricerca Parallel GCC è iniziato il lavoro per aggiungere a GCC la possibilità di suddividere il processo di compilazione in più flussi eseguiti in parallelo. Attualmente, per aumentare la velocità di compilazione su sistemi multicore, viene utilizzato il lancio di singoli processi del compilatore a livello di utility make, ciascuno dei quali compila un file di codice separato. Il nuovo progetto sperimenta la fornitura di parallelismo a livello di compilatore, il che potrebbe aumentare l'efficienza delle operazioni su sistemi multicore.

Per il test è stata preparata un ramo parallelo separato di GCC, per il quale è stato proposto un nuovo parametro «—param=num-threads=N» per impostare il numero di thread. Nella fase iniziale è stata attuata l'estrazione in thread eseguibili separati delle ottimizzazioni interprocedurali, che vengono richiamate ciclicamente per ogni funzione e che si prestano bene alla parallelizzazione. In thread separati sono state estratte le operazioni GIMPLE, responsabili delle ottimizzazioni indipendenti dall'hardware, che valutano le interazioni tra le funzioni.

Nella fase successiva si prevede di estrarre in thread separati anche le ottimizzazioni RTL interprocedurali, tenendo conto delle peculiarità della piattaforma hardware. Successivamente, si prevede di attuare la parallelizzazione delle ottimizzazioni intraprocedurali (IPA), applicabili al codice all'interno della funzione, indipendentemente dalle peculiarità della chiamata. Attualmente, il vincolo principale è il garbage collector, al quale è stata aggiunta una global lock che disabilita le operazioni di raccolta dei rifiuti durante il funzionamento in modalità multithreading (in futuro, il garbage collector sarà adattato per l'esecuzione multithread di GCC).

Per valutare il cambiamento delle prestazioni, è stato preparato un set di test che compila il file gimple-match.c, contenente oltre 100.000 righe di codice e 1.700 funzioni. I test su un sistema con CPU Intel Core i5-8250U, dotato di 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 con 2 thread attivi e a 3 secondi con 4 thread, con un aumento della velocità di questo fase di compilazione di 1,72 e 2,52 volte, rispettivamente. I test hanno anche dimostrato che l'uso di core virtuali con Hyperthreading non porta a un incremento delle prestazioni.

Progetto per l'aggiunta al GCC del supporto per il parallelismo nel processo di compilazione

Il tempo totale di compilazione è stato ridotto di circa il 10%, ma si prevede che la parallelizzazione delle ottimizzazioni RTL porterà a risultati più significativi, poiché questa fase richiede molto più tempo durante la compilazione. Si stima che, dopo la parallelizzazione delle ottimizzazioni RTL, il tempo totale di compilazione sarà ridotto di 1,61 volte. Successivamente, si potrà ridurre ulteriormente il tempo di compilazione del 5-10% grazie alla parallelizzazione delle ottimizzazioni IPA.

Progetto per l'aggiunta al GCC del supporto per il parallelismo nel processo di compilazione

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster