Avatar di Manolo De Agostini

a cura di Manolo De Agostini

Il Khronos Group ha annunciato che Vulkan è diventata la prima API grafica a includere un "formal memory model" (modello di memoria formale) per i suoi linguaggi di programmazione associati GLSL e SPIR-V. Che cosa significa?

Come spiega lo stesso consorzio in questo post, un "memory model" descrive il modo in cui i thread in un sistema di calcolo parallelo possono accedere a dati condivisi e sincronizzarli l'uno con l'altro, permettendo ai compilatori e all'hardware di riordinare e ottimizzare gli accessi di memoria.

"Questo si ottiene specificando con precisione dove e come le istruzioni e le operazioni in memoria possono essere riordinate e in quale ordine gli effetti di queste operazioni in memoria possono diventare visibili agli altri thread".

I "formal memory model" rappresentano uno sviluppo piuttosto recente in ambito informatico, che coincide con la disponibilità delle CPU multi-core. "C++11 è stata la prima versione di C++ a includere una definizione di modello di memoria per l'esecuzione sulle CPU. C'è ancora molta ricerca in corso su come far scalare questi modelli su sistemi altamente paralleli con nuove nozioni come scoped synchronization".

vulkan

Dato che le GPU sono diventate più parallele e programmabili, e i loro linguaggi di shading e compilatori associati sono diventati più sofisticati, la necessità di un modello di memoria formale per la grafica via GPU e la programmazione del calcolo è diventata sempre più impellente.

Di conseguenza l'API Vulkan si è adeguata per soddisfare le necessità dei programmatori. Non è un cambiamento avvenuto dall'oggi al domani, ma vi sono stati diversi passaggi intermedi con il rilascio della Vulkan Memory Model Specification provvisoria con estensioni per Vulkan, SPIR-V e GLSL per dare agli sviluppatori ulteriore controllo su come i loro shader sincronizzano l'accesso alla memoria in un ambiente di calcolo parallelo.

Di pari passo alle estensioni, il Khronos Group ha rilasciato una descrizione formale del modello di memoria Vulkan usando Alloy - un linguaggio sviluppato dal MIT per descrivere strutture logiche e uno strumento per esplorarle.

Il modello di memoria di Vulkan è basato sul modello di memoria C++, ma aggiunge preziose funzionalità tra cui "scopes, storage classes e disponibilità della memoria e visibilità delle operazioni". Ognuna di queste caratteristiche permette un livello aggiuntivo di controllo rispetto al modello di base C++, cosa che può essere sfruttata per ridurre il costo della sincronizzazione e così aumentare le prestazioni.

Khronos ha rilasciato il tutto in forma provvisoria per ottenere il feedback dalla comunità C ++, dagli accademici, dagli ingegneri di compilatori e sviluppatori di software con esperienza nella comunicazione multi-thread e nell'uso della memoria. Il gruppo di lavoro Vulkan incorporerà il feedback nella specifica finale. Tutti i materiali provvisori sono disponibili sul repository GitHub del modello di memoria Vulkan.