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

Chrome 126

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