WebGPU (Chrome→125) में नया क्या है

François Beaufort
François Beaufort

ऐसा हो सकता है कि WebGPU की सुविधाओं की संख्या में कमी आई हो, लेकिन कुछ बड़े सुधार आने वाले हैं! आने वाले समय में रिलीज़ होने वाले अपडेट में, शेडर कंपाइलेशन स्पीड में सुधार करने जैसी सुविधाएं शामिल होंगी. इसके अलावा, WGPUFuture की मदद से, इसे लागू करने के एक साथ काम न करने वाले मॉडल में बदलाव किए जाएंगे.

सबग्रुप (डेवलपमेंट की सुविधा)

सबग्रुप की सुविधा, सिमडी-लेवल पर पैरललिज़्म को चालू करती है. इससे किसी ग्रुप के थ्रेड, कम्यूनिकेट करने और गणित के फ़ॉर्मूले (जैसे, 16 संख्याओं को जोड़कर) करने में मदद करते हैं. इससे, क्रॉस-थ्रेड डेटा शेयर करने का बेहतर तरीका मिलता है.

सबग्रुप की कार्रवाइयां, मॉडर्न जीपीयू एपीआई के साथ काम करती हैं. हालांकि, इसका नाम और उन्हें लागू करने की जानकारी अलग-अलग हो सकती है. Chrome टीम ने समानताओं की पहचान कर ली है और अब इस सुविधा के मानक तय करने पर काम कर रहा है. अगर आपका कोई सवाल है, तो सुझाव देखें और टिप्पणी करें.

chrome://flags/#enable-experimental-web-platform-features पर "प्रयोग के तौर पर उपलब्ध वेब प्लैटफ़ॉर्म की सुविधाएं" फ़्लैग के पीछे सबग्रुप को सामान्य और गैर-मानक तरीके से लागू किया गया है, ताकि डेवलपर इसे आज़मा सकें और अपने सुझाव शेयर कर सकें. ऐसा इसलिए है, क्योंकि WebGPU के हिसाब से, अभी तक यह साबित नहीं हो पाया है कि असल दुनिया में आपको कितना फ़ायदा मिलेगा.

जब GPUAdapter में "chromium-experimental-subgroups" सुविधा उपलब्ध हो, तो WGSL में प्रयोग के तौर पर सबग्रुप से जुड़ी सहायता पाने के लिए, इस सुविधा वाले GPUDevice का अनुरोध करें. साथ ही, इसकी minSubgroupSize और maxSubgroupSize की सीमाएं देखें.

आपको enable chromium_experimental_subgroups के साथ, अपने WGSL कोड में इस एक्सटेंशन को साफ़ तौर पर चालू करना भी होगा. इस सुविधा के चालू होने पर, आपको इन सुविधाओं का ऐक्सेस मिलता है:

  • subgroup_invocation_id: सबग्रुप में थ्रेड की इंडेक्स के लिए पहले से मौजूद वैल्यू.
  • subgroup_size: सबग्रुप के साइज़ के ऐक्सेस के लिए पहले से मौजूद वैल्यू.
  • subgroupBallot(value):, बिट फ़ील्ड का सेट दिखाता है, जहां subgroup_invocation_id से जुड़ा बिट 1 होता है. अगर value उस ऐक्टिव बातचीत के लिए सही है, तो वैल्यू 0 होती है.
  • subgroupBroadcast(value, id): शुरू करने वाले value को id से मेल खाने वाले subgroup_invocation_id के साथ सबग्रुप में मौजूद सभी बातचीत को ब्रॉडकास्ट करता है. ध्यान दें: id, कंपाइल-टाइम कॉन्स्टेंट होना चाहिए.

नीचे दिया गया कोड स्निपेट, सबग्रुप की क्षमता के बारे में जानने और उसे समझने में मदद करता है.

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("chromium-experimental-subgroups")) {
  throw new Error("Experimental subgroups support is not available");
}
// Explicitly request experimental subgroups support.
const device = await adapter.requestDevice({
  requiredFeatures: ["chromium-experimental-subgroups"],
});

const shaderModule = device.createShaderModule({ code: `
  enable chromium_experimental_subgroups;

  @compute @workgroup_size(64) fn main(
      @builtin(global_invocation_id) global_id : vec3u,
      @builtin(subgroup_size) sg_size : u32,
      @builtin(subgroup_invocation_id) sg_id : u32) {
    // TODO: Use subgroupBallot() and subgroupBroadcast().
  }`,
});

3D टेक्सचर के टुकड़े को रेंडर करें

अब रेंडर पास में, 3D टेक्सचर के स्लाइस को सीधे तौर पर रेंडर किया जा सकता है. इससे, सामान्य 2D टेक्सचर रेंडरिंग से ज़्यादा सुविधाएं मिलती हैं. ऐसा GPURenderPassColorAttachment में नए depthSlice सदस्य के साथ होता है. उदाहरण के लिए, इस जोड़ से आपको सीधे 3D टेक्सचर वॉल्यूम में रेंडर करके वॉक्सेल आधारित सीन और इफ़ेक्ट बनाने की सुविधा मिलती है. जारी है सुबह:1020 देखें.

Dawn के अपडेट

कमियों की पूरी सूची देखें.

WebGPU में नया क्या है

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