Yang Baru di WebGPU (Chrome Formulir 123)

François Beaufort
François Beaufort

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, dan workgroup 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

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119

Chrome 118

Chrome 117

Chrome 116

Chrome 115

Chrome 114

Chrome 113