WGSL'de DP4a yerleşik işlevleri desteği
DP4a (4 Öğe ve Biriktirme Noktalı Ürün), niceleme için derin öğrenme çıkarımında yaygın olarak kullanılan bir dizi GPU talimatını ifade eder. 8 bitlik tam sayı nokta ürünleri ile bu tür int8 nicelenmiş modellerin daha hızlı hesaplanması için verimli bir şekilde çalışır. Bellek ve ağ bant genişliğinden (%75'e kadar) tasarruf edebilir ve çıkarımdaki tüm makine öğrenimi modellerinin performansını f32 sürümlerine kıyasla iyileştirebilir. Sonuç olarak, artık birçok popüler yapay zeka çerçevesinde yaygın olarak kullanılmaktadır.
navigator.gpu.wgslLanguageFeatures
konumunda "packed_4x8_integer_dot_product"
WGSL dil uzantısı mevcut olduğunda, yerleşik dot4U8Packed
ve dot4I8Packed
işlevleriyle WGSL gölgelendirici kodunuzdaki nokta ürün talimatlarına giriş olarak, 8 bitlik tam sayılardan oluşan 4 bileşenli vektörleri paketleyen 32 bit tam sayı skalerleri kullanabilirsiniz. Paketleme ve açma talimatlarını pack4xI8
, pack4xU8
, pack4xI8Clamp
, pack4xU8Clamp
, unpack4xI8
ve unpack4xU8
WGSL yerleşik işlevlerine sahip 8 bit tam sayılardan oluşan paketlenmiş 4 bileşenli vektörlerle de kullanabilirsiniz.
Taşınabilirlik potansiyelini belirtmek için WGSL gölgelendirici kodunuzun en üstünde requires packed_4x8_integer_dot_product;
ile bir requires-directive yönergesini kullanmanız önerilir. Aşağıdaki örneğe ve issue tint:1497'ye bakın.
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
}`,
});
Bu spesifikasyonu ve uygulamayı tamamladığı için Intel'in Şangay'daki Web Grafikleri ekibine özel teşekkür ederiz!
WGSL'de kısıtlanmamış işaretçi parametreleri
"unrestricted_pointer_parameters"
WGSL dil uzantısı, WGSL işlevlerine hangi işaretçilerin aktarılabileceğiyle ilgili kısıtlamaları gevşetir:
storage
,uniform
veworkgroup
parametre işaretçileri, kullanıcı tarafından bildirilen işlevlere yönelik boşlukları gider.Üyeleri ve dizi öğelerini kullanıcı tarafından bildirilen işlevlere yapılandırmak için işaretçiler iletme.
Bu özellik hakkında daha fazla bilgi edinmek için İşlev Parametreleri Olarak İşaretçiler | WGSL Turu'na göz atın.
Bu özellik, navigator.gpu.wgslLanguageFeatures
kullanılarak algılanabilir. Taşınabilirlik potansiyelini belirtmek için her zaman WGSL gölgeleyici kodunuzun en üstünde requires unrestricted_pointer_parameters;
ile bir requires-directive yönergesini kullanmanız önerilir. WGSL spesifikasyon değişiklikleri ve sorun tonu:2053 adlı aşağıdaki örneğe bakın.
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);
}`
});
WGSL'de kompozitlerin referansını kaldırmak için söz dizimi şeker
navigator.gpu.wgslLanguageFeatures
içinde "pointer_composite_access"
WGSL dil uzantısı mevcut olduğunda, WGSL gölgelendirici kodunuz artık verilerle doğrudan veya işaretçi kullanarak çalışın, aynı nokta (.
) söz dizimini kullanan karmaşık veri türlerindeki bileşenlere erişimi desteklemektedir. İşleyiş şekli:
foo
bir işaretçiyse:foo.bar
,(*foo).bar
yazmanın daha kolay bir yoludur. Normalde yıldız işareti (*
) işaretçiyi, referansı gösterilebilecek bir "referansa" dönüştürmek için gereklidir. Ancak artık hem işaretçiler hem de referanslar çok daha benzer ve neredeyse birbirinin yerine kullanılabilir.foo
bir işaretçi değilse: Nokta (.
) operatörü, üyelere doğrudan erişmek için alışkın olduğunuz şekilde çalışır.
Benzer şekilde, pa
bir dizinin başlangıç adresini depolayan bir işaretçiyse pa[i]
işlevini kullanmak, dizinin 'i
'inci öğesinin depolandığı bellek konumuna doğrudan erişim sağlar.
Taşınabilirlik potansiyelini belirtmek için WGSL gölgelendirici kodunuzun en üstünde requires pointer_composite_access;
ile bir requires-directive yönergesini kullanmanız önerilir. Aşağıdaki örneğe ve issue tint:2113'e bakın.
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.
}`
});
Şablon ve derinlik özellikleri için ayrı salt okuma durumu
Daha önce, oluşturma geçişlerindeki salt okunur derinlik şablon eklerinin her iki özelliğin de (derinlik ve şablon) salt okunur olması gerekiyordu. Bu sınırlama kaldırıldı. Artık derinlik özelliğini, örneğin temas gölgesi izleme için salt okunur biçimde kullanabilirsiniz. Şablon arabelleği ise ilerideki işlemler için pikselleri tanımlamak üzere yazılır. issue dawn:2146'ya bakın.
Dawn ile ilgili güncellemeler
wgpuDeviceSetUncapturedErrorCallback()
ile ayarlanan yakalanmamış hata geri çağırması artık hata oluştuğunda hemen çağrılıyor. Geliştiricilerin sürekli olarak beklediği ve hata ayıklaması istediği durum budur. change dawn:173620 bölümüne bakın.
webgpu.h API'sındaki wgpuSurfaceGetPreferredFormat()
yöntemi uygulanmıştır. issue dawn:1362'yi inceleyin.
Burada, öne çıkan özelliklerin yalnızca bir kısmı ele alınıyor. Kayıtların kapsamlı listesine göz atın.
WebGPU'daki Yenilikler
WebGPU'daki Yenilikler serisinde ele alınan her şeyin listesi.
Chrome 125
- Alt gruplar (geliştirme aşamasındaki özellik)
- 3D doku dilimi olarak oluşturma
- Dawn ile ilgili güncellemeler
Chrome 124
- Salt okuma ve okuma-yazma depolama dokuları
- Service Worker'lar ve paylaşılan çalışanlar için destek
- Yeni adaptör bilgileri özellikleri
- Hata düzeltmeleri
- Dawn ile ilgili güncellemeler
Chrome 123
- WGSL'de DP4a yerleşik işlevleri desteği
- WGSL'de kısıtlanmamış işaretçi parametreleri
- WGSL'de kompozitlerin referansını kaldırmak için söz dizimi şeker
- Şablon ve derinlik özellikleri için ayrı salt okuma durumu
- Dawn ile ilgili güncellemeler
Chrome 122
- Uyumluluk modu ile erişimi genişletme (geliştirme aşamasındaki özellik)
- maxVertexAttributes sınırını artır
- Dawn ile ilgili güncellemeler
Chrome 121
- Android'de WebGPU'yu destekleme
- Windows'da gölgelendirici derlemesi için FXC yerine DXC'yi kullanma
- İşlem ve oluşturma kartlarındaki zaman damgası sorguları
- Gölgelendirici modüllerine varsayılan giriş noktaları
- Display-p3'ü GPUExternalTexture renk alanı olarak destekleyin
- Bellek yığın bilgileri
- Dawn ile ilgili güncellemeler
Chrome 120
- WGSL'de 16 bit kayan nokta değerleri desteği
- Sınırları zorlama
- Derinlik şablonu durumunda yapılan değişiklikler
- Bağdaştırıcı bilgileriyle ilgili güncellemeler
- Zaman damgası sorgularının hesaplanması
- İlkbahar temizliği özellikleri
Chrome 119
- Filtrelenebilir 32 bit kayan dokular
- unorm10-10-10-2 köşe biçimi
- rgb10a2uint doku biçimi
- Dawn ile ilgili güncellemeler
Chrome 118
copyExternalImageToTexture()
için HTMLImageElement ve ImageData desteği- Okuma-yazma ve salt okunur depolama dokusu için deneysel destek
- Dawn ile ilgili güncellemeler
Chrome 117
- Köşe noktası arabelleği ayarını kaldır
- Bağlama grubunun ayarını kaldır
- Cihaz kaybolduğunda eşzamansız ardışık düzen oluşturma hatalarını sessize alma
- SPIR-V gölgelendirici modülü oluşturma güncellemeleri
- Geliştirici deneyimini iyileştirme
- Otomatik olarak oluşturulan düzenle ardışık düzenleri önbelleğe alma
- Dawn ile ilgili güncellemeler
Chrome 116
- WebCodecs entegrasyonu
requestDevice()
GPUAdapter tarafından döndürülen kayıp cihazimportExternalTexture()
çağrılırsa video oynatmanın sorunsuz olmasını sağlayın- Spesifikasyon uygunluğu
- Geliştirici deneyimini iyileştirme
- Dawn ile ilgili güncellemeler
Chrome 115
- Desteklenen WGSL dil uzantıları
- Direct3D 11 için deneysel destek
- AC güçle varsayılan olarak ayrı GPU'yu kullanın
- Geliştirici deneyimini iyileştirme
- Dawn ile ilgili güncellemeler
Chrome 114
- JavaScript'i optimize etme
- yapılandırılmamış tuval üzerindeki getCurrentTexture(), InvalidStateError hatası veriyor
- WGSL ile ilgili güncellemeler
- Dawn ile ilgili güncellemeler