Dukungan fungsi bawaan DP4a di WGSL
DP4a (Dot Product of 4 Elements and Accumulate) mengacu pada sekumpulan instruksi GPU yang umum digunakan dalam inferensi deep learning untuk kuantisasi. GPU ini secara efisien melakukan produk titik bilangan bulat 8-bit untuk mempercepat komputasi model yang dikuantisasi int8 tersebut. Hal ini dapat menghemat (hingga 75%) bandwidth memori dan jaringan serta meningkatkan performa model machine learning apa pun dalam inferensi dibandingkan dengan versi f32-nya. Akibatnya, 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 mengemas vektor 4 komponen bilangan bulat 8-bit sebagai input ke petunjuk produk titik dalam kode shader WGSL Anda dengan fungsi bawaan dot4U8Packed
dan dot4I8Packed
. Anda juga dapat menggunakan petunjuk pengemasan dan pembongkaran dengan vektor 4 komponen yang dikemas dari bilangan bulat 8-bit dengan fungsi bawaan WGSL pack4xI8
, pack4xU8
, pack4xI8Clamp
, pack4xU8Clamp
, unpack4xI8
, dan unpack4xU8
.
Sebaiknya gunakan requires-directive untuk menandakan potensi tidak portabel dengan requires packed_4x8_integer_dot_product;
di bagian atas kode shader WGSL Anda. Lihat contoh berikut dan masalah warna: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 yang telah mendorong penyelesaian spesifikasi dan penerapan ini.
Parameter penunjuk yang tidak dibatasi di WGSL
Ekstensi bahasa "unrestricted_pointer_parameters"
WGSL melonggarkan batasan pada pointer yang dapat diteruskan ke fungsi WGSL:
Penunjuk 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 Pointer Sebagai Parameter Fungsi | Tur WGSL untuk mempelajari lebih lanjut.
Fitur ini dapat dideteksi menggunakan navigator.gpu.wgslLanguageFeatures
. Sebaiknya selalu gunakan requires-directive untuk menandakan potensi tidak portabel dengan requires unrestricted_pointer_parameters;
di bagian atas kode shader WGSL Anda. Lihat contoh berikut, perubahan spesifikasi WGSL, dan masalah warna: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);
}`
});
Sugar sintaksis untuk menghilangkan referensi 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 sintaks titik (.
) yang sama, baik saat Anda bekerja langsung dengan data maupun dengan pointer ke data tersebut. Berikut caranya:
Jika
foo
adalah pointer:foo.bar
adalah cara yang lebih mudah untuk menulis(*foo).bar
. Tanda bintang (*
) biasanya diperlukan untuk mengubah pointer menjadi "referensi" yang dapat di-dereferensikan, tetapi kini pointer dan referensi jauh lebih mirip dan hampir dapat dipertukarkan.Jika
foo
bukan pointer: Operator titik (.
) berfungsi persis seperti yang biasa Anda lakukan untuk mengakses anggota secara langsung.
Demikian pula, jika pa
adalah pointer yang menyimpan alamat awal array, maka 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 tidak portabel dengan requires pointer_composite_access;
di bagian atas kode shader WGSL Anda. Lihat contoh berikut dan masalah warna: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.
}`
});
Memisahkan status hanya baca untuk aspek stensil dan kedalaman
Sebelumnya, lampiran stensil kedalaman hanya baca dalam meneruskan render memerlukan kedua aspek (kedalaman dan stensil) agar hanya dapat dibaca. Batasan ini telah dicabut. Sekarang, Anda dapat menggunakan aspek kedalaman dalam mode hanya baca, misalnya untuk penelusuran bayangan kontak, sementara buffer stensil ditulis untuk mengidentifikasi piksel untuk pemrosesan lebih lanjut. Lihat issue dawn:2146.
Update Dawn
Callback error yang tidak tertangkap yang ditetapkan dengan wgpuDeviceSetUncapturedErrorCallback()
kini dipanggil segera saat terjadi error. Inilah yang secara konsisten diharapkan dan diinginkan developer untuk proses debug. Lihat change dawn:173620.
Metode wgpuSurfaceGetPreferredFormat()
dari webgpu.h API telah diimplementasikan. Lihat issue dawn:1362.
Hal ini hanya mencakup beberapa sorotan utama. Lihat daftar commit yang lengkap.
Yang Baru di WebGPU
Daftar semua hal yang telah dibahas dalam seri Yang Baru di WebGPU.
Chrome 140
- Permintaan perangkat menggunakan adaptor
- Singkatan untuk menggunakan tekstur saat tampilan tekstur digunakan
- WGSL textureSampleLevel mendukung tekstur 1D
- Penghentian penggunaan tekstur penyimpanan hanya baca bgra8unorm
- Menghapus atribut GPUAdapter isFallbackAdapter
- Info terkini Dawn
Chrome 139
- Dukungan tekstur 3D untuk format terkompresi BC dan ASTC
- Fitur "core-features-and-limits" baru
- Uji coba origin untuk mode kompatibilitas WebGPU
- Info terkini Dawn
Chrome 138
- Singkatan untuk menggunakan buffer sebagai resource pengikatan
- Perubahan persyaratan ukuran untuk buffer yang dipetakan saat pembuatan
- Laporan arsitektur untuk GPU terbaru
- Menghentikan penggunaan atribut GPUAdapter isFallbackAdapter
- Info terkini Dawn
Chrome 137
- Menggunakan tampilan tekstur untuk binding externalTexture
- Buffer disalin tanpa menentukan offset dan ukuran
- WGSL workgroupUniformLoad menggunakan pointer ke atomik
- Atribut powerPreference GPUAdapterInfo
- Menghapus atribut compatibilityMode GPURequestAdapterOptions
- Info terkini Dawn
Chrome 136
- Atribut GPUAdapterInfo isFallbackAdapter
- Peningkatan waktu kompilasi shader di D3D12
- Menyimpan dan menyalin gambar kanvas
- Batasan mode kompatibilitas Peningkatan
- Info terkini Dawn
Chrome 135
- Mengizinkan pembuatan tata letak pipeline dengan tata letak grup pengikatan null
- Mengizinkan viewport melampaui batas target render
- Akses yang lebih mudah ke mode kompatibilitas eksperimental di Android
- Menghapus batas maxInterStageShaderComponents
- Info terkini Dawn
Chrome 134
- Meningkatkan kualitas workload machine learning dengan subgrup
- Menghapus dukungan jenis tekstur yang dapat difilter float sebagai dapat digabungkan
- Info terkini Dawn
Chrome 133
- Format vertex 1 komponen dan unorm8x4-bgra tambahan
- Izinkan batas yang tidak diketahui untuk diminta dengan nilai yang tidak ditentukan
- Perubahan aturan perataan WGSL
- Peningkatan performa WGSL dengan discard
- Menggunakan displaySize VideoFrame untuk tekstur eksternal
- Menangani gambar dengan orientasi non-default menggunakan copyExternalImageToTexture
- Meningkatkan pengalaman developer
- Mengaktifkan mode kompatibilitas dengan featureLevel
- Pembersihan fitur subgrup eksperimental
- Menghentikan penggunaan batas maxInterStageShaderComponents
- Info terkini Dawn
Chrome 132
- Penggunaan tampilan tekstur
- Penggabungan tekstur float 32-bit
- Atribut adapterInfo GPUDevice
- Mengonfigurasi konteks kanvas dengan format yang tidak valid akan memunculkan error JavaScript
- Pembatasan sampler pemfilteran pada tekstur
- Eksperimen subgrup yang diperluas
- Meningkatkan pengalaman developer
- Dukungan eksperimental untuk format tekstur yang dinormalisasi 16-bit
- Info terkini Dawn
Chrome 131
- Jarak klip di WGSL
- GPUCanvasContext getConfiguration()
- Primitif titik dan garis tidak boleh memiliki bias kedalaman
- Fungsi bawaan pemindaian inklusif untuk subgrup
- Dukungan eksperimental untuk multi-draw tidak langsung
- Opsi kompilasi modul shader matematika ketat
- Menghapus GPUAdapter requestAdapterInfo()
- Info terkini Dawn
Chrome 130
- Penggabungan sumber ganda
- Peningkatan waktu kompilasi shader di Metal
- Penghentian penggunaan GPUAdapter requestAdapterInfo()
- Info terkini Dawn
Chrome 129
Chrome 128
- Bereksperimen dengan subgrup
- Menghentikan penggunaan setelan bias kedalaman untuk garis dan titik
- Menyembunyikan peringatan DevTools error yang tidak tertangkap jika preventDefault
- WGSL menginterpolasi pengambilan sampel terlebih dahulu dan
- Info terkini Dawn
Chrome 127
- Dukungan eksperimental untuk OpenGL ES di Android
- Atribut info GPUAdapter
- Peningkatan interoperabilitas WebAssembly
- Peningkatan error encoder perintah
- Info terkini Dawn
Chrome 126
- Meningkatkan batas maxTextureArrayLayers
- Pengoptimalan upload buffer untuk backend Vulkan
- Peningkatan waktu kompilasi shader
- Buffer perintah yang dikirimkan harus unik
- Info terkini Dawn
Chrome 125
Chrome 124
- Tekstur penyimpanan hanya baca dan baca-tulis
- Dukungan pekerja layanan dan pekerja bersama
- Atribut informasi adaptor baru
- Perbaikan bug
- Info terkini Dawn
Chrome 123
- Dukungan fungsi bawaan DP4a di WGSL
- Parameter penunjuk yang tidak dibatasi di WGSL
- Gula sintaksis untuk menghilangkan referensi komposit di WGSL
- Status hanya baca terpisah untuk aspek stensil dan kedalaman
- Info terkini Dawn
Chrome 122
- Memperluas jangkauan dengan mode kompatibilitas (fitur dalam pengembangan)
- Meningkatkan batas maxVertexAttributes
- Info terkini 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
- Info terkini Dawn
Chrome 120
- Dukungan untuk nilai floating-point 16-bit di WGSL
- Melampaui batas
- Perubahan pada status stensil kedalaman
- Pembaruan informasi adaptor
- Kuantisasi kueri stempel waktu
- Fitur bersih-bersih menyeluruh
Chrome 119
- Tekstur float 32-bit yang dapat difilter
- Format verteks unorm10-10-10-2
- Format tekstur rgb10a2uint
- Info terkini Dawn
Chrome 118
- Dukungan HTMLImageElement dan ImageData di
copyExternalImageToTexture()
- Dukungan eksperimental untuk tekstur penyimpanan baca-tulis dan hanya baca
- Info terkini Dawn
Chrome 117
- Buffer verteks yang tidak disetel
- Membatalkan setelan bind group
- Menyembunyikan error dari pembuatan pipeline asinkron saat perangkat hilang
- Pembaruan pembuatan modul shader SPIR-V
- Meningkatkan pengalaman developer
- Pipeline penyimpanan dalam cache dengan tata letak yang dibuat secara otomatis
- Info terkini Dawn
Chrome 116
- Integrasi WebCodecs
- Perangkat yang hilang ditampilkan oleh GPUAdapter
requestDevice()
- Memastikan pemutaran video lancar jika
importExternalTexture()
dipanggil - Kesesuaian spesifikasi
- Meningkatkan pengalaman developer
- Info terkini Dawn
Chrome 115
- Ekstensi bahasa WGSL yang didukung
- Dukungan eksperimental untuk Direct3D 11
- Mendapatkan GPU diskrit secara default saat menggunakan daya AC
- Meningkatkan pengalaman developer
- Info terkini Dawn
Chrome 114
- JavaScript Optimize
- getCurrentTexture() pada kanvas yang tidak dikonfigurasi akan memunculkan InvalidStateError
- Update WGSL
- Info terkini Dawn