الميزات الجديدة في WebGPU (Chrome 125)

François Beaufort
François Beaufort

قد يبدو عدد ميزات WebGPU قليلًا هذه المرة، ولكننا على وشك إطلاق بعض التحسينات الرئيسية. ستتضمّن الإصدارات المستقبلية ميزات مثل تحسينات على سرعة تجميع البرامج النصية للظلال، وتغييرات على نموذج التنفيذ غير المتزامن باستخدام WGPUFuture.

المجموعات الفرعية (ميزة قيد التطوير)

تتيح ميزة المجموعات الفرعية التوازي على مستوى SIMD، ما يسمح لخيوط المعالجة ضمن مجموعة بالتواصل وإجراء عمليات حسابية جماعية (على سبيل المثال، احتساب مجموع 16 رقمًا). ويوفر ذلك شكلاً عالي الكفاءة لمشاركة البيانات بين سلاسل المحادثات.

تتوافق عمليات المجموعات الفرعية مع واجهات برمجة التطبيقات الحديثة لوحدة معالجة الرسومات، ولكن تختلف تفاصيل التسمية والتنفيذ. حدّد فريق Chrome العناصر المشتركة ويعمل الآن على توحيد هذه الميزة. يمكنك الاطّلاع على الاقتراح والتعليق إذا كانت لديك أسئلة.

هناك تنفيذ بسيط وغير موحّد للمجموعات الفرعية ضمن علامة "ميزات منصة الويب التجريبية" في chrome://flags/#enable-experimental-web-platform-features حتى يتمكّن المطوّرون من تجربتها ومشاركة الملاحظات، لأنّه لم يتم إثبات المزايا الفعلية في سياق WebGPU حتى الآن.

عندما تكون ميزة "chromium-experimental-subgroups" متاحة في GPUAdapter، اطلب GPUDevice تتضمّن هذه الميزة للحصول على دعم المجموعات الفرعية التجريبية في WGSL والتحقّق من حدود minSubgroupSize وmaxSubgroupSize.

عليك أيضًا تفعيل هذه الإضافة صراحةً في رمز WGSL باستخدام enable chromium_experimental_subgroups. عند تفعيل هذا الخيار، يمكنك الوصول إلى الإضافات التالية:

  • subgroup_invocation_id: قيمة مضمّنة لفهرس سلسلة المحادثات ضمن المجموعة الفرعية.
  • subgroup_size: قيمة مضمّنة للوصول إلى حجم المجموعة الفرعية.
  • subgroupBallot(value): تعرض مجموعة من حقول البتات حيث يكون البت المقابل لـ subgroup_invocation_id هو 1 إذا كانت value صحيحة لهذا الطلب النشط و0 في الحالات الأخرى.
  • subgroupBroadcast(value, id): تُرسِل value من الطلب الذي يتضمّن subgroup_invocation_id مطابقًا 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().
  }`,
});

عرض شريحة من الزخرفة الثلاثية الأبعاد

يمكنك الآن التصدير مباشرةً إلى شرائح من مواد النسيج الثلاثية الأبعاد ضمن عمليات التصدير، ما يوسع إمكاناتها إلى ما بعد التصدير الشائع للمواد النسيجية ثنائية الأبعاد، وذلك باستخدام العنصر الجديد depthSlice في GPURenderPassColorAttachment. تتيح لك هذه الإضافة مثلاً إنشاء مَشاهد وتأثيرات مستندة إلى وحدات حجمية من خلال التقديم مباشرةً إلى مجلدات زخارف ثلاثية الأبعاد. راجِع الإصدار dawn:1020.

آخر الأخبار من Dawn

اطّلِع على قائمة المساهمين الشاملة.

الميزات الجديدة في WebGPU

قائمة بكل ما تم تناوله في سلسلة الميزات الجديدة في WebGPU

Chrome 131

Chrome 130

الإصدار 129 من Chrome

Chrome 128

الإصدار 127 من Chrome

الإصدار 126 من Chrome

الإصدار 125 من Chrome

Chrome 124

Chrome 123

Chrome 122

الإصدار 121 من Chrome

الإصدار 120 من Chrome

الإصدار 119 من Chrome

Chrome 118

Chrome 117

الإصدار 116 من Chrome

الإصدار 115 من Chrome

الإصدار 114 من Chrome

Chrome 113