WGSL'de DP4a yerleşik işlev desteği
DP4a (4 Öğenin Nokta Çarpımı ve Toplama), derin öğrenme çıkarımında nicemleme için yaygın olarak kullanılan bir dizi GPU talimatını ifade eder. Bu tür int8-nicelendirilmiş modellerin hesaplanmasını hızlandırmak için 8 bitlik tam sayı nokta çarpımlarını verimli bir şekilde gerçekleştirir. Bellek ve ağ bant genişliğinin %75'e kadar tasarruf edilmesini sağlayabilir ve çıkarım aşamasındaki tüm makine öğrenimi modellerinin performansını f32 sürümüne kıyasla iyileştirebilir. Bu nedenle, artık birçok popüler yapay zeka çerçevesinde yoğun olarak kullanılmaktadır.
navigator.gpu.wgslLanguageFeatures
içinde "packed_4x8_integer_dot_product"
WGSL dil uzantısı bulunduğ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ıların paketlenmiş 4 bileşenli vektörleriyle paketleme ve paket açma talimatlarını da kullanabilirsiniz.
WGSL gölgelendirici kodunuzun en üstünde requires packed_4x8_integer_dot_product;
ile taşınabilirlik dışı olma olasılığını belirtmek için requires-directive kullanmanız önerilir. Aşağıdaki örneğe ve tint:1497 sorununa 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 spesifikasyonun ve uygulamanın tamamlanmasını sağlayan Şanghay'daki Intel Web Grafikleri Ekibi'ne özel teşekkürlerimizi sunarız.
WGSL'de sınırsız işaretçi parametreleri
"unrestricted_pointer_parameters"
WGSL dil uzantısı, hangi işaretçilerin WGSL işlevlerine iletilebileceğiyle ilgili kısıtlamaları gevşetir:
storage
,uniform
veworkgroup
adres alanlarının kullanıcı tarafından tanımlanan işlevlere yönelik parametre işaretçileri.Kullanıcı tarafından tanımlanan işlevlere yapı üyeleri ve dizi öğeleri için işaretçiler geçirme.
Bu konu hakkında daha fazla bilgi edinmek için Pointers As Function Parameters | Tour of WGSL (İşlev Parametresi Olarak İşaretçiler | WGSL Turu) başlıklı makaleyi inceleyin.
Bu özellik, navigator.gpu.wgslLanguageFeatures
kullanılarak özellik algılama yoluyla tespit edilebilir. WGSL gölgelendirici kodunuzun en üstünde requires unrestricted_pointer_parameters;
ile taşınabilirlik dışı olma olasılığını belirtmek için her zaman bir requires-directive kullanmanız önerilir. Aşağıdaki örneğe, WGSL spesifikasyonundaki değişikliklere ve issue tint:2053'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 bileşikleri referanssızlaştırmak için söz dizimi kolaylığı
navigator.gpu.wgslLanguageFeatures
içinde "pointer_composite_access"
WGSL dil uzantısı bulunduğunda, WGSL gölgelendirici kodunuz artık verilerle doğrudan veya verilerin işaretçisiyle çalışıyor olmanızdan bağımsız olarak aynı nokta (.
) söz dizimini kullanarak karmaşık veri türlerinin bileşenlerine erişimi destekliyor. İşleyiş şekli:
foo
bir işaretçiyse:foo.bar
,(*foo).bar
yazmanın daha kolay bir yoludur. Normalde işaretçiyi, referansı kaldırılabilen bir "referans"a dönüştürmek için yıldız işareti (*
) gerekirdi 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 şekilde çalışır.
Benzer şekilde, pa
bir dizinin başlangıç adresini depolayan bir işaretçiyse pa[i]
kullanıldığında bu dizinin 'i
. öğesinin depolandığı bellek konumuna doğrudan erişebilirsiniz.
WGSL gölgelendirici kodunuzun en üstünde requires pointer_composite_access;
ile taşınabilirlik dışı olma olasılığını belirtmek için requires-directive kullanmanız önerilir. Aşağıdaki örneğe ve sorun tonuna:2113 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 yönleri için ayrı salt okunur durum
Daha önce, oluşturma geçişlerindeki salt okunur derinlik-şablon eklerinin her iki yönünün (derinlik ve şablon) de salt okunur olması gerekiyordu. Bu sınırlama kaldırıldı. Artık şablon arabelleği, daha fazla işleme için pikselleri tanımlamak üzere yazılırken derinlik yönünü salt okunur şekilde (ör. temas gölgesi izleme için) kullanabilirsiniz. dawn:2146 numaralı soruna bakın.
Dawn güncellemeleri
wgpuDeviceSetUncapturedErrorCallback()
ile ayarlanan yakalanmamış hata geri çağırması, hata oluştuğunda artık hemen çağrılıyor. Geliştiriciler, hata ayıklama için sürekli olarak bunu bekler ve ister. change dawn:173620 başlıklı makaleyi inceleyin.
webgpu.h API'sindeki wgpuSurfaceGetPreferredFormat()
yöntemi uygulandı. issue dawn:1362 başlıklı makaleyi inceleyin.
Bu özet yalnızca önemli noktalardan bazılarını kapsar. Kapsamlı commit listesine göz atın.
WebGPU'daki yenilikler
WebGPU'daki Yenilikler serisinde ele alınan her şeyin listesi.
Chrome 140
- Cihaz istekleri adaptörü tüketiyor
- Doku görünümünün kullanıldığı yerlerde doku kullanmak için kısa yol
- WGSL textureSampleLevel, 1 boyutlu dokuları destekler
- bgra8unorm salt okunur depolama dokusu kullanımını kullanımdan kaldırma
- GPUAdapter isFallbackAdapter özelliğini kaldırın
- Dawn ile ilgili güncellemeler
Chrome 139
- BC ve ASTC sıkıştırılmış biçimleri için 3D doku desteği
- Yeni "temel özellikler ve sınırlar" özelliği
- WebGPU uyumluluk modu için kaynak denemesi
- Dawn ile ilgili güncellemeler
Chrome 138
- Arabellek bağlama kaynağı olarak kullanma için kısa yol
- Oluşturma sırasında eşlenen arabellekler için boyut şartı değişiklikleri
- Yakın tarihli GPU'lar için mimari raporu
- GPUAdapter isFallbackAdapter özelliğinin desteğini sonlandırma
- Dawn ile ilgili güncellemeler
Chrome 137
- externalTexture bağlama için doku görünümünü kullanma
- Arabellekler, ofset ve boyut belirtilmeden kopyalanıyor
- Atomik işaretçi kullanarak WGSL workgroupUniformLoad
- GPUAdapterInfo powerPreference özelliği
- GPURequestAdapterOptions compatibilityMode özelliğini kaldırma
- Dawn ile ilgili güncellemeler
Chrome 136
- GPUAdapterInfo isFallbackAdapter özelliği
- D3D12'de gölgelendirici derleme süresinde iyileştirmeler
- Kanvas görüntülerini kaydetme ve kopyalama
- Artış uyumluluk modu kısıtlamaları
- Dawn ile ilgili güncellemeler
Chrome 135
- Boş bağlama grubu düzeniyle işlem hattı düzeni oluşturmaya izin ver
- Görüntü alanlarının, oluşturma hedefi sınırlarının ötesine geçmesine izin ver
- Android'de deneysel uyumluluk moduna daha kolay erişim
- maxInterStageShaderComponents sınırını kaldırma
- Dawn ile ilgili güncellemeler
Chrome 134
- Alt gruplarla makine öğrenimi iş yüklerini iyileştirme
- Karıştırılabilir olarak kayan filtrelenebilir doku türleri desteğini kaldırma
- Dawn ile ilgili güncellemeler
Chrome 133
- Ek unorm8x4-bgra ve 1 bileşenli köşe biçimleri
- Bilinmeyen sınırların tanımlanmamış değerle istenmesine izin ver
- WGSL hizalama kurallarındaki değişiklikler
- Silme işlemiyle WGSL performansında artış
- Harici dokular için VideoFrame displaySize'ı kullanma
- copyExternalImageToTexture kullanarak varsayılan olmayan yönlere sahip resimleri işleme
- Geliştirici deneyimini iyileştirme
- featureLevel ile uyumluluk modunu etkinleştirme
- Deneysel alt grup özelliklerinde temizleme
- maxInterStageShaderComponents sınırının desteğini sonlandırma
- Dawn ile ilgili güncellemeler
Chrome 132
- Doku görünümü kullanımı
- 32 bit kayan noktalı doku karıştırma
- GPUDevice adapterInfo özelliği
- Geçersiz biçimdeki tuval bağlamını yapılandırma JavaScript hatası veriyor
- Doku üzerinde filtreleme örnekleyici kısıtlamaları
- Genişletilmiş alt grup denemesi
- Geliştirici deneyimini iyileştirme
- 16 bit normalleştirilmiş doku biçimleri için deneysel destek
- Dawn ile ilgili güncellemeler
Chrome 131
- WGSL'de kırpma mesafeleri
- GPUCanvasContext getConfiguration()
- Nokta ve çizgi temel öğelerinde derinlik önyargısı olmamalıdır
- Alt gruplar için kapsayıcı tarama yerleşik işlevleri
- Çoklu çekme dolaylı desteği (deneysel)
- Shader modülü derleme seçeneği strict math
- GPUAdapter requestAdapterInfo() yöntemini kaldırın
- Dawn ile ilgili güncellemeler
Chrome 130
- Çift kaynaklı karıştırma
- Metal'de gölgelendirici derleme süresinde iyileştirmeler
- GPUAdapter requestAdapterInfo() yönteminin desteğinin sonlandırılması
- Dawn ile ilgili güncellemeler
Chrome 129
Chrome 128
- Alt gruplarla deneme yapma
- Çizgiler ve noktalar için derinlik önyargısı ayarını kullanımdan kaldırma
- preventDefault kullanılıyorsa yakalanmamış hata DevTools uyarısını gizleme
- WGSL, önce örneklemeyi enterpolasyon yapar ve ardından
- Dawn ile ilgili güncellemeler
Chrome 127
- Android'de OpenGL ES için deneysel destek
- GPUAdapter info özelliği
- WebAssembly birlikte çalışabilirlik iyileştirmeleri
- Komut kodlayıcı hatalarında iyileştirme
- Dawn ile ilgili güncellemeler
Chrome 126
- maxTextureArrayLayers sınırını artırma
- Vulkan arka ucu için arabellek yükleme optimizasyonu
- Gölgeleyici derleme süresinde iyileştirmeler
- Gönderilen komut arabellekleri benzersiz olmalıdır
- Dawn ile ilgili güncellemeler
Chrome 125
- Alt gruplar (geliştirme aşamasında olan bir özellik)
- 3D dokunun dilimine göre oluşturma
- Dawn ile ilgili güncellemeler
Chrome 124
- Salt okunur ve okuma-yazma depolama dokuları
- Service worker'lar ve shared worker'lar için destek
- Yeni bağdaştırıcı bilgisi ö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 bileşikleri referanssızlaştırmak için sözdizimi kolaylığı
- Şablon ve derinlik yönleri için ayrı salt okunur durum
- Dawn ile ilgili güncellemeler
Chrome 122
- Uyumluluk moduyla erişimi genişletme (geliştirme aşamasında olan bir özellik)
- maxVertexAttributes sınırını artırma
- Dawn ile ilgili güncellemeler
Chrome 121
- Android'de WebGPU'yu destekleme
- Windows'da gölgelendirici derleme için FXC yerine DXC kullanma
- İşleme ve oluşturma geçişlerindeki zaman damgalı sorgular
- Shader modüllerine varsayılan giriş noktaları
- GPUExternalTexture renk alanı olarak display-p3'ü destekleme
- Bellek yığınları bilgileri
- Dawn ile ilgili güncellemeler
Chrome 120
- WGSL'de 16 bitlik kayan nokta değerleri için destek
- Sınırları zorlayın
- Derinlik-şablon durumundaki değişiklikler
- Adaptör bilgisi güncellemeleri
- Zaman damgası sorgularının nicemleme işlemi
- Bahar temizliği özellikleri
Chrome 119
- Filtrelenebilir 32 bit kayan noktalı dokular
- unorm10-10-10-2 köşe biçimi
- rgb10a2uint doku biçimi
- Dawn ile ilgili güncellemeler
Chrome 118
copyExternalImageToTexture()
içinde HTMLImageElement ve ImageData desteği- Okuma/yazma ve salt okuma depolama dokusu için deneysel destek
- Dawn ile ilgili güncellemeler
Chrome 117
- Köşe arabelleğini ayarlamayı kaldırma
- Bağlama grubunu kaldırma
- Cihaz kaybolduğunda eşzamansız işlem hattı oluşturma işleminden kaynaklanan hataları sessize alma
- SPIR-V gölgelendirici modülü oluşturma güncellemeleri
- Geliştirici deneyimini iyileştirme
- Otomatik olarak oluşturulan düzene sahip işlem hatlarını önbelleğe alma
- Dawn ile ilgili güncellemeler
Chrome 116
- WebCodecs entegrasyonu
- GPUAdapter
requestDevice()
tarafından döndürülen kayıp cihaz importExternalTexture()
aranırsa video oynatmayı sorunsuz tutma- Spesifikasyona uygunluk
- 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üçte varsayılan olarak ayrı GPU kullanma
- Geliştirici deneyimini iyileştirme
- Dawn ile ilgili güncellemeler
Chrome 114
- JavaScript'i optimize etme
- Yapılandırılmamış tuvalde getCurrentTexture() işlevi InvalidStateError hatası veriyor
- WGSL güncellemeleri
- Dawn ile ilgili güncellemeler