Dukungan fungsi bawaan DP4a dalam WGSL
DP4a (Produk Titik 4 Elemen dan Akumulasi) mengacu pada sekumpulan petunjuk GPU yang biasa digunakan dalam inferensi deep learning untuk kuantisasi. API ini secara efisien menjalankan produk dot integer 8-bit untuk mempercepat komputasi model terkuantisasi int8 tersebut. Cloud SQL dapat menghemat (hingga 75%) memori dan bandwidth jaringan serta meningkatkan performa model machine learning apa pun dalam inferensi dibandingkan dengan versi f32. Oleh karena itu, LLM kini banyak digunakan dalam banyak framework AI populer.
Jika ekstensi bahasa WGSL "packed_4x8_integer_dot_product"
ada di navigator.gpu.wgslLanguageFeatures
, sekarang Anda dapat menggunakan skalar bilangan bulat 32-bit yang mengemas vektor 4 komponen dari 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 instruksi pengemasan dan pembukaan paket dengan vektor 4 komponen yang dipaketkan dari bilangan bulat 8-bit dengan fungsi bawaan WGSL pack4xI8
, pack4xU8
, pack4xI8Clamp
, pack4xU8Clamp
, unpack4xI8
, dan unpack4xU8
.
Sebaiknya gunakan required-directive untuk menandakan potensi non-portabilitas dengan requires packed_4x8_integer_dot_product;
di bagian atas kode shader WGSL Anda. Lihat contoh dan warna masalah:1497 berikut.
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 banyak kepada tim Grafik Web Intel di Shanghai yang telah mendorong spesifikasi dan implementasi ini hingga selesai.
Parameter pointer tidak terbatas dalam WGSL
Ekstensi bahasa WGSL "unrestricted_pointer_parameters"
melonggarkan batasan terkait pointer yang dapat diteruskan ke fungsi WGSL:
Pointer parameter
storage
,uniform
, danworkgroup
ruang alamat untuk 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 mempelajarinya lebih lanjut.
Fitur ini dapat dideteksi fitur menggunakan navigator.gpu.wgslLanguageFeatures
. Sebaiknya selalu gunakan perintah wajib untuk menandakan potensi non-portabilitas dengan requires unrestricted_pointer_parameters;
di bagian atas kode shader WGSL Anda. Lihat contoh berikut, perubahan spesifikasi WGSL, dan warna masalah: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 dereferensi komposit dalam 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 saat Anda menangani data maupun dengan pointer. 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 dihilangkan referensinya, 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 'i
dari array tersebut disimpan.
Sebaiknya gunakan required-directive untuk menandakan potensi non-portabilitas dengan requires pointer_composite_access;
di bagian atas kode shader WGSL Anda. Lihat contoh dan warna masalah:2113 berikut.
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.
}`
});
Pisahkan status hanya-baca untuk aspek stensil dan kedalaman
Sebelumnya, lampiran kedalaman-stensil hanya-baca dalam {i>render pass<i} memerlukan kedua aspek (kedalaman dan stensil) agar bersifat hanya-baca. Pembatasan ini telah dicabut. Sekarang, Anda dapat menggunakan aspek kedalaman dengan mode hanya-baca, misalnya untuk pelacakan bayangan kontak, sementara buffer stensil ditulis untuk mengidentifikasi piksel untuk pemrosesan lebih lanjut. Lihat issue dawn:2146.
Update fajar
Callback error yang tidak direkam yang disetel dengan wgpuDeviceSetUncapturedErrorCallback()
sekarang segera dipanggil saat error terjadi. Inilah yang secara konsisten diharapkan dan diinginkan developer untuk proses debug. Lihat change fawn:173620.
Metode wgpuSurfaceGetPreferredFormat()
dari webgpu.h API telah diimplementasikan. Lihat masalah dawn:1362.
Artikel ini hanya mencakup beberapa sorotan utama. Lihat daftar commit selengkapnya.
Yang Baru di WebGPU
Daftar semua hal yang telah dibahas dalam seri What's New in WebGPU.
Chrome 127
- Dukungan eksperimental untuk OpenGL ES di Android
- Atribut info GPUAdapter
- Peningkatan interop WebAssembly
- Memperbaiki error encoder perintah
- Info terbaru fajar
Chrome 126
- Meningkatkan batas maxTextureArrayLayers
- Pengoptimalan upload buffer untuk backend Vulkan
- Peningkatan waktu kompilasi shader
- Buffer perintah yang dikirimkan harus unik
- Info terbaru fajar
Chrome 125
Chrome 124
- Tekstur penyimpanan hanya baca dan baca-tulis
- Dukungan pekerja layanan dan pekerja bersama
- Atribut informasi adaptor baru
- Perbaikan bug
- Info terbaru fajar
Chrome 123
- Dukungan fungsi bawaan DP4a dalam WGSL
- Parameter pointer yang tidak dibatasi dalam WGSL
- sugar sintaksis untuk dereferensi komposit dalam WGSL
- Memisahkan status hanya baca untuk aspek stensil dan kedalaman
- Info terbaru fajar
Chrome 122
- Memperluas jangkauan dengan mode kompatibilitas (fitur dalam pengembangan)
- Meningkatkan batas maxVertexAttributes
- Info terbaru fajar
Chrome 121
- Mendukung WebGPU di Android
- Menggunakan DXC, bukan FXC, untuk kompilasi shader di Windows
- Kueri stempel waktu dalam penerusan komputasi dan render
- Titik entri default ke modul shader
- Mendukung display-p3 sebagai ruang warna GPUExternalTexture
- Info heap memori
- Info terbaru fajar
Chrome 120
- Dukungan untuk nilai floating point 16-bit dalam WGSL
- Mencapai batas
- Perubahan pada status depth-stensil
- Pembaruan informasi adaptor
- Kuantisasi kueri stempel waktu
- Fitur pembersihan musim semi
Chrome 119
- Tekstur float 32-bit yang dapat difilter
- format verteks unorm10-10-10-2
- format tekstur rgb10a2uint
- Info terbaru fajar
Chrome 118
- Dukungan HTMLImageElement dan ImageData di
copyExternalImageToTexture()
- Dukungan eksperimental untuk tekstur penyimpanan hanya baca dan baca
- Info terbaru fajar
Chrome 117
- Membatalkan penetapan buffer verteks
- Membatalkan penetapan bind group
- Menonaktifkan error dari pembuatan pipeline asinkron saat perangkat hilang
- Pembaruan pembuatan modul shader SPIR-V
- Meningkatkan pengalaman developer
- Menyimpan pipeline dengan tata letak yang dibuat secara otomatis
- Info terbaru fajar
Chrome 116
- Integrasi WebCodecs
- Perangkat hilang yang ditampilkan oleh GPUAdapter
requestDevice()
- Menjaga pemutaran video tetap lancar jika
importExternalTexture()
dipanggil - Kesesuaian spesifikasi
- Meningkatkan pengalaman developer
- Info terbaru fajar
Chrome 115
- Ekstensi bahasa WGSL yang didukung
- Dukungan eksperimental untuk Direct3D 11
- Mendapatkan GPU diskret secara default menggunakan daya AC
- Meningkatkan pengalaman developer
- Info terbaru fajar
Chrome 114
- Optimalkan JavaScript
- getCurrentTexture() pada kanvas yang tidak dikonfigurasi menampilkan InvalidStateError
- Info terbaru WGSL
- Info terbaru fajar