دعم دوال DP4a المضمنة في WGSL
يشير DP4a (الناتج المكون من 4 عناصر وتراكم) إلى مجموعة من تعليمات وحدة معالجة الرسومات التي يشيع استخدامها في استنتاج التعلم المتعمق من أجل تحديد الكمي. وتعمل هذه الأداة بكفاءة على تنفيذ منتجات النقاط بأعداد صحيحة مكوّنة من 8 بتات لتسريع وتيرة احتساب هذه النماذج الكمية بطريقة int8. ويمكنها توفير (ما يصل إلى %75) من الذاكرة ومعدل نقل البيانات للشبكة وتحسين أداء أي نماذج لتعلُّم الآلة في الاستنتاج مقارنةً بإصدار f32 الخاص بها. ونتيجة لذلك، يتم الآن استخدامه بكثرة في العديد من أُطر عمل الذكاء الاصطناعي الشائعة.
عند توفُّر إضافة لغة WGSL "packed_4x8_integer_dot_product"
في navigator.gpu.wgslLanguageFeatures
، يمكنك الآن استخدام مقاييس عدد صحيح 32 بت تتضمّن 4 مكوّنات من أعداد صحيحة مقدارها 8 بت كمدخلات إلى تعليمات المنتج النقطية في رمز أداة تظليل WGSL مع الدالتَين المُدمَجة dot4U8Packed
وdot4I8Packed
. يمكنك أيضًا استخدام تعليمات التعبئة والفكّ باستخدام متّجهات مكوّنة من 4 مكوّنات مع أعداد صحيحة مكوّنة من 8 بت مع pack4xI8
وpack4xU8
وpack4xI8Clamp
وpack4xU8Clamp
وunpack4xI8
وunpack4xU8
وظائف WGSL المضمّنة.
يُنصَح باستخدام سمة Requires-directive للإشارة إلى احتمال عدم إمكانية النقل باستخدام requires packed_4x8_integer_dot_product;
أعلى رمز أداة تظليل WGSL. يُرجى الاطّلاع على المثال التالي وتحديد اللون:1497.
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
}`,
});
شكر خاص لفريق رسومات الويب الخاص بشركة Intel في شنغهاي لقيادة هذه المواصفات والتنفيذ حتى الاكتمال!
معلمات المؤشر غير المحدودة في WGSL
تخفف إضافة لغة WGSL "unrestricted_pointer_parameters"
القيود المفروضة على إمكانية تمرير المؤشرات إلى دوال WGSL:
مؤشرات معلَمات لمساحات عناوين
storage
وuniform
وworkgroup
إلى الدوال التي اختارها المستخدمتمرير المؤشرات إلى بنية الأعضاء وعناصر الصفيف إلى الوظائف التي أعلن عنها المستخدم
راجِع المؤشرات كمعلَمات دالة | جولة في WGSL لمعرفة المزيد عنها.
يمكن اكتشاف هذه الميزة باستخدام navigator.gpu.wgslLanguageFeatures
. ننصحك دائمًا باستخدام السمة Requires-directive للإشارة إلى احتمال عدم إمكانية النقل باستخدام السمة requires unrestricted_pointer_parameters;
أعلى رمز أداة تظليل WGSL. اطّلِع على المثال التالي تغييرات في مواصفات WGSL ولون المشكلة: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);
}`
});
بناء الجملة "سكر" لاستبعاد المركّبات في WGSL
عند توفُّر إضافة لغة WGSL "pointer_composite_access"
في navigator.gpu.wgslLanguageFeatures
، يتيح رمز أداة التظليل WGSL الآن الوصول إلى مكوّنات أنواع البيانات المعقدة باستخدام بنية النقطة (.
) نفسها سواء كنت تعمل مباشرةً مع البيانات أو باستخدام مؤشر إليها. إليك آلية العمل:
إذا كان
foo
مؤشرًا، فإنّfoo.bar
هي طريقة أكثر ملاءمة لكتابة(*foo).bar
. عادةً ما تكون العلامة النجمية (*
) مطلوبة لتحويل المؤشر إلى "مرجع" يمكن الإشارة إليه، ولكن الآن أصبحت كل من المؤشرات والمراجع أكثر تشابهًا وتشابه تقريبًا.إذا لم يكن
foo
مؤشرًا، يعني ذلك أنّ عامل تشغيل النقطة (.
) يعمل تمامًا كما اعتدت على الوصول إلى الأعضاء مباشرةً.
وبالمثل، إذا كان pa
مؤشرًا يخزِّن عنوان البداية في مصفوفة، سيمنحك استخدام pa[i]
إمكانية الوصول المباشر إلى موقع الذاكرة حيث يتم تخزين العنصر 'i
من ذلك الصفيف.
يُنصَح باستخدام سمة Requires-directive للإشارة إلى احتمال عدم إمكانية النقل باستخدام requires pointer_composite_access;
أعلى رمز أداة تظليل WGSL. يُرجى الاطّلاع على المثال التالي وتحديد لون المشكلة:2113.
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.
}`
});
حالة منفصلة للقراءة فقط حول جوانب الاستنسل والعمق
في السابق، كانت تتطلب مرفقات الاستنسل المعمَّق للقراءة فقط في العرض التقديمي كلا الجانبين (العمق والاستنسل) لتكون للقراءة فقط. تم رفع هذا القيد. والآن، يمكنك استخدام جانب العمق في القراءة فقط، مثلاً لتتبع ظلال التلامس، بينما تتم كتابة المخزن المؤقت للاستنسل لتحديد وحدات البكسل لمزيد من المعالجة. ويمكنك الاطّلاع على مشكلة dawn:2146.
الإشعارات عند الفجر
إنّ عملية معاودة الاتصال بسبب خطأ لم يتم تسجيله في wgpuDeviceSetUncapturedErrorCallback()
يتم الآن الحصول عليها فورًا عند حدوث الخطأ. هذا ما يتوقعه المطوّرون باستمرار ويريدون تصحيح الأخطاء. يمكنك الاطّلاع على تغيير الفجر:173620.
تم تنفيذ الطريقة wgpuSurfaceGetPreferredFormat()
من webgpu.h API. راجِع مشكلة dawn:1362.
يتناول هذا فقط بعض النقاط الرئيسية. يمكنك الاطّلاع على القائمة الشاملة لعمليات الالتزام.
الميزات الجديدة في WebGPU
قائمة بكل ما تمت مناقشته في سلسلة الميزات الجديدة في WebGPU.
الإصدار 125 من Chrome
الإصدار 124 من Chrome
- زخارف مساحة التخزين للقراءة فقط والقراءة
- دعم العاملين في مجال الخدمات والعاملين المشتركين
- السمات الجديدة لمعلومات المحوّل
- إصلاح الأخطاء
- إشعارات الفجر
الإصدار 123 من Chrome
- دعم دوال DP4a المضمنة في WGSL
- معلَمات غير محدودة للمؤشر في WGSL
- صيغة سكر لإزالة الإشارة إلى المركّبات في WGSL
- حالة منفصلة للقراءة فقط حول جوانب الاستنسل والعمق
- إشعارات الفجر
الإصدار 122 من Chrome
- توسيع مدى الوصول إلى الجمهور باستخدام وضع التوافق (ميزة قيد التطوير)
- زيادة حدّ maxVertexAttributes
- إشعارات الفجر
الإصدار 121 من Chrome
- إتاحة WebGPU على Android
- استخدام DXC بدلاً من FXC لتجميع أدوات التظليل على Windows
- طلبات البحث عن الطابع الزمني في بطاقات الحوسبة والعرض
- نقاط الإدخال التلقائية لوحدات أداة التظليل
- إتاحة view-p3 كمساحة لون GPUExternalTexture
- معلومات حول حِزم الذاكرة
- إشعارات الفجر
الإصدار 120 من Chrome
- دعم قيم النقطة العائمة 16 بت في WGSL
- إطلاق العنان لقدراتك
- تغييرات في حالة الاستنسل المعمَّق
- إشعارات حول المحوّل
- تحديد كم طلبات الطابع الزمني
- ميزات تنظيف الربيع
الإصدار 119 من متصفِّح Chrome
الإصدار 118 من متصفّح Chrome
- إتاحة استخدام HTMLImageElement وImageData في
copyExternalImageToTexture()
- الدعم التجريبي لزخرفة مساحة التخزين للقراءة فقط والقراءة فقط
- إشعارات الفجر
الإصدار 117 من Chrome
- عدم ضبط المخزن المؤقت للرأس
- إلغاء ضبط مجموعة الربط
- كتم صوت الأخطاء الناتجة عن إنشاء مسار غير متزامن عند فقدان الجهاز
- تعديلات على عملية إنشاء وحدة أداة تظليل SPIR-V
- تحسين تجربة المطوّرين
- تخزين مسارات التخزين المؤقت باستخدام تنسيق يتم إنشاؤه تلقائيًا
- إشعارات الفجر
الإصدار 116 من متصفّح Chrome
- دمج WebCodecs
- الجهاز المفقود الذي أعاده GPUAdapter
requestDevice()
- مواصلة تشغيل الفيديو بسلاسة في حال تسمية "
importExternalTexture()
" - مطابقة المواصفات
- تحسين تجربة المطوّرين
- إشعارات الفجر
الإصدار 115 من متصفّح Chrome
- إضافات لغات WGSL المتوافقة
- الدعم التجريبي للإصدار 11 من تقنية Direct3D
- استخدام وحدة معالجة الرسومات المنفصلة تلقائيًا باستخدام طاقة التيار المتردد
- تحسين تجربة المطوّرين
- إشعارات الفجر
الإصدار 114 من متصفّح Chrome
- تحسين JavaScript
- getCurrentTexture() على لوحة رسم لم يتم ضبطها تطرح ReplyStateError
- إشعارات من WGSL
- إشعارات الفجر