نموذج البرمجة المتوازية

في مجال الحوسبة ، يُعدّ نموذج البرمجة المتوازية تجريدًا لبنية الحاسوب المتوازية ، وهو يُسهّل التعبير عن الخوارزميات وتركيبها في برامج . تُقاس قيمة نموذج البرمجة بعموميته : أي مدى قدرته على التعبير عن مجموعة متنوعة من المشكلات المختلفة لمجموعة متنوعة من البنى، وأدائه : أي مدى كفاءة تنفيذ البرامج المُترجمة. [ 1 ] يمكن أن يتخذ تطبيق نموذج البرمجة المتوازية شكل مكتبة تُستدعى من لغة برمجة ، كامتداد للغات موجودة.

يُعدّ التوافق حول نموذج برمجة مُحدد أمرًا بالغ الأهمية، لأنه يُتيح بناء حواسيب متوازية مختلفة تدعم هذا النموذج، مما يُسهّل نقل البرمجيات. وبهذا المعنى، تُوصف نماذج البرمجة بأنها جسر يربط بين العتاد والبرمجيات. [ 2 ]

تصنيف نماذج البرمجة المتوازية

يمكن تقسيم تصنيفات نماذج البرمجة المتوازية بشكل عام إلى مجالين: تفاعل العمليات وتجزئة المشكلة. [ 3 ] [ 4 ] [ 5 ]

تفاعل العمليات

يشير تفاعل العمليات إلى الآليات التي تمكّن العمليات المتوازية من التواصل فيما بينها. ومن أكثر أشكال التفاعل شيوعاً الذاكرة المشتركة وتبادل الرسائل، ولكن يمكن أن يكون التفاعل ضمنياً أيضاً (غير مرئي للمبرمج).

الذاكرة المشتركة

تُعدّ الذاكرة المشتركة وسيلة فعّالة لتمرير البيانات بين العمليات. في نموذج الذاكرة المشتركة، تتشارك العمليات المتوازية مساحة عناوين عامة تقرأ وتكتب إليها بشكل غير متزامن. قد يؤدي الوصول المتزامن غير المتزامن إلى حالات تنافس ، ويمكن استخدام آليات مثل الأقفال والإشارات والمراقبات لتجنبها. تدعم المعالجات متعددة النوى التقليدية الذاكرة المشتركة بشكل مباشر، وقد صُممت العديد من لغات البرمجة المتوازية ومكتباتها، مثل Cilk و OpenMP و Threading Building Blocks ، للاستفادة منها .

تمرير الرسائل

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

مساحة عناوين عالمية مقسمة

توفر نماذج مساحة العناوين العالمية المقسمة (PGAS) حلاً وسطاً بين الذاكرة المشتركة وتمرير الرسائل. توفر PGAS تجريداً لمساحة عناوين الذاكرة العالمية مقسمة منطقياً، حيث يكون جزء منها محلياً لكل عملية. تتواصل العمليات المتوازية من خلال تنفيذ عمليات (مثل القراءة والكتابة) بشكل غير متزامن على مساحة العناوين العالمية، بطريقة تُشبه نماذج الذاكرة المشتركة. مع ذلك، من خلال التقسيم الدلالي لمساحة العناوين العالمية إلى أجزاء ذات صلة بعمليات محددة، فإنها تُمكّن المبرمجين من استغلال خاصية المرجعية المحلية ، وتُتيح تنفيذاً فعالاً على الحواسيب المتوازية ذات الذاكرة الموزعة . تُقدم PGAS من قِبل العديد من لغات البرمجة المتوازية ومكتباتها، مثل Fortran 2008 و Chapel و UPC++ و SHMEM .

التفاعل الضمني

في النموذج الضمني، لا يكون تفاعل العمليات مرئيًا للمبرمج، بل يتولى المترجم و/أو بيئة التشغيل مسؤولية تنفيذه. ومن الأمثلة على التوازي الضمني لغات البرمجة المتخصصة في مجال معين، حيث يُحدد التزامن ضمن العمليات عالية المستوى مسبقًا، ولغات البرمجة الوظيفية، إذ يسمح غياب الآثار الجانبية بتنفيذ الدوال غير المترابطة بالتوازي. [ 6 ] مع ذلك، يصعب إدارة هذا النوع من التوازي [ 7 ] ، ولذا توفر لغات البرمجة الوظيفية، مثل Concurrent Haskell و Concurrent ML، ميزات لإدارة التوازي بشكل صريح وصحيح.

تجزئة المشكلة

يتألف البرنامج المتوازي من عمليات تُنفذ في وقت واحد. ويتعلق تجزئة المشكلة بالطريقة التي تُصاغ بها العمليات المكونة له. [ 8 ] [ 5 ]

التوازي بين المهام

يركز نموذج التوازي في المهام على العمليات، أو مسارات التنفيذ. غالبًا ما تكون هذه العمليات متميزة سلوكيًا، مما يؤكد على ضرورة التواصل. يُعدّ التوازي في المهام طريقة طبيعية للتعبير عن التواصل القائم على تبادل الرسائل. في تصنيف فلين ، يُصنّف التوازي في المهام عادةً إلى MIMD / MPMD أو MISD .

التوازي في البيانات

يركز نموذج المعالجة المتوازية للبيانات على إجراء عمليات على مجموعة بيانات، عادةً ما تكون مصفوفة منتظمة البنية. ستعمل مجموعة من المهام على هذه البيانات، ولكن بشكل مستقل على أقسام منفصلة. في تصنيف فلين ، تُصنف المعالجة المتوازية للبيانات عادةً إلى MIMD / SPMD أو SIMD .

التوازي بين التيارات

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

التوازي الضمني

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

مصطلحات

ترتبط نماذج البرمجة المتوازية ارتباطًا وثيقًا بنماذج الحوسبة . يُعد نموذج الحوسبة المتوازية تجريدًا يُستخدم لتحليل تكلفة العمليات الحسابية، ولكنه ليس بالضرورة عمليًا، إذ يمكن تنفيذه بكفاءة في الأجهزة و/أو البرامج. في المقابل، يتضمن نموذج البرمجة تحديدًا الاعتبارات العملية لتنفيذ الأجهزة والبرامج. [ 9 ]

قد تعتمد لغة البرمجة المتوازية على نموذج برمجة واحد أو مجموعة من النماذج. على سبيل المثال، تعتمد لغة فورتران عالية الأداء على تفاعلات الذاكرة المشتركة وتجزئة المشكلات المتوازية للبيانات، بينما توفر لغة جو آلية لتفاعلات الذاكرة المشتركة وتبادل الرسائل.

أمثلة على نماذج البرمجة المتوازية

اسمنوع التفاعلفئة التحللأمثلة على التطبيقات
عارض أزياء ممثلتمرير الرسائل غير المتزامنمهمةD ، إرلانج ، سكالا ، سالسا
المعالجة المتوازية المتزامنة بالجملةالذاكرة المشتركةمهمةأباتشي جيراف ، أباتشي هاما ، BSPlib
التواصل بشأن العمليات المتسلسلةتمرير الرسائل المتزامنةمهمةأدا ، أوكام ، فيريلوج سي إس بي ، جو
الدوائرتمرير الرسائلمهمةفيريلوج ، في إتش دي إل
تدفق البياناتتمرير الرسائلمهمةLustre و TensorFlow و Apache Flink
وظيفيتمرير الرسائلمهمةهاسكل المتزامنة ، تعلم الآلة المتزامنة
آلة LogPتمرير الرسائل المتزامنةغير محددلا أحد
آلة الوصول العشوائي المتوازيةالذاكرة المشتركةبياناتCilk ، CUDA ، OpenMP ، وحدات بناء الخيوط ، XMTC
SPMD PGASمساحة عناوين عالمية مقسمةبياناتفورتران 2008 ، لغة سي المتوازية الموحدة ، UPC++ ، SHMEM
التوازي بين المهام من منظور عالميمساحة عناوين عالمية مقسمةمهمةكنيسة صغيرة ، X10

انظر أيضاً

مراجع

  1. سكيلكورن، ديفيد ب.، "نماذج للحوسبة المتوازية العملية"، المجلة الدولية للبرمجة المتوازية، 20.2، 133-158 (1991)، https://www.ida.liu.se/~chrke55/papers/modelsurvey.pdf
  2. ليزلي جي. فاليانت، "نموذج ربط للحوسبة المتوازية"، اتصالات ACM، المجلد 33، العدد 8، أغسطس 1990، الصفحات 103-111.
  3. جون إي. سافاج، نماذج الحوسبة: استكشاف قوة الحوسبة، 2008، الفصل 7 (الحوسبة المتوازية)، https://cs.brown.edu/~jes/book/ مؤرشف بتاريخ 5 نوفمبر 2016 في أرشيف الإنترنت
  4. "1.3 نموذج البرمجة المتوازية" . www.mcs.anl.gov . تاريخ الاسترجاع: 21-03-2024 .
  5. 1 2 "مقدمة في الحوسبة المتوازية | HPC @ LLNL" . hpc.llnl.gov . تم الاطلاع عليه بتاريخ 21-03-2024 .
  6. هاموند، كيفن. البرمجة الوظيفية المتوازية: مقدمة. في الندوة الدولية حول الحوسبة الرمزية المتوازية، ص 46. 1994.
  7. ماكبيرني، دي إل، و م. رونان سليب. "تجارب قائمة على الحوسبة المتوازية مع بنية ZAPP". PARLE: البنى واللغات المتوازية في أوروبا. سبرينغر برلين هايدلبرغ، 1987.
  8. "2.2 التقسيم" . www.mcs.anl.gov . تم الاطلاع عليه بتاريخ 21-03-2024 .
  9. سكيلكورن، ديفيد ب.، ودومينيكو تاليا، نماذج ولغات للحوسبة المتوازية، مجلة ACM Computing Surveys، 30.2، 123-169 (1998)، https://www.cs.utexas.edu/users/browne/CS392Cf2000/papers/ModelsOfParallelComputation-Skillicorn.pdf

للمزيد من القراءة