الميزات الجديدة في 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. تتيح لك هذه الإضافة مثلاً إنشاء مشاهد وتأثيرات مستندة إلى فوكسل من خلال العرض مباشرةً في أحجام زخارف ثلاثية الأبعاد. راجِع عدد الفجر:1020.

آخر أخبار الفجر

يمكنك الاطّلاع على قائمة الالتزامات الشاملة.

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

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

الإصدار 128 من 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 من Chrome