Dukungan fungsi bawaan DP4a di WGSL
DP4a (Dot Product of 4 Elements and Accumulate) mengacu pada serangkaian petunjuk GPU yang biasa digunakan dalam inferensi deep learning untuk kuantisasi. Model ini secara efisien melakukan produk titik bilangan bulat 8-bit untuk mempercepat komputasi model yang dikuantisasi int8 tersebut. Hal ini dapat menghemat (hingga 75%) memori dan bandwidth jaringan serta meningkatkan performa model machine learning dalam inferensi dibandingkan dengan versi f32-nya. Oleh karena itu, TensorFlow kini banyak digunakan dalam banyak framework AI populer.
Jika ekstensi bahasa WGSL "packed_4x8_integer_dot_product"
ada di navigator.gpu.wgslLanguageFeatures
, Anda kini dapat menggunakan skalar bilangan bulat 32-bit yang memaketkan vektor 4 komponen dari bilangan bulat 8-bit sebagai input ke petunjuk perkalian titik di kode shader WGSL dengan fungsi bawaan dot4U8Packed
dan dot4I8Packed
. Anda juga dapat menggunakan petunjuk pengepakan dan pemecatan dengan vektor 4 komponen yang dikemas dari bilangan bulat 8-bit dengan fungsi bawaan pack4xI8
, pack4xU8
, pack4xI8Clamp
, pack4xU8Clamp
, unpack4xI8
, dan unpack4xU8
WGSL.
Sebaiknya gunakan requires-directive untuk menandakan potensi non-portabilitas dengan requires packed_4x8_integer_dot_product;
di bagian atas kode shader WGSL Anda. Lihat contoh berikut dan issue tint:1497.
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
}`,
});
Terima kasih khusus kepada tim Web Graphics Intel di Shanghai karena telah mendorong spesifikasi dan penerapan ini hingga selesai.
Parameter pointer yang tidak dibatasi di WGSL
Ekstensi bahasa WGSL "unrestricted_pointer_parameters"
melonggarkan batasan pada pointer yang dapat diteruskan ke fungsi WGSL:
Pointer parameter ruang alamat
storage
,uniform
, danworkgroup
ke fungsi yang dideklarasikan pengguna.Meneruskan pointer ke anggota struktur dan elemen array ke fungsi yang dideklarasikan pengguna.
Lihat Pointers As Function Parameters | Tour of WGSL untuk mempelajarinya lebih lanjut.
Fitur ini dapat dideteksi menggunakan navigator.gpu.wgslLanguageFeatures
. Sebaiknya selalu gunakan requires-directive untuk menandakan potensi non-portabilitas dengan requires unrestricted_pointer_parameters;
di bagian atas kode shader WGSL Anda. Lihat contoh berikut, perubahan spesifikasi WGSL, dan masalah tint:2053.
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);
}`
});
Sintaksis yang lebih mudah untuk mendereferensikan komposit di WGSL
Jika ekstensi bahasa WGSL "pointer_composite_access"
ada di navigator.gpu.wgslLanguageFeatures
, kode shader WGSL Anda kini mendukung akses ke komponen jenis data kompleks menggunakan sintaksis titik (.
) yang sama, baik Anda bekerja langsung dengan data atau dengan pointer ke data tersebut. Berikut caranya:
Jika
foo
adalah pointer:foo.bar
adalah cara yang lebih praktis untuk menulis(*foo).bar
. Tanda bintang (*
) biasanya diperlukan untuk mengubah pointer menjadi "referensi" yang dapat didereferensikan, tetapi sekarang pointer dan referensi jauh lebih mirip dan hampir dapat dipertukarkan.Jika
foo
bukan pointer: Operator titik (.
) berfungsi persis seperti yang biasa Anda gunakan untuk mengakses anggota secara langsung.
Demikian pula, jika pa
adalah pointer yang menyimpan alamat awal array, penggunaan pa[i]
akan memberi Anda akses langsung ke lokasi memori tempat elemen ke-'i
dari array tersebut disimpan.
Sebaiknya gunakan requires-directive untuk menandakan potensi non-portabilitas dengan requires pointer_composite_access;
di bagian atas kode shader WGSL Anda. Lihat contoh berikut dan issue tint:2113.
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.
}`
});
Status hanya baca terpisah untuk aspek stencil dan kedalaman
Sebelumnya, lampiran depth-stencil hanya baca di render pass mengharuskan kedua aspek (depth dan stencil) hanya baca. Batasan ini telah dicabut. Sekarang, Anda dapat menggunakan aspek kedalaman dalam mode hanya baca, misalnya untuk pelacakan bayangan kontak, sementara buffering stencil ditulis untuk mengidentifikasi piksel untuk pemrosesan lebih lanjut. Lihat masalah dawn:2146.
Update fajar
Callback error yang tidak direkam yang ditetapkan dengan wgpuDeviceSetUncapturedErrorCallback()
kini langsung dipanggil saat error terjadi. Hal ini yang secara konsisten diharapkan dan diinginkan developer untuk proses debug. Lihat perubahan dawn:173620.
Metode wgpuSurfaceGetPreferredFormat()
dari webgpu.h API telah diimplementasikan. Lihat masalah dawn:1362.
Bagian ini hanya membahas beberapa sorotan utama. Lihat daftar commit yang lengkap.
Yang Baru di WebGPU
Daftar semua yang telah dibahas dalam seri Yang Baru di WebGPU.
Chrome 131
- Memotong jarak di WGSL
- GPUCanvasContext getConfiguration()
- Primitif titik dan garis tidak boleh memiliki bias kedalaman
- Fungsi bawaan pemindaian inklusif untuk subgrup
- Dukungan eksperimental untuk multi-gambar tidak langsung
- Opsi kompilasi modul shader matematika ketat
- Menghapus GPUAdapter requestAdapterInfo()
- Pembaruan Dawn
Chrome 130
- Penggabungan sumber ganda
- Peningkatan waktu kompilasi shader di Metal
- Penghentian penggunaan requestAdapterInfo() GPUAdapter
- Pembaruan Dawn
Chrome 129
Chrome 128
- Bereksperimen dengan subgrup
- Penghentian penggunaan setelan bias kedalaman untuk garis dan titik
- Menyembunyikan peringatan DevTools error yang tidak tertangkap jika preventDefault
- WGSL melakukan interpolasi sampling terlebih dahulu dan
- Pembaruan Dawn
Chrome 127
- Dukungan eksperimental untuk OpenGL ES di Android
- Atribut info GPUAdapter
- Peningkatan interop WebAssembly
- Error encoder perintah yang ditingkatkan
- Pembaruan Dawn
Chrome 126
- Meningkatkan batas maxTextureArrayLayers
- Pengoptimalan upload buffering untuk backend Vulkan
- Peningkatan waktu kompilasi shader
- Buffer perintah yang dikirimkan harus unik
- Pembaruan Dawn
Chrome 125
Chrome 124
- Tekstur penyimpanan hanya baca dan baca-tulis
- Dukungan pekerja layanan dan pekerja bersama
- Atribut informasi adaptor baru
- Perbaikan bug
- Pembaruan Dawn
Chrome 123
- Dukungan fungsi bawaan DP4a di WGSL
- Parameter pointer yang tidak dibatasi di WGSL
- Sintaksis yang lebih mudah untuk dereferensi komposit di WGSL
- Status hanya baca terpisah untuk aspek stencil dan kedalaman
- Pembaruan Dawn
Chrome 122
- Memperluas jangkauan dengan mode kompatibilitas (fitur dalam pengembangan)
- Meningkatkan batas maxVertexAttributes
- Pembaruan Dawn
Chrome 121
- Mendukung WebGPU di Android
- Menggunakan DXC, bukan FXC, untuk kompilasi shader di Windows
- Kueri stempel waktu dalam penerusan komputasi dan rendering
- Titik entri default ke modul shader
- Mendukung display-p3 sebagai ruang warna GPUExternalTexture
- Info heap memori
- Pembaruan Dawn
Chrome 120
- Dukungan untuk nilai floating point 16-bit di WGSL
- Mendorong batas
- Perubahan pada status kedalaman-stensil
- Pembaruan informasi adaptor
- Kuantisasi kueri stempel waktu
- Fitur bersih-bersih
Chrome 119
- Tekstur float 32-bit yang dapat difilter
- Format verteks unorm10-10-10-2
- Format tekstur rgb10a2uint
- Pembaruan Dawn
Chrome 118
- Dukungan HTMLImageElement dan ImageData di
copyExternalImageToTexture()
- Dukungan eksperimental untuk tekstur penyimpanan baca-tulis dan hanya baca
- Pembaruan Dawn
Chrome 117
- Membatalkan penetapan buffer verteks
- Membatalkan penetapan grup pengikatan
- Menyembunyikan error dari pembuatan pipeline asinkron saat perangkat hilang
- Pembaruan pembuatan modul shader SPIR-V
- Meningkatkan pengalaman developer
- Menyimpan cache pipeline dengan tata letak yang dibuat secara otomatis
- Pembaruan Dawn
Chrome 116
- Integrasi WebCodecs
- Perangkat yang hilang ditampilkan oleh
requestDevice()
GPUAdapter - Membuat pemutaran video tetap lancar jika
importExternalTexture()
dipanggil - Kepatuhan spesifikasi
- Meningkatkan pengalaman developer
- Pembaruan Dawn
Chrome 115
- Ekstensi bahasa WGSL yang didukung
- Dukungan eksperimental untuk Direct3D 11
- Mendapatkan GPU terpisah secara default pada daya AC
- Meningkatkan pengalaman developer
- Pembaruan Dawn
Chrome 114
- Optimize JavaScript
- getCurrentTexture() pada kanvas yang tidak dikonfigurasi akan menampilkan InvalidStateError
- Update WGSL
- Pembaruan Dawn