آلة تدفق البيانات المعيارية الثنائية

يعمل برنامج BMDFM على أنظمة تشغيل مختلفة

آلة تدفق البيانات المعيارية الثنائية ( BMDFM ) هي حزمة برمجية تُمكّن من تشغيل التطبيقات بالتوازي على حواسيب المعالجة المتعددة المتناظرة ذات الذاكرة المشتركة (SMP)، وذلك باستخدام المعالجات المتعددة لتسريع تنفيذ التطبيقات الفردية. تُحدد BMDFM تلقائيًا التوازي وتستغله بفضل الجدولة الثابتة والديناميكية في الغالب لتسلسلات تعليمات تدفق البيانات المُشتقة من البرنامج التسلسلي السابق.

يقوم النظام الفرعي للجدولة الديناميكية في BMDFM بمحاكاة المعالجة المتعددة المتناظرة (SMP) لآلة تدفق البيانات ذات الرموز المميزة لتوفير دلالات تدفق البيانات الشفافة للتطبيقات. ولا حاجة إلى توجيهات للتنفيذ المتوازي.

خلفية

تُعدّ أنظمة المعالجة المتعددة المتناظرة (SMP) الحالية ذات الذاكرة المشتركة المتوازية أجهزةً معقدة، حيث يجب معالجة عدد كبير من الجوانب المعمارية في آنٍ واحد لتحقيق أداء عالٍ. ويمكن لأجهزة SMP التجارية الحديثة المُخصصة للحوسبة التقنية أن تحتوي على العديد من النوى المترابطة بإحكام (ومن الأمثلة الجيدة على ذلك أجهزة SMP القائمة على معالجات متعددة النوى من إنتل ( Core أو Xeon ) أو آي بي إم ( Power )). وتشير إعلانات مُصنّعي أجهزة الكمبيوتر إلى أن عدد النوى في كل عقدة SMP مُخطط له أن يتضاعف كل بضع سنوات.

تهدف المعالجات متعددة النوى إلى استغلال التوازي على مستوى الخيوط، والذي تحدده البرمجيات. ولذلك، فإن التحدي الأكبر يكمن في إيجاد طريقة فعّالة لتسخير قوة هذه المعالجات لمعالجة برنامج تطبيقي بالتوازي. يعمل نموذج OpenMP الحالي للتوازي الثابت باستخدام مكتبة وقت التشغيل fork-join بشكل جيد مع العمليات الحسابية المنتظمة القائمة على المصفوفات والتي تتطلب استخدام حلقات تكرارية مكثفة فقط، بينما تُعدّ طرق التوازي في وقت الترجمة ضعيفة بشكل عام، ويكاد يكون من المستحيل تطبيقها على التطبيقات غير المنتظمة.

  • هناك العديد من العمليات التي تستغرق وقتاً غير محدد مما يجعل من الصعب معرفة متى ستصبح بعض البيانات متاحة بالضبط.
  • تتميز بنية الذاكرة الهرمية ذات الذاكرات المؤقتة متعددة المستويات بزمن استجابة غير متوقع للوصول إلى الذاكرة.
  • في وضع المستخدمين المتعددين، يمكن لبرامج الآخرين أن تستهلك الموارد أو تبطئ جزءًا من الحساب بطريقة لا يستطيع المترجم حسابها.
  • تعتبر التحسينات بين الإجراءات والشروط المتقاطعة في وقت الترجمة صعبة (غالباً مستحيلة) لأن المترجمات لا تستطيع معرفة الاتجاه الذي سيسلكه الشرط أو لا تستطيع التحسين عبر استدعاء دالة.

دلالات تدفق البيانات الشفافة لـ BMDFM

تعتمد تقنية BMDFM بشكل أساسي على الجدولة الديناميكية لاستغلال التوازي في برامج التطبيقات، وبالتالي تتجنب عيوب أساليب وقت الترجمة المذكورة. [ 1 ] [ 2 ] BMDFM هي بيئة برمجة متوازية للمعالجات متعددة النوى SMP، وتوفر ما يلي:

  • نموذج البرمجة التقليدي الذي لا يتطلب توجيهات للتنفيذ المتوازي.
  • استغلال شفاف (ضمني) للتوازي بطريقة طبيعية ومتوازنة الأحمال باستخدام جميع المعالجات متعددة النوى المتاحة في النظام تلقائيًا.

يجمع BMDFM مزايا مبادئ معمارية معروفة في بنية هجينة واحدة قادرة على استغلال التوازي الضمني للتطبيقات مع تكلفة جدولة ديناميكية ضئيلة للغاية ودون أي اختناقات. ويعتمد بشكل أساسي على مبدأ تدفق البيانات الأساسي، الذي ينص على أنه: "يمكن تنفيذ أي تعليمة أو دالة بمجرد أن تصبح جميع وسائطها جاهزة. وتتولى آلة تدفق البيانات إدارة علامات كل جزء من البيانات أثناء التشغيل. ويتم وضع علامة "جاهز" على البيانات عند اكتمال معالجتها. وتُنفذ التعليمات ذات الوسائط الجاهزة مع وضع علامة "جاهز" على بيانات نتائجها".

المعالجة المتوازية باستخدام BMDFM

تتمثل الميزة الرئيسية لـ BMDFM في توفير نموذج برمجة تقليدي على المستوى الأعلى، يُعرف بدلالات تدفق البيانات الشفافة. يفهم المستخدم BMDFM على أنه آلة افتراضية (VM) تُشغّل جميع تعليمات برنامج التطبيق بالتوازي، مع شفافية كاملة لجميع آليات التوازي والمزامنة. تعليمات برنامج التطبيق هي عوامل تشغيل عادية، قد يتكون منها أي برنامج أحادي الخيوط: تشمل تعيينات المتغيرات، والمعالجة الشرطية، والحلقات، واستدعاءات الدوال، وما إلى ذلك.

لنفترض أن لدينا جزء الكود الموضح أدناه:

( setq a ( foo0 i )) #a = foo0 ( i ); ( setq b ( foo1 ( + i 1 ))) #b = foo1 ( i + 1 ); ( setq b ( ++ b )) # b ++ ; ( outf "a = %d \ n " a ) #printf ( " a = %d \n " , a ); ( outf "b = %d \n " b ) #printf ( "b = %d \ n " , b ) ;

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

لنفترض أن جزء الكود أعلاه متداخل الآن في حلقة تكرارية:

( for i 1 1 N ( progn # for ( i = 1 ; i <= N ; i ++ ) { ( setq a ( foo0 i )) # a = foo0 ( i ); ( setq b ( foo1 ( + i 1 ))) # b = foo1 ( i + 1 ); ( setq b ( ++ b )) # b ++ ; ( outf "a = %d \n " a ) # printf ( "a = %d \n " , a ); ( outf "b = %d \n " b ) # printf ( "b = %d \n " , b ); )) # }

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

بنيان

المفهوم الأساسي لـ BMDFM

BMDFM هي بيئة برمجة متوازية ملائمة ومحرك تشغيل فعال للمعالجات متعددة النوى SMP بفضل توحيد MIMD للعديد من النماذج المعمارية (فون نيومان، SMP وتدفق البيانات):

  • في البداية، هو عبارة عن محاكي تدفق بيانات هجين يعمل بخيوط متعددة على معالجات SMP عادية. يضمن معالج SMP التوافق مع MIMD بينما يستغل تدفق البيانات التوازي الضمني.
  • ثانيًا، هو محرك تشغيل تدفق بيانات هجين متعدد الخيوط يتم التحكم فيه بواسطة آلة افتراضية أمامية من نوع فون نيومان. يقوم محرك تشغيل تدفق البيانات بتنفيذ تعليمات متوازية سياقية ذات رموز مميزة (على عكس نموذج التفرع والدمج المقيد)، بينما تقوم الآلة الافتراضية الأمامية من نوع فون نيومان بتهيئة السياقات وتزويد محرك تشغيل تدفق البيانات بمجموعات من التعليمات المُجمّعة.
  • ثالثًا، هو مزيج من التوازي الثابت والديناميكي. تحاول آلة فون نيومان الأمامية الافتراضية تقسيم التطبيق بشكل ثابت إلى مجموعات متوازية من التعليمات، بينما يكمل محرك وقت تشغيل تدفق البيانات أساليب التوازي الثابتة بشكل ديناميكي.

صُممت BMDFM لتُستخدم كمحرك تشغيل متوازٍ (بدلاً من مكتبة التشغيل التقليدية القائمة على التفرع والدمج)، وهي قادرة على تشغيل التطبيقات غير المنتظمة تلقائيًا بالتوازي. وبفضل دلالات تدفق البيانات الشفافة، تُعد BMDFM تقنية توازي بسيطة لمبرمجي التطبيقات، وفي الوقت نفسه، تُعتبر تقنية برمجة وتجميع متوازية أفضل بكثير لأجهزة الكمبيوتر متعددة النوى ذات المعالجة المتناظرة.

يعتمد المفهوم الأساسي لتقنية BMDFM على مكونات SMP المادية المتوفرة في السوق. عادةً ما يُوفر مُصنّعو SMP أنظمة تشغيل خاصة بهم بواجهة SVR4/POSIX UNIX (مثل Linux و HP-UX و SunOS /Solaris و Tru64 OSF1 و IRIX و AIX و BSD و MacOS وغيرها). ويعمل مُحرك وقت تشغيل تدفق البيانات متعدد الخيوط، المُثبّت على نظام تشغيل SMP، على محاكاة برمجية لآلة تدفق البيانات. تحتوي هذه الآلة الافتراضية على واجهات للغة الآلة الافتراضية ولغة C، مما يُوفر دلالات تدفق البيانات الشفافة للبرمجة التقليدية.

تم بناء BMDFM كمزيج من عدة مبادئ معمارية:

  • MIMD (تدفقات التعليمات المتعددة، تدفقات البيانات المتعددة)، والتي يتم دعمها بواسطة SMP التجارية.
  • يتم ضمان التنفيذ المتوازي الضمني من خلال محاكاة تدفق البيانات.
  • يُعد مبدأ فون نيومان الحسابي مناسبًا لتنفيذ الآلة الافتراضية للتحكم في الواجهة الأمامية.
بنية BMDFM

تتم معالجة برنامج التطبيق (برنامج الإدخال التسلسلي) على ثلاث مراحل: إعادة تنظيم الكود الأولية (مُعيد تنظيم الكود)، والجدولة الثابتة للتعليمات (المجدول الثابت)، والترجمة/التحميل (المترجم، المحمل). يكون الناتج بعد مراحل الجدولة الثابتة عبارة عن تدفق متعدد المجموعات يُغذي المحرك متعدد الخيوط عبر واجهة مصممة لتجنب الاختناقات. يمكن اعتبار تدفق المجموعات المتعددة بمثابة برنامج إدخال مُترجم مُقسّم إلى مجموعات مُرتبة، حيث يتم حل جميع العناوين وتوسيعها بمعلومات السياق. يسمح التقسيم إلى مجموعات مُرتبة بتحميلها بشكل متعدد الخيوط. تُمكّن معلومات السياق من معالجة التكرارات بالتوازي. يقوم خيط الاستماع بترتيب دفق الإخراج بعد المعالجة غير المُرتبة.

يُعدّ نظام الجدولة الديناميكية BMDFM مُحاكيًا فعالًا لآلة تدفق البيانات ذات الرموز المميزة في بيئة SMP. ينقسم مجمع الذاكرة المشتركة إلى ثلاثة أجزاء رئيسية: منفذ التخزين المؤقت الحلقي للإدخال/الإخراج (IORBP)، ومخزن البيانات (DB)، وقائمة انتظار العمليات (OQ). تقوم الآلة الافتراضية للتحكم في الواجهة الأمامية بجدولة برنامج تطبيق الإدخال بشكل ثابت، وتضع التعليمات والبيانات المُجمّعة من برنامج الإدخال في منفذ IORBP. تنقل عمليات خدمة التخزين المؤقت الحلقي (IORBP PROC) البيانات إلى مخزن البيانات والتعليمات إلى قائمة انتظار العمليات. تقوم عمليات خدمة قائمة انتظار العمليات (OQ PROC) بتصنيف التعليمات على أنها جاهزة للتنفيذ إذا كانت بيانات المعاملات المطلوبة متاحة. تُنفّذ عمليات التنفيذ (CPU PROC) التعليمات المصنفة على أنها جاهزة، وتُخرج البيانات المحسوبة إلى مخزن البيانات أو إلى منفذ IORBP. بالإضافة إلى ذلك، فإنّ كلاً من IORBP PROC وOQ PROC مسؤولان عن تحرير الذاكرة بعد معالجة السياقات. السياق هو مُعرِّف فريد خاص يُمثِّل نسخة من البيانات ضمن أجزاء التكرار المختلفة وفقًا لبنية تدفق البيانات ذات الرموز المميزة. وهذا يسمح للمُجدوِل الديناميكي بمعالجة عدة تكرارات بالتوازي.

عند تشغيلها ضمن نظام تشغيل متعدد المعالجات المتناظرة (SMP)، ستشغل العمليات جميع معالجات الجهاز الحقيقية وأنوية المعالجات المتاحة. وللسماح لعدة عمليات بالوصول إلى البيانات نفسها في وقت واحد، يقوم مُجدول BMDFM الديناميكي بتأمين الكائنات في مجمع الذاكرة المشتركة عبر عمليات إشارات SVR4/POSIX. توفر سياسة التأمين وصولاً متعدداً للقراءة فقط ووصولاً حصرياً للتعديل.

المنصات المدعومة

يمكن تشغيل BMDFM على كل جهاز يدعم ANSI C و POSIX ؛ UNIX System V (SVR4).

يتم توفير BMDFM كإصدارات كاملة متعددة الخيوط لـ:

  • x86 : Linux/32، FreeBSD/32، OpenBSD/32، NetBSD/32، MacOS/32، SunOS/32، UnixWare/32، Minix/32، Android/32، Win-Cygwin/32، Win-UWIN/32، Win-SFU-SUA/32؛
  • x86-64 : Linux/64, FreeBSD/64, OpenBSD/64, NetBSD/64, MacOS/64, SunOS/64, Android/64, Win-Cygwin/64;
  • VAX : Ultrix/32؛
  • ألفا : Tru64OSF1/64، Linux/64، FreeBSD/64، OpenBSD/64؛
  • IA-64 : HP-UX/32, HP-UX/64, Linux/64, FreeBSD/64;
  • XeonPhiMIC : Linux/64;
  • MCST-Elbrus : Linux/32, Linux/64;
  • PA-RISC : HP-UX/32، HP-UX/64، Linux/32؛
  • SPARC : SunOS/32، SunOS/64، Linux/32، Linux/64، FreeBSD/64، OpenBSD/64؛
  • MIPS : IRIX/32، IRIX/64، Linux/32، Linux/64؛
  • MIPSel : Linux/32، Linux/64، Android/32، Android/64؛
  • PowerPC : AIX/32، AIX/64، MacOS/32، MacOS/64، Linux/32، Linux/64، FreeBSD/32، FreeBSD/64؛
  • PowerPCle : Linux/32، Linux/64؛
  • S/390 : zOS-USS/32, zOS-USS/64, Linux/32, Linux/64;
  • M68000 : Linux/32;
  • ARM : Linux/32، Linux/64، FreeBSD/64، Android/32، Android/64، MacOS/64؛
  • ARMbe : Linux/64؛
  • RISC-V : Linux/32, Linux/64;
  • LoongArch : Linux/64;
  • وإصدار محدود أحادي الخيوط لنظام x86 : Win/32.

انظر أيضاً

مراجع

  1. بوشاييفيتس، أولكسندر (2006). BMDFM: بيئة موازاة وقت التشغيل لتدفق البيانات الهجينة للمعالجات المتعددة ذات الذاكرة المشتركة (أطروحة). جامعة ميونخ التقنية (TUM)، ألمانيا (نُشرت في 25 فبراير 2006).
  2. "urn:nbn:de:bvb:91-diss20060316-1748151609" . مُحلِّل URN NBN لألمانيا وسويسرا. 22 مارس 2006.