WGSL'de 16 bit kayan nokta değerleri için destek
WGSL'de f16
türü, IEEE-754 binary16 (yarım hassasiyet) biçimindeki 16 bitlik kayan nokta değerleri kümesidir. Bu, geleneksel tek hassasiyetli kayan nokta (f32
) için 32 bit yerine kayan noktalı sayıyı temsil etmek üzere 16 bit kullanıldığı anlamına gelir. Bu daha küçük boyut, özellikle büyük miktarlarda veri işlenirken önemli performans iyileştirmelerine yol açabilir.
Karşılaştırma amacıyla, Apple M1 Pro cihazda WebLLM sohbet demosunda kullanılan Llama2 7B modellerinin f16
uygulaması, f32
uygulamasından önemli ölçüde daha hızlıdır. Aşağıdaki ekran görüntülerinde gösterildiği gibi, ön doldurma hızında% 28 ve kod çözme hızında% 41 iyileşme sağlanmıştır.
Bazı GPU'lar 16 bit kayan nokta değerlerini desteklemez. "shader-f16"
özelliği bir GPUAdapter
'ta kullanılabilir olduğunda artık bu özellikli bir GPUDevice
isteyebilir ve yarı hassas kayan nokta türü f16
'ten yararlanan bir WGSL gölgelendirici modülü oluşturabilirsiniz. Bu tür yalnızca enable f16;
ile f16
WGSL uzantısını etkinleştirirseniz WGSL gölgelendirici modülünde kullanılabilir. Aksi takdirde createShaderModule() bir doğrulama hatası oluşturur. Aşağıdaki minimal örneğe ve sayı dawn:1510'a bakın.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("shader-f16")) {
throw new Error("16-bit floating-point value support is not available");
}
// Explicitly request 16-bit floating-point value support.
const device = await adapter.requestDevice({
requiredFeatures: ["shader-f16"],
});
const code = `
enable f16;
@compute @workgroup_size(1)
fn main() {
const c : vec3h = vec3<f16>(1.0h, 2.0h, 3.0h);
}
`;
const shaderModule = device.createShaderModule({ code });
// Create a compute pipeline with this shader module
// and run the shader on the GPU...
Aşağıdaki snippet'te gösterildiği gibi "shader-f16"
özellik desteğine bağlı olarak, WGSL gölgelendirici modülü kodunda hem f16
hem de f32
türü alias
ile desteklenebilir.
const adapter = await navigator.gpu.requestAdapter();
const hasShaderF16 = adapter.features.has("shader-f16");
const device = await adapter.requestDevice({
requiredFeatures: hasShaderF16 ? ["shader-f16"] : [],
});
const header = hasShaderF16
? `enable f16;
alias min16float = f16;`
: `alias min16float = f32;`;
const code = `
${header}
@compute @workgroup_size(1)
fn main() {
const c = vec3<min16float>(1.0, 2.0, 3.0);
}
`;
Sınırları zorlayın
Tüm renk eklerinde, oluşturma ardışık düzeni çıkış verilerinin bir örneğini (piksel veya alt piksel) tutmak için gereken maksimum bayt sayısı varsayılan olarak 32 bayttır. Artık maxColorAttachmentBytesPerSample
sınırını kullanarak en fazla 64 tane istek gönderebilirsiniz. Aşağıdaki örneği ve sayı dawn:2036'ı inceleyin.
const adapter = await navigator.gpu.requestAdapter();
if (adapter.limits.maxColorAttachmentBytesPerSample < 64) {
// When the desired limit isn't supported, take action to either fall back to
// a code path that does not require the higher limit or notify the user that
// their device does not meet minimum requirements.
}
// Request highest limit of max color attachments bytes per sample.
const device = await adapter.requestDevice({
requiredLimits: { maxColorAttachmentBytesPerSample: 64 },
});
Aşamalılar arası iletişim için kullanılan maxInterStageShaderVariables
ve maxInterStageShaderComponents
sınırları tüm platformlarda artırıldı. Ayrıntılar için issues dawn:1448 sayfasına bakın.
Her gölgelendirici aşaması için, bir ardışık düzende depolama arabellekleri olan maksimum bağlama grubu düzeni girişi sayısı varsayılan olarak 8'dir. Artık maxStorageBuffersPerShaderStage
sınırını kullanarak 10'a kadar istek gönderebilirsiniz. Sorun şafak:2159 bölümünü inceleyin.
Yeni bir maxBindGroupsPlusVertexBuffers
sınırı eklendi. En yüksek dizinin altındaki boş slotlar sayılarak aynı anda kullanılan maksimum sayıdaki bağlama grubu ve köşe ucu arabellek slotlarından oluşur. Varsayılan değeri 24'tür. issue dawn:1849 konusuna bakın.
Derinlik gölgesi durumunda yapılan değişiklikler
Geliştirici deneyimini iyileştirmek için artık derinlik rengi durumu depthWriteEnabled
ve depthCompare
özellikleri her zaman gerekli değildir: depthWriteEnabled
yalnızca derinlik içeren biçimler için gereklidir ve depthCompare
, hiç kullanılmadığı takdirde derinlik içeren biçimler için gerekli değildir. Issue dawn:2132'yi inceleyin.
Adaptör bilgileri güncellemeleri
Kullanıcı chrome://flags/#enable-webgpu-developer-features
adresinde "WebGPU Geliştirici Özellikleri" işaretini etkinleştirdiğinde standart olmayan type
ve backend
adaptör bilgi özellikleri artık requestAdapterInfo() çağrıldıktan sonra kullanılabilir. type
, "ayrı GPU", "entegre GPU", "CPU" veya "bilinmeyen" olabilir. backend
, "WebGPU", "D3D11", "D3D12", "metal", "vulkan", "openGL", "openGLES" veya "null" olmalıdır. Issue dawn:2112 ve issues dawn:2107 bilgilerine bakın.
requestAdapterInfo() işlevindeki isteğe bağlı unmaskHints
liste parametresi kaldırıldı. Sorun şafak:1427 bölümünü inceleyin.
Zaman damgası sorgularının nicelenmesi
Zaman damgası sorguları, uygulamaların GPU komutlarının yürütme süresini nanosaniye hassasiyetinde ölçmesine olanak tanır. Ancak WebGPU spesifikasyonu, zamanlama saldırısı endişeleri nedeniyle zaman damgası sorgularını isteğe bağlı hale getirir. Chrome ekibi, zaman damgası sorgularını ölçmenin, çözünürlüğü 100 mikrosaniyeye düşürerek hassasiyet ve güvenlik arasında iyi bir uzlaşma sağladığına inanıyor. Issue dawn:1800'ü görün.
Kullanıcılar Chrome'da, chrome://flags/#enable-webgpu-developer-features
adresindeki "WebGPU Geliştirici Özellikleri" işaretini etkinleştirerek zaman damgası miktar belirlemeyi devre dışı bırakabilir. Bu işaretin tek başına "timestamp-query"
özelliğini etkinleştirmediğini unutmayın. Uygulanması hâlâ deneysel olduğundan, chrome://flags/#enable-unsafe-webgpu
adresinde "Güvenli Olmayan WebGPU Desteği" işaretinin kullanılması gerekir.
Dawn'da "timestamp_quantization" adlı yeni bir cihaz açma/kapatma düğmesi eklendi ve varsayılan olarak etkinleştirildi. Aşağıdaki snippet'te, bir cihaz isteğinde bulunurken zaman damgası miktar belirleme olmadan deneysel "zaman damgası-sorgu" özelliğine nasıl izin verileceği gösterilmektedir.
wgpu::DawnTogglesDescriptor deviceTogglesDesc = {};
const char* allowUnsafeApisToggle = "allow_unsafe_apis";
deviceTogglesDesc.enabledToggles = &allowUnsafeApisToggle;
deviceTogglesDesc.enabledToggleCount = 1;
const char* timestampQuantizationToggle = "timestamp_quantization";
deviceTogglesDesc.disabledToggles = ×tampQuantizationToggle;
deviceTogglesDesc.disabledToggleCount = 1;
wgpu::DeviceDescriptor desc = {.nextInChain = &deviceTogglesDesc};
// Request a device with no timestamp quantization.
myAdapter.RequestDevice(&desc, myCallback, myUserData);
Bahar temizliği özellikleri
Deneysel "timestamp-query-inside-passes" özelliği, geliştiricilere bu özelliğin deneysel olduğunu ve şu anda yalnızca Chromium tabanlı tarayıcılarda kullanılabildiğini açıkça belirtmek için "chromium-experimental-timestamp-query-inside-passes" olarak yeniden adlandırıldı. Sorun şafak:1193 bölümünü inceleyin.
Yalnızca kısmen uygulanmış olan deneysel "pipeline-statistics-query" özelliği, artık geliştirilmediği için kaldırıldı. chromium:1177506 numaralı soruna 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 temel öğeleri derinlik sapmasına sahip olmamalıdır
- Alt gruplar için kapsayıcı tarama yerleşik işlevleri
- Çoklu çizim için dolaylı destek
- Gölgelendirici 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ı ayarlama özelliğini kullanımdan kaldırma
- 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 sürümü
Chrome 124 sürümü
- Salt okunur ve okuma-yazma depolama dokuları
- Service Worker'lar ve paylaşılan çalışan desteği
- Yeni adaptör bilgileri ö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 referanslarını kaldırmak için söz dizimi
- Şablon ve derinlik özellikleri için ayrı salt okunur durum
- Gün doğumu 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üllerine varsayılan giriş noktaları
- display-p3'ü GPUExternalTexture renk alanı olarak destekle
- Bellek yığınları bilgileri
- Dawn güncellemeleri
Chrome 120
- WGSL'de 16 bitlik kayan nokta değerleri için destek
- Sınırları zorlayın
- Derinlik şablonu durumunda yapılan 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
- Gün doğumu güncellemeleri
Chrome 117 sürümü
- Köşe arabelleğini ayarlama
- 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ğlayın- 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ış tuvalde bulunangetCurrentTexture() işlemi InvalidStateError hatası veriyor
- WGSL ile ilgili güncellemeler
- Dawn güncellemeleri