WGSL'de DP4a yerleşik işlevleri 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. Sonuç olarak, günümüzde 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şetir:
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 algılanabilir. WGSL gölgelendirici kodunuzun en üstünde requires unrestricted_pointer_parameters;
ile birlikte taşınabilirlik olmaması olasılığını belirtmek için her zaman bir requires-directive 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 referansı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
bir 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]
'ü kullanmak, söz konusu dizinin 'i
. öğ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ğe ve issue tint:2113 değerine 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-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ştiriciler, hata ayıklama için her zaman bu tür bir deneyim bekler ve ister. 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
- WGSL'de mesafeleri kırpma
- GPUCanvasContext getConfiguration()
- Nokta ve çizgi primitiflerinde derinlik önyargısı olmamalıdır
- Alt gruplar için dahili kapsayıcı tarama işlevleri
- Çoklu çizim için deneysel destek
- Shader modülü derleme seçeneği katı matematik
- GPUAdapter requestAdapterInfo() yöntemini kaldırın
- 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
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
- Android'de OpenGL ES için deneysel destek
- GPUAdapter bilgi özelliği
- WebAssembly birlikte çalışabilirlik iyileştirmeleri
- Komut kodlayıcı hataları iyileştirildi
- Dawn güncellemeleri
Chrome 126
- maxTextureArrayLayers sınırını artırma
- Vulkan arka uç için arabellek yükleme optimizasyonu
- Gölgelendirici derleme süresiyle ilgili iyileştirmeler
- Gönderilen komut arabellekleri benzersiz olmalıdır
- Dawn güncellemeleri
Chrome 125
Chrome 124
- Salt okunur ve okuma/yazma depolama alanı dokuları
- Hizmet çalışanları ve paylaşılan çalışanlar desteği
- Yeni adaptör bilgileri özellikleri
- Hata düzeltmeleri
- Dawn 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 modu ile erişimi genişletin (geliştirme aşamasındaki özellik)
- maxVertexAttributes sınırını artırma
- Dawn güncellemeleri
Chrome 121
- Android'de WebGPU desteği
- Windows'ta gölgelendirici derleme için FXC yerine DXC kullanma
- İşleme ve oluşturma geçişlerinde zaman damgası sorguları
- Gölgelendirici modüllerinin varsayılan giriş noktaları
- GPUExternalTexture renk alanı olarak display-p3 desteği
- Bellek yığınları hakkında bilgi
- Dawn güncellemeleri
Chrome 120
- WGSL'de 16 bitlik kayan nokta değerleri için destek
- Sınırları zorlayın
- Derinlik gölgesi durumundaki 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
- Filtrelenebilir 32 bit kayan noktalı dokular
- unorm10-10-10-2 köşe noktası biçimi
- rgb10a2uint doku biçimi
- Dawn güncellemeleri
Chrome 118
copyExternalImageToTexture()
'te HTMLImageElement ve ImageData desteği- Okuma/yazma ve salt okuma depolama dokusu için deneysel destek
- Dawn güncellemeleri
Chrome 117
- Köşe noktası arabelleğinin ayarını kaldırma
- Bağlama grubunu kaldırma
- 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
- Dawn güncellemeleri
Chrome 115
- 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 etme
- 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