Nell'ambito di un progetto di ricerca
Per i test
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.
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.
Fonte: opennet.ru