Dukungan fungsi bawaan DP4a dalam WGSL
DP4a (Produk Titik 4 Elemen dan Akumulasi) mengacu pada sekumpulan instruksi GPU yang umum digunakan dalam inferensi deep learning untuk kuantisasi. Cloud SQL menjalankan produk titik bilangan bulat 8-bit secara efisien untuk mempercepat komputasi model terkuantisasi int8 tersebut. Teknologi ini dapat menghemat (hingga 75%) memori dan bandwidth jaringan serta meningkatkan performa model machine learning apa pun dalam inferensi dibandingkan dengan versi f32-nya. Oleh karena itu, AI generatif kini banyak digunakan dalam banyak framework AI populer.
Jika ekstensi bahasa "packed_4x8_integer_dot_product"
WGSL ada di navigator.gpu.wgslLanguageFeatures
, Anda kini 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 dengan fungsi bawaan dot4U8Packed
dan dot4I8Packed
. Anda juga dapat menggunakan petunjuk pengemasan dan membongkar dengan vektor 4 komponen yang dikemas dari bilangan bulat 8-bit dengan fungsi bawaan WGSL pack4xI8
, pack4xU8
, pack4xI8Clamp
, pack4xU8Clamp
, unpack4xI8
, dan unpack4xU8
.
Sebaiknya gunakan require-directive untuk memberi sinyal potensi non-portabilitas dengan requires packed_4x8_integer_dot_product;
di bagian atas kode shader WGSL Anda. Lihat contoh dan masalah tint: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 Web Graphics Intel di Shanghai yang telah mendorong spesifikasi dan implementasi ini hingga selesai!
Parameter pointer yang tidak dibatasi dalam WGSL
Ekstensi bahasa "unrestricted_pointer_parameters"
WGSL melonggarkan batasan terkait pointer yang dapat diteruskan ke fungsi WGSL:
Pointer parameter dari 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 | Tur WGSL untuk mempelajarinya lebih lanjut.
Fitur ini dapat dideteksi menggunakan navigator.gpu.wgslLanguageFeatures
. Sebaiknya selalu menggunakan require-directive untuk memberi sinyal 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);
}`
});
Gula sintaksis untuk dereferensi komposit dalam WGSL
Jika ekstensi bahasa "pointer_composite_access"
WGSL 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 secara langsung 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 require-directive untuk memberi sinyal potensi non-portabilitas dengan requires pointer_composite_access;
di bagian atas kode shader WGSL Anda. Lihat contoh dan masalah tint: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 depth-stensil hanya baca dalam penerusan render memerlukan aspek (kedalaman dan stensil) menjadi hanya-baca. Pembatasan ini telah dicabut. Sekarang, Anda dapat menggunakan aspek kedalaman dengan cara hanya-baca, untuk pelacakan bayangan kontak misalnya, sementara buffer stensil ditulis untuk mengidentifikasi piksel agar dapat diproses lebih lanjut. Lihat masalah fawn:2146.
Update Fajar
Callback error yang tidak ditangkap yang disetel dengan wgpuDeviceSetUncapturedErrorCallback()
kini segera dipanggil saat error terjadi. Inilah yang selalu diharapkan dan diinginkan developer untuk proses debug. Lihat change dawn:173620.
Metode wgpuSurfaceGetPreferredFormat()
dari API webgpu.h telah diimplementasikan. Lihat masalah fawn:1362.
Artikel ini hanya mencakup beberapa sorotan utama. Lihat daftar lengkap commit.
Yang Baru di WebGPU
Daftar semua hal yang tercakup dalam seri What's New in WebGPU.
Chrome 125
Chrome 124
- Tekstur penyimpanan hanya baca dan baca-tulis
- Dukungan pekerja layanan dan pekerja bersama
- Atribut informasi adaptor baru
- Perbaikan bug
- Update fajar
Chrome 123
- Dukungan fungsi bawaan DP4a dalam WGSL
- Parameter pointer yang tidak dibatasi dalam WGSL
- Gula sintaksis untuk dereferensi komposit dalam WGSL
- Pisahkan status hanya baca untuk aspek stensil dan kedalaman
- Update fajar
Chrome 122
- Memperluas jangkauan dengan mode kompatibilitas (fitur dalam pengembangan)
- Meningkatkan batas maxVertexAttributes
- Update 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
- Update fajar
Chrome 120
- Dukungan untuk nilai floating point 16-bit dalam WGSL
- Capai batas
- Perubahan pada status stensil kedalaman
- 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
- Update fajar
Chrome 118
- Dukungan HTMLImageElement dan ImageData di
copyExternalImageToTexture()
- Dukungan eksperimental untuk tekstur penyimpanan baca-tulis dan hanya baca
- Update fajar
Chrome 117
- Membatalkan penetapan buffer verteks
- Tidak menetapkan bind group
- Menonaktifkan error dari pembuatan pipeline asinkron saat perangkat hilang
- Update pembuatan modul shader SPIR-V
- Meningkatkan pengalaman developer
- Menyimpan data dalam cache dengan tata letak yang dibuat secara otomatis
- Update fajar
Chrome 116
- Integrasi WebCodecs
- Perangkat hilang yang ditampilkan oleh GPUAdapter
requestDevice()
- Buat pemutaran video tetap lancar jika
importExternalTexture()
dipanggil - Kesesuaian spesifikasi
- Meningkatkan pengalaman developer
- Update fajar
Chrome 115
- Ekstensi bahasa WGSL yang didukung
- Dukungan eksperimental untuk Direct3D 11
- Mendapatkan GPU diskret secara default menggunakan daya AC
- Meningkatkan pengalaman developer
- Update fajar
Chrome 114
- Mengoptimalkan JavaScript
- getCurrentTexture() pada kanvas yang tidak dikonfigurasi menampilkan InvalidStateError
- Info terbaru WGSL
- Update fajar