Supporto delle funzioni integrate DP4a in WGSL
DP4a (Dot Product of 4 Elementi e Accumula) si riferisce a un insieme di istruzioni GPU comunemente utilizzate nell'inferenza del deep learning per la quantizzazione. Esegue in modo efficiente prodotti punto con numeri interi a 8 bit per accelerare il calcolo di questi modelli quantizzati int8. Consente di risparmiare (fino al 75%) della larghezza di banda della memoria e della rete e di migliorare le prestazioni di qualsiasi modello di machine learning nell'inferenza rispetto alla versione f32. Di conseguenza, è molto utilizzato all'interno di molti framework di IA popolari.
Quando in navigator.gpu.wgslLanguageFeatures
è presente l'estensione di linguaggio WGSL "packed_4x8_integer_dot_product"
in navigator.gpu.wgslLanguageFeatures
, ora puoi utilizzare scalari interi a 32 bit che pacchettizzano vettori a 4 componenti di numeri interi a 8 bit come input alle istruzioni del prodotto scalare nel codice Shar WGSL con le funzioni integrate dot4U8Packed
e dot4I8Packed
. Puoi anche utilizzare le istruzioni di pacchettizzazione e decompressione con vettori a quattro componenti compressi di numeri interi a 8 bit con funzioni integrate di pack4xI8
, pack4xU8
, pack4xI8Clamp
, pack4xU8Clamp
, unpack4xI8
e unpack4xU8
WGSL.
Ti consigliamo di utilizzare un'istruzione con i requisiti per segnalare il potenziale di non portabilità con requires packed_4x8_integer_dot_product;
nella parte superiore del codice del tuo Shar WGSL. Vedi l'esempio seguente e il problema issue tint:1497.
if (!navigator.gpu.wgslLanguageFeatures.has("packed_4x8_integer_dot_product")) {
throw new Error(`DP4a built-in functions are not available`);
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const shaderModule = device.createShaderModule({ code: `
requires packed_4x8_integer_dot_product;
fn main() {
const result: u32 = dot4U8Packed(0x01020304u, 0x02040405u); // 42
}`,
});
Un ringraziamento speciale al team Web Graphics di Intel di Shanghai per aver portato a termine questa specifica e implementazione.
Parametri puntatore senza limitazioni in WGSL
L'estensione di lingua WGSL "unrestricted_pointer_parameters"
allenta le limitazioni relative ai puntatori che possono essere trasmessi alle funzioni WGSL:
I puntatori dei parametri di
storage
,uniform
eworkgroup
indirizzano gli spazi alle funzioni dichiarate dall'utente.Trasmettere puntatori alla struttura di membri ed elementi di array alle funzioni dichiarate dall'utente.
Guarda Pointer come parametri delle funzioni | Tour di WGSL per saperne di più.
Questa funzionalità può essere rilevata utilizzando navigator.gpu.wgslLanguageFeatures
. Ti consigliamo di utilizzare sempre un'istruzione relativa ai requisiti per segnalare il potenziale di non portabilità con requires unrestricted_pointer_parameters;
nella parte superiore del codice del tuo Shar WGSL. Guarda l'esempio riportato di seguito, ovvero le modifiche alle specifiche WGSL e issue tint:2053.
if (!navigator.gpu.wgslLanguageFeatures.has("unrestricted_pointer_parameters")) {
throw new Error(`Unrestricted pointer parameters are not available`);
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const shaderModule = device.createShaderModule({ code: `
requires unrestricted_pointer_parameters;
@group(0) @binding(0) var<storage, read_write> S : i32;
fn func(pointer : ptr<storage, i32, read_write>) {
*pointer = 42;
}
@compute @workgroup_size(1)
fn main() {
func(&S);
}`
});
Sintassi dello zucchero per il deriferimento dei composti in WGSL
Quando in navigator.gpu.wgslLanguageFeatures
è presente l'estensione di linguaggio WGSL "pointer_composite_access"
in navigator.gpu.wgslLanguageFeatures
, il codice dello streamr WGSL ora supporta l'accesso a componenti di tipi di dati complessi che utilizzano la stessa sintassi del punto (.
), indipendentemente dal fatto che tu stia lavorando direttamente con i dati o con un puntatore. Ecco come funziona:
Se
foo
è un puntatore:foo.bar
è un modo più conveniente per scrivere(*foo).bar
. Generalmente, l'asterisco (*
) serve per trasformare il puntatore in un "riferimento" che possono essere dereferenziati, ma ora sia i puntatori che i riferimenti sono molto più simili e quasi intercambiabili.Se
foo
non è un puntatore: l'operatore del punto (.
) funziona esattamente come sei abituato a fare per accedere direttamente ai membri.
Analogamente, se pa
è un puntatore che memorizza l'indirizzo iniziale di un array, l'uso di pa[i]
ti consente di accedere direttamente alla posizione di memoria in cui è archiviato l'elemento 'i
di quell'array.
Ti consigliamo di utilizzare un'istruzione con i requisiti per segnalare il potenziale di non portabilità con requires pointer_composite_access;
nella parte superiore del codice del tuo Shar WGSL. Vedi l'esempio seguente e il codice issue tint:2113.
if (!navigator.gpu.wgslLanguageFeatures.has("pointer_composite_access")) {
throw new Error(`Pointer composite access is not available`);
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const shaderModule = device.createShaderModule({ code: `
requires pointer_composite_access;
fn main() {
var a = vec3f();
let p : ptr<function, vec3f> = &a;
let r1 = (*p).x; // always valid.
let r2 = p.x; // requires pointer composite access.
}`
});
Stato di sola lettura separato per gli aspetti relativi allo stencil e alla profondità
In precedenza, gli allegati con stencil di profondità di sola lettura nei passaggi di rendering richiedevano che entrambi gli aspetti (profondità e stencil) siano di sola lettura. Questa limitazione è stata rimossa. Ora puoi utilizzare l'aspetto profondità in modalità di sola lettura, ad esempio per il tracciamento dell'ombra dei contatti, mentre il buffer stencil viene scritto per identificare i pixel per l'ulteriore elaborazione. Vedi issue dawn:2146.
Aggiornamenti all'alba
Il callback dell'errore non acquisito impostato con wgpuDeviceSetUncapturedErrorCallback()
viene ora chiamato immediatamente quando si verifica l'errore. Questo è ciò che gli sviluppatori si aspettano e vogliono sempre per il debug. Vedi change dawn:173620.
Il metodo wgpuSurfaceGetPreferredFormat()
dell'API webgpu.h è stato implementato. Vedi issue dawn:1362.
Descrive solo alcuni dei punti salienti. Consulta l'elenco completo dei commit.
Novità di WebGPU
Un elenco di tutti gli argomenti trattati nella serie Novità di WebGPU.
Chrome 128
- Esperimenti con i sottogruppi
- Ritirare l'impostazione della bias di profondità per linee e punti
- Nascondi avviso di errore non acquisito se preventDefault
- WGSL interpola prima il campionamento e
- Aggiornamenti sull'alba
Chrome 127
- Supporto sperimentale per OpenGL ES su Android
- Attributo informazioni GPUAdapter
- Miglioramenti all'interoperabilità di WebAssembly
- Miglioramento degli errori del codificatore di comandi
- Aggiornamenti sull'alba
Chrome 126
- Aumenta il limite di maxTextureArrayLevel
- Ottimizzazione del caricamento del buffer per il backend Vulkan
- Miglioramenti del tempo di compilazione degli Shader
- I buffer dei comandi inviati devono essere univoci
- Aggiornamenti sull'alba
Chrome 125
- Sottogruppi (funzionalità in fase di sviluppo)
- Esegui il rendering su una porzione della texture 3D
- Aggiornamenti sull'alba
Chrome 124
- Texture di archiviazione di sola lettura e lettura/scrittura
- Assistenza per lavoratori dei servizi e lavoratori condivisi
- Nuovi attributi relativi alle informazioni sull'adattatore
- Correzioni di bug
- Aggiornamenti sull'alba
Chrome 123
- Supporto delle funzioni integrate DP4a in WGSL
- Parametri di puntatore senza limitazioni in WGSL
- Sintassi dello zucchero per il deriferimento dei composti in WGSL
- Separa lo stato di sola lettura per gli aspetti relativi allo stencil e alla profondità
- Aggiornamenti sull'alba
Chrome 122
- Ampliare la copertura con la modalità di compatibilità (funzionalità in fase di sviluppo)
- Aumenta il limite maxVertexAttributes
- Aggiornamenti sull'alba
Chrome 121
- Supporta WebGPU su Android
- Usa DXC al posto di FXC per la compilazione dello shaker su Windows
- Query con timestamp nei passaggi di computing e rendering
- Punti di ingresso predefiniti ai moduli Shar
- Supporta display-p3 come spazio colore GPUExternalTexture
- Informazioni sugli heap di memoria
- Aggiornamenti sull'alba
Chrome 120
- Supporto per valori con virgola mobile a 16 bit in WGSL
- Supera i limiti
- Modifiche allo stato Profondità dello stencil
- Aggiornamenti delle informazioni sull'adattatore
- Quantizzazione delle query con timestamp
- Funzionalità per le pulizie di primavera
Chrome 119
- Trame in virgola mobile a 32 bit filtrabili
- formato vertex unorm10-10-10-2
- Formato texture RGB 10a2uint
- Aggiornamenti sull'alba
Chrome 118
- Supporto di HTMLImageElement e ImageData in
copyExternalImageToTexture()
- Supporto sperimentale per la texture di archiviazione in lettura/scrittura e sola lettura
- Aggiornamenti sull'alba
Chrome 117
- Annulla impostazione vertex buffer
- Annulla impostazione gruppo di associazione
- Silenzia gli errori derivanti dalla creazione di pipeline asincrone in caso di smarrimento del dispositivo
- Aggiornamenti della creazione dei moduli SPIR-V Shar
- Migliorare l'esperienza degli sviluppatori
- Memorizzazione nella cache delle pipeline con layout generato automaticamente
- Aggiornamenti sull'alba
Chrome 116
- Integrazione di WebCodec
- Dispositivo smarrito restituito da GPUAdapter
requestDevice()
- Mantieni una riproduzione video fluida se viene chiamato
importExternalTexture()
- Conformità delle specifiche
- Migliorare l'esperienza degli sviluppatori
- Aggiornamenti sull'alba
Chrome 115
- Estensioni lingua WGSL supportate
- Supporto sperimentale per Direct3D 11
- Usa una GPU discreta per impostazione predefinita con alimentazione CA
- Migliorare l'esperienza degli sviluppatori
- Aggiornamenti sull'alba
Chrome 114
- Ottimizzare JavaScript
- getCurrentTexture() su canvas non configurate genera un errore InvalidStateError
- Aggiornamenti di WGSL
- Aggiornamenti sull'alba