Home Notizie recenti La tecnica aumenta significativamente la velocità dei programmi eseguiti nella shell Unix

La tecnica aumenta significativamente la velocità dei programmi eseguiti nella shell Unix

92
0

I ricercatori hanno creato una tecnica che aumenta la velocità dei programmi eseguiti nella shell Unix, un ambiente di programmazione onnipresente creato 50 anni fa, parallelizzando i programmi. Credito: Christine Daniloff, MIT

I ricercatori hanno sperimentato una tecnica che può accelerare drasticamente alcuni tipi di programmi per computer automaticamente, assicurando che i risultati dei programmi rimangano accurati.

Il loro sistema aumenta la velocità dei programmi eseguiti nella shell Unix, un ambiente di programmazione onnipresente creato 50 anni fa che è ancora ampiamente utilizzato oggi. Il loro metodo parallelizza questi programmi, il che significa che divide i componenti del programma in parti che possono essere eseguite contemporaneamente su più processori di computer.

Ciò consente ai programmi di eseguire attività come l’indicizzazione Web, l’elaborazione del linguaggio naturale o l’analisi dei dati in una frazione del loro runtime originale.

“Ci sono così tante persone che usano questo tipo di programmi, come data scientist, biologi, ingegneri ed economisti. Ora possono accelerare automaticamente i loro programmi senza temere di ottenere risultati errati”, afferma Nikos Vasilakis, ricercatore in Computer Laboratorio di scienze e intelligenza artificiale (CSAIL) al MIT.

Il sistema facilita anche i programmatori che sviluppano strumenti utilizzati da data scientist, biologi, ingegneri e altri. Non hanno bisogno di apportare modifiche speciali ai comandi del loro programma per abilitare questa parallelizzazione automatica e priva di errori, aggiunge Vasilakis, che presiede un comitato di ricercatori di tutto il mondo che lavorano su questo sistema da quasi due anni.

Vasilakis è l’autore senior dell’ultimo documento di ricerca del gruppo, che include il coautore del MIT e lo studente laureato CSAIL Tammam Mustafa e sarà presentato all’USENIX Symposium on Operating Systems Design and Implementation. I coautori includono l’autore principale Konstantinos Kallas, uno studente laureato presso l’Università della Pennsylvania; Jan Bielak, uno studente della Warsaw Staszic High School; Dimitris Karnikis, ingegnere informatico presso Aarno Labs; Thurston HY Dang, un ex postdoc del MIT che ora è un ingegnere del software presso Google; e Michael Greenberg, assistente professore di informatica allo Stevens Institute of Technology.

Un problema vecchio di decenni

Questo nuovo sistema, noto come PaSh, si concentra sul programma, o script, che vengono eseguiti nella shell Unix. Uno script è una sequenza di comandi che istruisce un computer a eseguire un calcolo. La parallelizzazione corretta e automatica degli script di shell è un problema spinoso con cui i ricercatori si sono confrontati per decenni.

La shell Unix rimane popolare, in parte, perché è l’unico ambiente di programmazione che consente a uno script di essere composto da funzioni scritte in più linguaggi di programmazione. Linguaggi di programmazione diversi sono più adatti per compiti o tipi di dati specifici; se uno sviluppatore usa il linguaggio giusto, risolvere un problema può essere molto più semplice.

“Alle persone piace anche sviluppare in diversi linguaggi di programmazione, quindi comporre tutti questi componenti in un unico programma è qualcosa che accade molto frequentemente”, aggiunge Vasilakis.

Sebbene la shell Unix abiliti script multilingua, la sua struttura flessibile e dinamica rende difficile la parallelizzazione di questi script utilizzando i metodi tradizionali.

La parallelizzazione di un programma è solitamente complicata perché alcune parti del programma dipendono da altre. Questo determina l’ordine in cui i componenti devono essere eseguiti; sbaglia l’ordine e il programma fallisce.

Quando un programma è scritto in un unico linguaggio, gli sviluppatori hanno informazioni esplicite sulle sue caratteristiche e sul linguaggio che li aiuta a determinare quali componenti possono essere parallelizzati. Ma questi strumenti non esistono per gli script nella shell Unix. Gli utenti non possono vedere facilmente cosa sta succedendo all’interno dei componenti o estrarre informazioni che potrebbero aiutare nella parallelizzazione.

Una soluzione just-in-time

Per superare questo problema, PaSh utilizza una fase di preelaborazione che inserisce semplici annotazioni sui componenti del programma che ritiene possano essere parallelizzabili. Quindi PaSh tenta di parallelizzare quelle parti dello script mentre il programma è in esecuzione, nel momento esatto in cui raggiunge ogni componente.

Ciò evita un altro problema nella programmazione della shell: è impossibile prevedere il comportamento di un programma in anticipo.

Parallelizzando i componenti del programma “just in time”, il sistema evita questo problema. È in grado di velocizzare efficacemente molti più componenti rispetto ai metodi tradizionali che tentano di eseguire la parallelizzazione in anticipo.

La parallelizzazione just-in-time garantisce inoltre che il programma accelerato restituisca risultati accurati. Se PaSh arriva a un componente del programma che non può essere parallelizzato (forse dipende da un componente che non è ancora stato eseguito), esegue semplicemente la versione originale ed evita di causare un errore.

“Indipendentemente dai vantaggi in termini di prestazioni, se prometti di far funzionare qualcosa in un secondo anziché in un anno, se c’è qualche possibilità di restituire risultati errati, nessuno utilizzerà il tuo metodo”, afferma Vasilakis.

Gli utenti non devono apportare modifiche per utilizzare PaSh; possono semplicemente aggiungere lo strumento alla loro shell Unix esistente e dire ai loro script di usarlo.

Accelerazione e precisione

I ricercatori hanno testato PaSh su centinaia di script, dai programmi classici a quelli moderni, e non ne ha violato nemmeno uno. Il sistema è stato in grado di eseguire programmi sei volte più velocemente, in media, rispetto a script senza precedenti, e ha raggiunto una velocità massima di quasi 34 volte.

Ha anche aumentato la velocità degli script che altri approcci non erano in grado di parallelizzare.

“Il nostro sistema è il primo che mostra questo tipo di trasformazione completamente corretta, ma c’è anche un vantaggio indiretto. Il modo in cui il nostro sistema è progettato consente ad altri ricercatori e utenti del settore di basarsi su questo lavoro”, afferma Vasilakis.

È entusiasta di ricevere feedback aggiuntivi dagli utenti e vedere come migliorano il sistema. Il progetto open source è entrato a far parte della Linux Foundation lo scorso anno, rendendolo ampiamente disponibile per gli utenti dell’industria e del mondo accademico.

Andando avanti, Vasilakis vuole utilizzare PaSh per affrontare il problema della distribuzione, dividendo un programma da eseguire su più computer, piuttosto che molti processori all’interno di un computer. Sta anche cercando di migliorare lo schema di annotazione in modo che sia più facile da usare e possa descrivere meglio i componenti complessi del programma.

“Gli script della shell Unix svolgono un ruolo chiave nell’analisi dei dati e nelle attività di ingegneria del software. Questi script potrebbero essere eseguiti più velocemente facendo in modo che i diversi programmi che invocano utilizzino le molteplici unità di elaborazione disponibili nelle moderne CPU. Tuttavia, la natura dinamica della shell rende difficile

piani di esecuzione parallela delle valute in anticipo”, afferma Diomidis Spinellis, professore di ingegneria del software presso l’Università di Economia e Commercio di Atene e professore di analisi del software presso la Delft Technical University, che non è stato coinvolto in questa ricerca. “Attraverso just-in-time analisi, PaSh-JIT riesce a conquistare la complessità dinamica della shell e quindi a ridurre i tempi di esecuzione degli script mantenendo la correttezza dei risultati corrispondenti.”

“In sostituzione di una normale shell che orchestra i passaggi, ma non li riordina o li divide, PaSh fornisce un modo semplice per migliorare le prestazioni di grandi lavori di elaborazione dati”, aggiunge Douglas McIlroy, professore a contratto nel Dipartimento di Informatica del Dartmouth College, che in precedenza ha guidato il Dipartimento di ricerca sulle tecniche di elaborazione presso i Bell Laboratories (che è stata la culla del sistema operativo Unix). “L’ottimizzazione manuale per sfruttare il parallelismo deve essere eseguita a un livello per il quale i normali linguaggi di programmazione (comprese le shell) non offrono astrazioni pulite. Il codice risultante mescola questioni di logica ed efficienza. È difficile da leggere e da mantenere nel di fronte a requisiti in evoluzione. PaSh interviene abilmente a questo livello, preservando la logica originale in superficie e ottenendo efficienza quando il programma viene eseguito”.


Questa storia è stata ripubblicata per gentile concessione di MIT News (web.mit.edu/newsoffice/), un popolare sito che copre notizie sulla ricerca, l’innovazione e l’insegnamento del MIT.

Articolo precedenteSPIEGAZIONE: L’accordo di Elon Musk per l’acquisto di Twitter sta andando in pezzi?
Articolo successivoI sistemi di intelligenza artificiale hanno davvero il loro linguaggio segreto?