Supporto delle funzioni integrate DP4a in WGSL
DP4a (Dot Product of 4 Elements and Accumulate) si riferisce a un insieme di istruzioni GPU comunemente utilizzate nell'inferenza di deep learning per la quantizzazione. Esegue in modo efficiente prodotti punti con numeri interi a 8 bit per accelerare il calcolo di questi modelli quantizzati int8. Può risparmiare (fino al 75%) la memoria e la larghezza di banda di rete e migliorare le prestazioni di qualsiasi modello di machine learning nell'inferenza rispetto alla versione f32. Di conseguenza, viene molto utilizzata all'interno di molti framework di IA popolari.
Quando l'estensione della lingua WGSL "packed_4x8_integer_dot_product"
è presente in navigator.gpu.wgslLanguageFeatures
, ora puoi usare scalari interi a 32 bit che impacchettano vettori a 4 componenti di numeri interi a 8 bit come input per le istruzioni del prodotto scalare nel codice dello smoother WGSL con le funzioni integrate dot4U8Packed
e dot4I8Packed
. Puoi anche utilizzare le istruzioni di imballaggio 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 integrate.
Ti consigliamo di utilizzare un'istruzione richiede-indica per segnalare il potenziale di non portabilità con requires packed_4x8_integer_dot_product;
nella parte superiore del codice dello strumento di Shader WGSL. Vedi l'esempio seguente e tinta del problema: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 di Web Graphics di Intel a Shanghai per aver completato queste specifiche e implementando queste specifiche!
Parametri puntatore senza limitazioni in WGSL
L'estensione di lingua WGSL "unrestricted_pointer_parameters"
allenta le limitazioni su quali puntatori possono essere trasferiti alle funzioni WGSL:
Puntatori dei parametri degli spazi di indirizzi
storage
,uniform
eworkgroup
alle funzioni dichiarate dall'utente.Passare puntatori ai membri della struttura e agli elementi dell'array alle funzioni dichiarate dall'utente.
Per saperne di più, consulta Pointers As Function Parameters | Tour di WGSL.
È possibile rilevare questa funzionalità utilizzando navigator.gpu.wgslLanguageFeatures
. Si consiglia di utilizzare sempre un'istruzione richiede-istruzione per segnalare il potenziale di non portabilità con requires unrestricted_pointer_parameters;
nella parte superiore del codice dello strumento di Shader WGSL. Vedi nell'esempio che segue, le modifiche alle specifiche di WGSL e la tintura del problema: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 della sintassi per il deriferimento dei compositi in WGSL
Quando l'estensione per la lingua WGSL "pointer_composite_access"
è presente in navigator.gpu.wgslLanguageFeatures
, il codice Shader WGSL ora supporta l'accesso ai componenti di tipi di dati complessi con la stessa sintassi con il punto (.
), a prescindere 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ù comodo per scrivere(*foo).bar
. L'asterisco (*
) è normalmente necessario per trasformare il puntatore in un "riferimento" che può essere dereferenziato, ma ora puntatori e riferimenti sono molto più simili e quasi intercambiabili.Se
foo
non è un puntatore: il punto (.
) funziona esattamente come fai di solito per accedere direttamente ai membri.
Allo stesso modo, 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 richiede-indica per segnalare il potenziale di non portabilità con requires pointer_composite_access;
nella parte superiore del codice dello strumento di Shader WGSL. Vedi l'esempio seguente e tinta del problema: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 aspetti stencil e di profondità
In precedenza, gli allegati di stencil di profondità di sola lettura nei passaggi di rendering richiedevano che entrambi gli aspetti (profondità e stencil) fossero di sola lettura. Questa limitazione è stata rimossa. Ora puoi utilizzare l'aspetto della profondità in sola lettura, ad esempio per il tracciamento delle ombre dei contatti, mentre il buffer dello stencil viene scritto per identificare i pixel per un'ulteriore elaborazione. Vedi issue dawn:2146.
Aggiornamenti da Dawn
Il callback di errore non acquisito impostato con wgpuDeviceSetUncapturedErrorCallback()
viene ora chiamato immediatamente quando si verifica l'errore. È 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.
Vengono trattati 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 125
- Sottogruppi (funzionalità in fase di sviluppo)
- Eseguire il rendering su una fetta di texture 3D
- Aggiornamenti dell'alba
Chrome 124
- Texture di archiviazione di sola lettura e lettura/scrittura
- Assistenza per i Service worker e i worker condivisi
- Nuovi attributi delle informazioni sull'adattatore
- Correzioni di bug
- Aggiornamenti dell'alba
Chrome 123
- Supporto delle funzioni integrate DP4a in WGSL
- Parametri puntatore senza limitazioni in WGSL
- zucchero della sintassi per dereferenziare i compositi in WGSL
- Stato di sola lettura separato per aspetti stencil e di profondità
- Aggiornamenti dell'alba
Chrome 122
- Espandi la copertura con la modalità di compatibilità (funzionalità in fase di sviluppo)
- Aumenta il limite maxVertexAttributes
- Aggiornamenti dell'alba
Guida introduttiva di Chrome
- Supporto di WebGPU su Android
- Usare DXC anziché FXC per la compilazione dello Shader su Windows
- Query di timestamp nelle tessere di calcolo e rendering
- Punti di contatto predefiniti per i moduli Shadr
- Supporto display-p3 come spazio colore GPUExternalTexture
- Informazioni sui heap di memoria
- Aggiornamenti dell'alba
Chrome 120
- Supporto per valori in virgola mobile a 16 bit in WGSL
- Supera i limiti
- Modifiche allo stato dello stencil di profondità
- Aggiornamenti alle informazioni sull'alimentatore
- Quantizzazione delle query dei timestamp
- Funzionalità per le pulizie di primavera
Chrome 119
- Trame fluttuanti a 32 bit filtrabili
- formato unorm10-10-10-2 vertex
- Formato trama Memcache10a2uint
- Aggiornamenti dell'alba
Chrome 118
- Supporto di HTMLImageElement e ImageData in
copyExternalImageToTexture()
- Supporto sperimentale per la texture di archiviazione in lettura/scrittura e in sola lettura
- Aggiornamenti dell'alba
Chrome 117
- Impostazione del buffer del vertex non impostata
- Annulla impostazione gruppo di associazione
- Silenziare gli errori della creazione di pipeline asincrone in caso di perdita del dispositivo
- Aggiornamenti alla creazione del modulo shabby di SPIR-V
- Migliorare l'esperienza degli sviluppatori
- Memorizzazione nella cache delle pipeline con il layout generato automaticamente
- Aggiornamenti dell'alba
Chrome 116
- Integrazione di WebCodecs
- Dispositivo smarrito restituito da GPUAdapter
requestDevice()
- Mantieni la riproduzione video fluida se viene chiamato
importExternalTexture()
- Conformità alle specifiche
- Migliorare l'esperienza degli sviluppatori
- Aggiornamenti dell'alba
Versione 115 di Chrome
- Estensioni in lingua WGSL supportate
- Supporto sperimentale per Direct3D 11
- Ricevi una GPU discreta per impostazione predefinita tramite alimentazione CA
- Migliorare l'esperienza degli sviluppatori
- Aggiornamenti dell'alba
Chrome 114
- Ottimizzare JavaScript
- getCurrentTexture() su canvas non configurati genera InvalidStateError
- Aggiornamenti di WGSL
- Aggiornamenti dell'alba