WebCL

WebCL ( لغة الحوسبة على الويب ) هي لغة برمجة جافا سكريبت تربط OpenCL بالحوسبة المتوازية غير المتجانسة ضمن أي متصفح ويب متوافق دون الحاجة إلى إضافات ، وقد أُعلن عنها لأول مرة في مارس 2011. تم تطويرها على أسس مشابهة لـ OpenCL، وتُعتبر نسخة المتصفح منها. تُمكّن WebCL تطبيقات الويب من تحقيق أقصى سرعة ممكنة باستخدام وحدات المعالجة المركزية ووحدات معالجة الرسومات متعددة النوى . مع تزايد شعبية التطبيقات التي تتطلب معالجة متوازية ، مثل تحرير الصور وتطبيقات الواقع المعزز والألعاب المتطورة، أصبح تحسين سرعة الحوسبة أكثر أهمية. انطلاقًا من هذه الأسباب، قامت مجموعة Khronos غير الربحية [ 2 ] بتصميم وتطوير WebCL، وهي لغة برمجة جافا سكريبت تربط OpenCL بنواة قابلة للنقل، مما يُتيح الحوسبة المتوازية على متصفحات الويب، عبر نطاق واسع من الأجهزة. باختصار، تتكون WebCL من جزأين: الأول هو برمجة النواة، التي تعمل على المعالجات (الأجهزة)، والآخر هو جافا سكريبت، الذي يربط تطبيق الويب بـ OpenCL. تم إصدار المواصفات المكتملة والمصدقة لـ WebCL 1.0 في 19 مارس 2014. [ 2 ]

تطبيق

لا تدعم أي متصفحات حاليًا تقنية WebCL بشكلٍ أصلي. مع ذلك، تُستخدم إضافات غير أصلية لتنفيذها. على سبيل المثال، طورت نوكيا إضافةً لتقنية WebCL. [ 3 ] لا تخطط موزيلا لتنفيذ WebCL لصالح WebGL Compute Shaders ، التي تم التخلي عنها بدورها لصالح WebGPU .

مسودة عمل WebCL

مثال على كود C

الوحدة الأساسية للبرنامج المتوازي هي النواة . النواة هي أي مهمة قابلة للتوازي تُستخدم لأداء وظيفة محددة. في أغلب الأحيان، يمكن تمثيل الدوال كنوى. يمكن أن يتكون البرنامج من نواة واحدة أو أكثر. لتحقيق النواة، من الضروري أن تكون المهمة قابلة للتوازي. تلعب تبعيات البيانات وترتيب التنفيذ دورًا حيويًا في إنتاج خوارزميات متوازية فعالة. مثال بسيط على ذلك هو حالة فك حلقات التكرار التي تُنفذها مُترجمات لغة C، حيث يكون لدينا عبارة مثل:

for ( i = 0 ; i < 3 ; i ++ ) c [ i ] = a [ i ] + b [ i ];

يمكن فكها إلى:

c [ 0 ] = a [ 0 ] + b [ 0 ]; c [ 1 ] = a [ 1 ] + b [ 1 ]; c [ 2 ] = a [ 2 ] + b [ 2 ];

يمكن تنفيذ العبارات المذكورة أعلاه بالتوازي، ويمكن تشغيلها في وقت واحد. ويتبع النواة نهجًا مشابهًا، حيث يتم التقاط لقطة من التكرار رقم i فقط داخل النواة .

إعادة كتابة الكود أعلاه باستخدام نواة النظام:

__kernel add ( __global float * a , __global float * b , __global float * c ) { int i = get_global_id ( 0 );إذا كان ( i < 3 ) c [ i ] = a [ i ] + b [ i ]; }

يتضمن تشغيل تطبيق WebCL الخطوات التالية:

  1. السماح بالوصول إلى الأجهزة وتوفير السياق
  2. قم بتسليم النواة إلى جهاز
  3. قم بتشغيل نواة النظام على الجهاز
  4. استرجع النتائج من الجهاز
  5. استخدم البيانات الموجودة داخل جافا سكريبت

يمكن الاطلاع على مزيد من التفاصيل حول هذا الموضوع في [ 5 ]

قائمة الاستثناءات

لا تُرجع WebCL، كونها تطبيقًا قائمًا على JavaScript، رمز خطأ عند حدوث أخطاء. بدلاً من ذلك، تُطلق استثناءً مثل OUT_OF_RESOURCES`true` OUT_OF_HOST_MEMORYأو `false` أو الاستثناء الخاص بـ WebCL WEBCL_IMPLEMENTATION_FAILURE. [ 6 ] يصف كائن الاستثناء الاسم المقروء آليًا والرسالة المقروءة بشريًا التي تصف الخطأ. الصيغة كالتالي:

استثناء WebCLException : DOMException { DOMString name ; // تمثيل نصي لرمز الخطأ الرقمي، على سبيل المثال "INVALID_VALUE" DOMString ? message ; // وصف خاص بالتنفيذ لما تسبب في الاستثناء };

من الكود أعلاه، يمكن ملاحظة أن حقل الرسالة قد يكون قيمته فارغة (NULL). وتشمل الاستثناءات الأخرى ما يلي:

  1. INVALID_OPERATION– إذا تم استدعاء الشكل المُعطِّل لهذه الدالة منWebCLCallback
  2. INVALID_VALUE– إذا eventWaitListكان فارغًا
  3. INVALID_CONTEXTeventWaitList– إذا لم تكن الأحداث المحددة في السياق نفسه
  4. INVALID_DEVICE_TYPE- إذا deviceTypeتم تحديد قيمة، ولكنها ليست من بين القيم المحددة الصالحة
  5. DEVICE_NOT_FOUND– إذا لم يكن هناك WebCLDeviceأي شيء متاح يطابق المطلوبdeviceType

يمكن الاطلاع على مزيد من المعلومات حول الاستثناءات في وثيقة المواصفات. [ 6 ]

يُثار استثناء آخر عند محاولة استدعاء كائن تم تحريره. عند استخدام دالة التحرير، لا يُحذف الكائن نهائيًا، بل تُحرر الموارد المرتبطة به. لتجنب هذا الاستثناء، releaseAllيمكن استخدام دالة أخرى لا تُحرر الموارد فحسب، بل تحذف أيضًا جميع الكائنات المرتبطة التي تم إنشاؤها.

حماية

نظرًا لأن WebCL برنامج مفتوح المصدر مصمم لتطبيقات الويب، فإنه يحتوي على العديد من الثغرات الأمنية في مجالي التصميم والتطوير أيضًا. وقد دفع هذا مطوري WebCL إلى إيلاء الأمن أهمية قصوى. ومن بين المخاوف التي تمت معالجتها:

  1. الوصول إلى الذاكرة خارج النطاق: يحدث هذا عند محاولة الوصول إلى مواقع الذاكرة خارج المساحة المخصصة لها. يمكن للمهاجم إعادة كتابة أو مسح جميع البيانات المهمة المخزنة في تلك المواقع. عند حدوث مثل هذه الحالة، يجب توليد خطأ أثناء الترجمة، وإرجاع القيمة صفر أثناء التشغيل، لمنع البرنامج من تجاوز الذاكرة. وقد أطلق فريق كرونوس (المطورون) مشروع WebCL Validator [ 7 ] لمعالجة هذه الثغرة الأمنية.
  2. تهيئة الذاكرة: تُجرى هذه العملية لمنع التطبيقات من الوصول إلى مواقع الذاكرة الخاصة بالتطبيقات السابقة. يضمن WebCL عدم حدوث ذلك من خلال تهيئة جميع المخازن المؤقتة والمتغيرات المستخدمة إلى الصفر قبل تشغيل التطبيق الحالي. يحتوي OpenCL 1.2 على امتداد 'cl_khr_initialize_memory'، والذي يُفعّل هذه العملية. [ 6 ]
  3. هجوم حجب الخدمة: يُعدّ هذا الهجوم الأكثر شيوعًا على تطبيقات الويب، ولا يمكن القضاء عليه باستخدام WebCL أو المتصفح. يمكن تزويد OpenCL بمؤقتات مراقبة وتعدد مهام استباقي، ما يُمكّن WebCL من اكتشاف وإنهاء السياقات التي تستغرق وقتًا طويلاً أو تستهلك موارد كثيرة. يوجد امتداد في OpenCL 1.2 يُسمى 'cl_khr_terminate_context'، كما هو الحال في الإصدار السابق، والذي يسمح بإنهاء العملية التي قد تتسبب في هجوم حجب الخدمة. [ 6 ]

انظر أيضاً

مراجع

  1. "Khronos تُصدر مواصفات WebCL 1.0" . 19 مارس 2014.
  2. 1 2 "Khronos تُصدر مواصفات WebCL 1.0" . مجموعة Khronos. 19 مارس 2014. تم الاطلاع عليه في 19 مارس 2014 .
  3. "WebCL" . أبحاث نوكيا. مؤرشف من الأصل في 10 مايو 2012. تم الاطلاع عليه في 6 مايو 2012 .
  4. "نظرة عامة على Crosswalk - WebCL" . مؤرشف من الأصل بتاريخ 2017-02-01 . تم الاطلاع عليه بتاريخ 2017-02-01 .
  5. "تسريع تطبيقات الويب باستخدام OpenCL" . IBM .
  6. 1 2 3 4 "مواصفات WebCL" . www.khronos.org . تم الاطلاع عليه بتاريخ 14-09-2016 .
  7. "KhronosGroup/webcl-validator" . GitHub . تم الاسترجاع في 14-09-2016 .