Nelle build notturne di Rust sono state ampliate le capacità di parallelizzazione della compilazione

Nel frontend del compilatore Rust, che svolge compiti come l'analisi sintattica, il controllo dei tipi e l'analisi dei prestiti, è stata implementata la supporto per l'esecuzione in parallelo, che consente di ridurre significativamente i tempi di compilazione. L'esecuzione parallela è già disponibile nelle versioni notturne di Rust ed è attivata tramite l'opzione "-Z threads=8". Questa funzionalità è prevista per essere inclusa nella versione stabile nel 2024.

Il lavoro per ridurre i tempi di compilazione in Rust è in corso da diversi anni. Nei primi 10 mesi del 2023, il tempo di compilazione si è ridotto in media del 13%, il picco di utilizzo della memoria è diminuito del 15% e la dimensione dei file generati è diminuita del 7%. In questa fase, il miglioramento è stato raggiunto grazie alle ottimizzazioni del compilatore stesso. I programmatori si sono poi concentrati sul migliorare i tempi di compilazione attraverso l'esecuzione parallela delle operazioni.

Fino ad ora, il parallelismo in Rust è stato principalmente gestito a livello di processi; ad esempio, il gestore di pacchetti Cargo può avviare più processi rustc per compilare simultaneamente diversi pacchetti. Il supporto per il parallelismo è presente anche sul lato backend, che esegue operazioni legate alla generazione del codice: il backend di Rust può generare codice in parti che LLVM può poi elaborare in parallelo. Tuttavia, il frontend è stato finora in grado di elaborare il codice sorgente solo in modalità single-threaded.

Per supportare il parallelismo, il frontend è stato modificato per utilizzare la libreria Rayon e ampiamente ristrutturato; ad esempio, molte sue parti ora sono sincronizzate tramite mutex e blocchi di lettura/scrittura, e nel codice vengono utilizzati tipi atomici. Durante i test delle prestazioni, la nuova implementazione parallelizzata ha mostrato una compilazione fino al 2% più lenta in modalità single-threaded (-Z threads=1), ma quando i thread superano uno, la velocità aumenta notevolmente. Ad esempio, con 8 thread (-Z threads=8), in alcune situazioni è stato possibile ridurre il tempo di compilazione fino al 50%.

Tuttavia, il risultato dipende fortemente dalle impostazioni ambientali e dal codice compilato: per programmi molto piccoli, che si compilano già rapidamente, la compilazione in modalità multithread può risultare più lenta. Inoltre, il consumo di memoria in modalità multithread può aumentare significativamente; ad esempio, nei test è stata osservata una crescita del consumo di memoria fino al 35%.

Fonte: opennet.ru

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