WGSL'de DP4a yerleşik işlev desteği
DP4a (4 Öğenin Nokta Çarpımı ve Toplama), kesme işlemi için derin öğrenme çıkarımlarında yaygın olarak kullanılan bir GPU talimatı grubunu ifade eder. Bu tür int8 kesirli modellerin hesaplamasını hızlandırmak için 8 bit tam sayı nokta çarpımlarını verimli bir şekilde gerçekleştirir. Bu özellik, bellek ve ağ bant genişliğinden (%75'e varan oranda) tasarruf sağlayabilir ve tüm makine öğrenimi modellerinin performansını, f32 sürümlerine kıyasla çıkarım yaparken iyileştirebilir. Bu nedenle, yapay zeka artık birçok popüler yapay zeka çerçevesinde yoğun olarak kullanılmaktadır.
navigator.gpu.wgslLanguageFeatures
sürümünde "packed_4x8_integer_dot_product"
WGSL dil uzantısı mevcut olduğunda artık dot4U8Packed
ve dot4I8Packed
yerleşik işlevleriyle WGSL gölgelendirici kodunuzdaki nokta çarpımı talimatlarına giriş olarak 8 bitlik tam sayılardan oluşan 4 bileşenli vektörleri paketleyen 32 bitlik tam sayı skalerlerini kullanabilirsiniz. Ayrıca pack4xI8
, pack4xU8
, pack4xI8Clamp
, pack4xU8Clamp
, unpack4xI8
ve unpack4xU8
WGSL yerleşik işlevleriyle 8 bitlik tam sayılardan oluşan paketlenmiş 4 bileşenli vektörlerle paketleme ve paket açma talimatlarını da kullanabilirsiniz.
WGSL gölgelendirici kodunuzun en üstünde requires packed_4x8_integer_dot_product;
ile birlikte taşınabilirlik olmaması olasılığını belirtmek için bir requires-directive kullanılması önerilir. Aşağıdaki örneğe ve issue tint:1497 değerine 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ı tamamlama konusundaki çalışmaları için Intel'in Şanghay'daki Web Grafikleri Ekibi'ne özel olarak teşekkür ederiz.
WGSL'de sınırsız işaretçi parametreleri
"unrestricted_pointer_parameters"
WGSL dil uzantısı, WGSL işlevlerine hangi işaretçilerin iletilebileceğiyle ilgili kısıtlamaları gevşetmektedir:
storage
,uniform
veworkgroup
parametre işaretçileri, kullanıcı tarafından tanımlanan işlevlerin alanlarını adresler.Kullanıcı tarafından tanımlanan işlevlere yapı üyelerine ve dizi öğelerine işaretçiler gönderme.
Bu konu hakkında daha fazla bilgi edinmek için İşlev Parametreleri Olarak İşaretçi Kullanımı | WGSL Turu başlıklı makaleyi inceleyin.
Bu özellik, navigator.gpu.wgslLanguageFeatures
kullanılarak özellik tarafından algılanabilir. WGSL gölgelendirici kodunuzun üst kısmındaki requires unrestricted_pointer_parameters;
ile taşınabilirlik potansiyelini belirtmek için her zaman bir requires-directive yönergesi kullanmanız önerilir. Aşağıdaki örneğe, WGSL spesifikasyonu değişikliklerine ve issue tint:2053 değerine 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 bileşimlerin referanslarını kaldırmak için söz dizimi şekeri
navigator.gpu.wgslLanguageFeatures
sürümünde "pointer_composite_access"
WGSL dil uzantısı mevcut olduğunda WGSL gölgelendirici kodunuz artık doğrudan verilerle veya bir veri işaretçisiyle çalışıyor olsanız da aynı nokta (.
) söz dizimini kullanarak karmaşık veri türlerinin bileşenlerine erişimi destekler. İşleyiş şekli:
foo
işaretçiyse:foo.bar
,(*foo).bar
yazmanın daha uygun bir yoludur. İşaretçiyi, referansı kaldırılabilen bir "referans"a dönüştürmek için normalde yıldız işareti (*
) gerekir. 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ıştığınız gibi çalışır.
Benzer şekilde, pa
bir dizinin başlangıç adresini depolayan bir işaretçiyse pa[i]
kullanılması, bu dizinin 'i
'inci öğesinin depolandığı bellek konumuna doğrudan erişim sağlar.
WGSL gölgelendirici kodunuzun en üstünde requires pointer_composite_access;
ile birlikte taşınabilirlik olmaması olasılığını belirtmek için bir requires-directive kullanılması önerilir. Aşağıdaki örneği ve issue tint:2113 değerini inceleyin.
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-maske ekleri için her iki yönü de (derinlik ve maske) salt okunur olması gerekiyordu. Bu sınırlama kaldırıldı. Artık derinlik boyutunu salt okunur olarak kullanabilirsiniz (ör. temas gölgesi izleme için). Bu sırada şablon arabelleği, daha fazla işleme alınacak pikselleri tanımlamak için yazılır. issue dawn:2146 konusuna bakın.
Şafak güncellemeleri
wgpuDeviceSetUncapturedErrorCallback()
ile ayarlanan yakalanmayan hata geri çağırma işlevi artık hata oluştuğunda hemen çağrılıyor. Geliştiricilerin sürekli olarak hata ayıklamayı beklediği ve istedikleri şey budur. change dawn:173620 adresine bakın.
webgpu.h API'deki wgpuSurfaceGetPreferredFormat()
yöntemi uygulandı. issue dawn:1362 konusuna bakın.
Bu, önemli noktalardan yalnızca bazılarını kapsar. Kapsamlı commit listesine göz atın.
WebGPU'daki Yenilikler
WebGPU'daki Yenilikler serisinde ele alınan tüm konuların listesi.
Chrome 131
- Mesafeleri WGSL'de kırp
- GPUCanvasContext getConfiguration()
- Nokta ve çizgi primitiflerinde derinlik önyargısı olmamalıdır
- Alt gruplar için kapsayıcı tarama yerleşik işlevleri
- Çoklu çizim için deneysel destek
- Shader modülü derleme seçeneği katı matematik
- GPUAdapter requestAdapterInfo() işlevini kaldırma
- Dawn güncellemeleri
Chrome 130
- Çift kaynak karıştırma
- Metal'de gölgelendirici derleme süresiyle ilgili iyileştirmeler
- GPUAdapter requestAdapterInfo() desteğinin sonlandırılması
- Dawn güncellemeleri
Chrome 129 sürümü
Chrome 128
- Alt gruplarla deneme yapma
- Çizgiler ve noktalar için derinlik önyargısı ayarının desteği sonlandırıldı
- preventDefault ise yakalanmayan hata DevTools uyarısını gizleme
- WGSL, önce örneklemeyi enterpolasyona tabi tutar ve ardından
- Dawn güncellemeleri
Chrome 127 sürümü
- Android'de OpenGL ES için deneysel destek
- GPUAdapter bilgi özelliği
- WebAssembly birlikte çalışabilirlik iyileştirmeleri
- İyileştirilmiş komut kodlayıcı hataları
- Dawn güncellemeleri
Chrome 126
- maxTextureArrayLayers sınırını artırma
- Vulkan arka uç için arabellek yükleme optimizasyonu
- Gölgelendirme derleme zamanı iyileştirmeleri
- Gönderilen komut arabellekleri benzersiz olmalıdır
- Dawn güncellemeleri
Chrome 125
Chrome 124 sürümü
- Salt okunur ve okuma-yazma depolama dokuları
- Hizmet çalışanları ve paylaşılan çalışanlar desteği
- Yeni bağdaştırıcı bilgi özellikleri
- Hata düzeltmeleri
- Gün doğumu güncellemeleri
Chrome 123
- WGSL'de DP4a yerleşik işlevleri desteği
- WGSL'de sınırsız işaretçi parametreleri
- WGSL'de bileşimlerin referansını kaldırmak için söz dizimi
- Şablon ve derinlik özellikleri için ayrı salt okunur durum
- Dawn güncellemeleri
Chrome 122
- Uyumluluk moduyla erişimi genişletme (geliştirme aşamasındaki özellik)
- maxVertexAttributes sınırını artırma
- Dawn güncellemeleri
Chrome 121
- Android'de WebGPU desteği
- Windows'da gölgelendirici derlemesi için FXC yerine DXC'yi kullanın
- İşleme ve oluşturma geçişlerinde zaman damgası sorguları
- Gölgelendirici modüllerinin varsayılan giriş noktaları
- display-p3'ü GPUExternalTexture renk alanı olarak destekle
- Bellek yığını bilgileri
- Dawn güncellemeleri
Chrome 120
- WGSL'de 16 bit kayan nokta değerleri desteği
- Sınırları zorlayın
- Derinlik-gölge durumuyla ilgili değişiklikler
- Adaptör bilgileri güncellemeleri
- Zaman damgası sorgularının kesirli sayılara dönüştürülmesi
- Bahar temizliği özellikleri
Chrome 119 sürümü
- Filtrelenebilir 32 bit kayan dokular
- unorm10-10-10-2 köşe noktası biçimi
- rgb10a2uint doku biçimi
- Dawn güncellemeleri
Chrome 118 sürümü
copyExternalImageToTexture()
'te HTMLImageElement ve ImageData desteği- Okunma-yazma ve salt okunur depolama dokusu için deneysel destek
- Dawn güncellemeleri
Chrome 117 sürümü
- Köşe noktası arabelleğinin ayarını kaldırma
- Bağlama grubunun ayarını kaldır
- Cihaz kaybolduğunda eşzamansız ardışık düzen oluşturma işlemlerinden kaynaklanan hataları yoksayma
- 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 güncellemeleri
Chrome 116
- WebCodecs entegrasyonu
- Kayıp cihaz, GPUAdapter
requestDevice()
tarafından döndürüldü importExternalTexture()
çağrılırsa video oynatmanın sorunsuz olmasını sağlama- Spesifikasyona uygunluk
- Geliştirici deneyimini iyileştirme
- Gün doğumu güncellemeleri
Chrome 115 sürümü
- Desteklenen WGSL dil uzantıları
- Direct3D 11 için deneysel destek
- AC güç kaynağında varsayılan olarak ayrı GPU'yu etkinleştirme
- Geliştirici deneyimini iyileştirme
- Dawn güncellemeleri
Chrome 114
- JavaScript'i optimize edin
- Yapılandırılmamış kanvasta getCurrentTexture() InvalidStateError hatası veriyor
- WGSL ile ilgili güncellemeler
- Dawn güncellemeleri
Chrome 113
importExternalTexture()
dosyasında WebCodecs VideoFrame kaynağını kullanma