← Ultimi articoli
🤖 machine learning

Learning to Parallelize with OpenMP by Augmented Heterogeneous AST Representation

Questo articolo propone Graph2Par, un nuovo approccio di apprendimento basato su grafi che utilizza una rappresentazione AST eterogenea aumentata e un dataset OMP_Serial di nuova creazione per raggiungere un'accuratezza dell'85% nel rilevamento di loop parallelizzabili con OpenMP, superando i metodi basati su token allo stato dell'arte.

Autori originali: Le Chen, Quazi Ishtiaque Mahmud, Hung Phan, Nesreen K. Ahmed, Ali Jannesari

Pubblicato 2026-08-20
📖 5 min di lettura🧠 Approfondimento

Autori originali: Le Chen, Quazi Ishtiaque Mahmud, Hung Phan, Nesreen K. Ahmed, Ali Jannesari

Articolo originale sotto licenza CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Questa è una spiegazione generata dall'IA dell'articolo qui sotto. Non è stata scritta né approvata dagli autori. Per precisione tecnica, consulta l'articolo originale. Leggi il disclaimer completo

I computer moderni sono diventati come vaste città di piccoli lavoratori, ognuno capace di eseguire un compito in una frazione di secondo. Per far sì che queste macchine funzionino velocemente, i programmatori devono insegnare loro a inviare molti lavoratori a svolgere compiti contemporaneamente, invece di metterli in fila per lavorare uno alla volta. Questa pratica, nota come parallelizzazione, è essenziale per ottenere il massimo dall'attuale potente hardware. Tuttavia, dire a un computer come suddividere il proprio lavoro è difficile. Richiede una profonda comprensione di come le diverse parti di un programma dipendano l'una dall'altra. Se un programmatore sbaglia le stime, il programma potrebbe bloccarsi o produrre la risposta errata. Per decenni, gli esperti hanno costruito strumenti per trovare automaticamente queste opportunità di lavoro di squadra, ma questi strumenti spesso giocano troppo sul sicuro, perdendo molte occasioni per velocizzare le cose, oppure si confondono davanti a strutture di codice complesse.

In uno studio recente, i ricercatori si sono posti l'obiettivo di insegnare ai computer di riconoscere queste opportunità da soli, utilizzando un metodo ispirato al modo in cui le macchine imparano a comprendere il linguaggio. Il team, guidato da Le Chen e dai colleghi dell'Iowa State University e di Intel Labs, si è concentrato su un tipo specifico di istruzione utilizzata nel linguaggio di programmazione C chiamato OpenMP. Queste istruzioni agiscono come segnali stradali, dicendo al computer dove è sicuro avviare più lavoratori contemporaneamente. La sfida era che gli strumenti esistenti, che si affidano a rigide regole matematiche, spesso non riescono a vedere la foresta per gli alberi. Potrebbero perdere un ciclo perfettamente parallelizzabile semplicemente perché contiene una chiamata a funzione o una struttura annidata che appare complicata a un analizzatore tradizionale. I ricercatori si sono resi conto che, per risolvere questo problema, avevano bisogno di un nuovo modo per mostrare al computer come appare effettivamente il codice, non solo come una sequenza di parole, ma come una mappa della sua struttura e del suo significato.

Per affrontare la questione, il team ha dovuto prima costruire una massiccia libreria di esempi, un dataset che hanno chiamato OMP Serial. Hanno raccolto quasi 18.600 esempi di cicli che erano già stati contrassegnati come paralleli e circa 14.000 cicli che non lo erano. Li hanno prelevati da migliaia di progetti software reali presenti su Internet, nonché da esempi sintetici accuratamente creati per testare schemi specifici. Questa collezione ha fornito loro un ricco terreno di verità da cui imparare. Ma avere i dati era solo metà della battaglia; avevano bisogno di un modo per alimentare un modello di apprendimento automatico che potesse comprendere veramente il codice. Invece di trattare il codice come una frase in un libro, dove l'ordine delle parole conta di più, hanno deciso di trattarlo come una mappa complessa. Hanno creato una rappresentazione chiamata albero di sintassi astratta eterogeneo aumentato. In termini semplici, questo è un grafo dettagliato che collega ogni pezzo del codice. Mostra non solo la gerarchia del programma — come un comando genitore e i suoi comandi figli — ma anche come il codice fluisce da un passaggio all'altro e come le parole nel codice si trovano vicine tra loro nel testo. Questa mappa cattura lo scheletro strutturale del programma preservando al contempo le sottili relazioni tra le diverse parti che una semplice lista di parole perderebbe.

Con questa nuova mappa in mano, i ricercatori hanno addestrato un sofisticato modello di apprendimento noto come trasformatore di grafi eterogenei. Immaginate questo modello come uno studente a cui vengono mostrate migliaia di queste mappe, insieme alla risposta corretta per ciascuna di esse: se il ciclo è sicuro da parallelizzare o meno. Il modello impara a individuare i modelli nascosti che indicano la sicurezza. Presta attenzione ai diversi tipi di connessioni nella mappa, comprendendo che un collegamento tra una chiamata a funzione e una variabile può significare qualcosa di diverso rispetto a un collegamento tra due operazioni matematiche. Una volta addestrato, il modello è stato testato sulla sua capacità di prevedere quali cicli potevano essere parallelizzati e, cosa cruciale, quale tipo specifico di istruzione dovesse essere utilizzata per farlo. I risultati sono stati sorprendenti. Il modello ha raggiunto un'accuratezza dell'85 percento nel rilevare regioni parallelizzabili, superando significativamente i migliori strumenti esistenti che si affidano alla tradizionale analisi statica.

Lo studio ha anche rivelato esattamente dove i vecchi strumenti stavano fallendo. I ricercatori hanno scoperto che gli errori più comuni commessi dai software tradizionali avvenivano con cicli che includevano chiamate a funzioni, cicli che riducevano una grande quantità di dati in un singolo valore e cicli annidati all'interno di altri cicli. Questi sono i casi difficili in cui il codice appare disordinato per un analizzatore rigido ma è in realtà sicuro per il lavoro parallelo. Il nuovo approccio di apprendimento automatico, al contrario, ha gestito queste strutture complesse con molto più successo. Non ha solo tirato a indovinare; ha appreso la logica sottostante della forma del codice. I ricercatori hanno dimostrato che, combinando una ricca visione strutturale del codice con potenti algoritmi di apprendimento, è possibile automatizzare un compito che da tempo richiedeva l'intuizione umana. Questo lavoro suggerisce che il futuro della scrittura di software veloci potrebbe non risiedere in migliori libri di regole per i computer, ma nell'insegnare loro a vedere il codice come farebbe un esperto programmatore umano: come un sistema vivo e interconnesso piuttosto che come una sequenza statica di comandi.

Sommerso dagli articoli nel tuo campo?

Ricevi digest giornalieri degli articoli più recenti corrispondenti alle tue parole chiave di ricerca — con riassunti tecnici, nella tua lingua.

Prova Digest →