واجهة تمرير الرسائل

واجهة تمرير الرسائل Message Passing Interface واختصارها MPI ، هي مكتبة معيارية تم اعتمادها في مجمع ال MPI أو (MPI Forum : MPIF), (هذا المجمع يحوي أكثر من 40 منظمة مشتركة تتضمن مصنِّعين وباحثين ومطوري مكاتب برمجية ومستخدمين). وبذلك فهي ليست معيار IEEE أو ISO , وانما هي "معيار صناعي". وهي مخصصة لمستخدمي و مطوري مكتبات تمرير الرسائل. الهدف منها هو تقديم معيار يستخدم بشكل واسع لكتابة برامج تمرير الرسائل, يتمتع بالخواص التالية:

  • عملي
  • قابل للحمل
  • فعال
  • مرن

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

تاريخها و تطورها:

كانت حصيلة جهود أفراد ومجموعات متنوعة خلال الفترة بين العامين 1992-1994

نظرة تاريخية سريعة

  • 1980 – 1990: تم استخدام عدداً من الأدوات البرمجية المتنافسة لكتابة برامج للذاكرة الموزعة, تطوير الحساب التفرعي. و هذه الأدوات تختلف فيما بينها بـ : قابلية الحمل, الأداء , الوظائف التي تؤديها و السعر. و هذا كله زاد الحاجة لوضع معيار.
  • نيسان (أبريل) 1992: تم العمل بوشة عمل لاستخلاص معيار لل MPI ضمن بيئة ذاكرة موزعة, تمت رعايته من قبل مركز لبحث في الحساب التفرعي (Williamsburg , Virginia) (ولاية فرجينيا).

فتم تقرير المعيار الأساسي الأبرز و الجوهري لواجهة تمرير الرسائل, و تأسست ورشة عمل لتتم المهمة, و تم تطوير المسودة التمهيدية المقترحة فيما بعد.

  • تشرين الثاني , 1992: تم تقديم مسودة (MPI1) من قبل (ORNL).
  • أيار , 1994: تم رفع الاصدار النهائي من المسودة: و هي متاحة على الرابط التالي : [1]
  • تم رفع الاصدار MPI-2 في حين تم اهمال MPI الأولى, و أصبحت ال MPI النظامية تعرف ب MPI-1, في حين أن MPI-2 تم تغطيتها فيما بعد و انتهت عام 1996.
  • اليوم: تطبيقات ال MPI هي اتحاد بين MPI-1 و MPI-2 .

بعض خصائص MPI:

  • المعيارية: حيث تعتبر مكتبة معيارية , و استطاعت أن تحل محل كل مكتبات تمرير الرسائل السابقة لها.
  • قابلية الحمل: فعندما تريد أن تنفذ الكود المصدري لتطبيقك على منصة عمل أخرى غير التي كنت تعمل عليها , فهذا لن يتطلب منك أي تعديل بالكود المصدري.
  • الأداء المناسب: تطبيقات المصنِّعين يجب أن تتلائم و بشكل احترافي مع العتاد ليعمل بأدائه الأمثلي , و هذا ما سعت ال MPI لتحقيقه.
  • الوظائف: مكتبة ال MPI تحوي أكثر من 115 تابع معرف ضمن MPI-1 لوحدها.
  • المتاحية: تتيح تطبيقات متعددة لكل من المصنِّعين و الميدان العام.

نموذج البرمجة

  • MPI توجه نفسها و بشكل افتراضي لأي نموذج برمجة تفرعية ذو ذاكرة موزعة. و بالاضافة لذلك فهي تستخدم و بشكل شائع (من وراء الكواليس) لانجاز بعض نماذج الذاكرة المشتركة, مثل : تفريع البيانات على بنى ذات ذاكرة موزعة.
  • العتاد:
    • الذاكرة الموزعة: ال MPI موجهة للأنظمة ذات الذاكرة الموزعة.
    • الذاكرة المشتركة: ظهرت ال MPI من أجل الأنظمة ذات الذاكرة المشتركة التي أصبحت شائعة خصوصا ببنى SMP / NUMA .
  • عدد المهام المخصصة للعمل على برنامج تفرعي ساكن . و تحديد مهام جديدة لا يمكن أن يحدث ديناميكياً أثناء تنفيذ البرنامج.

كيفية البرمجة بـ MPI:

(ملاحظة: سيتم كتابة الأمثلة بلغة C و Fortran)

الملف الرأسي

يجب تضمينه بكل البرامج و التوابع التي تستدعي مكتبة ال MPI

تضمينه بلغة C تضمينه بلغة Fortran
"include "mpi.h# 'include 'mpf.h

صيغة الاستدعاء ل MPI

C Binging
الصيغة (.... ,rc = MPI_Xxxxx(parameter
مثال ( rc = MPI_Bsend(&buf,count,type,dest,tag,comm
كود الخطأ في حال نجاح عملية الاستدعاء سيرد التابع المستدعى القيمة: MPI_SUCCESS


ملاحظة: لغة C حساسة لحالة الأحرف , أما Fortran فليست كذلك.

البنية العامة لبرنامج MPI:

http://img690.imageshack.us/img690/2241/39568167.png

الموصلات (communicators) و المجموعات (groups):

  • تستخدم واجهة تبادل الرسائل MPI أغراض تُدعى موصِّلات (communicators) و مجموعات لتحدد مجموعة المهام التي من الممكن أن تتصل مع بعضها. و معظم توابع ال MPI تتطلب تحديد موصِّل كمتحول يتم تمريره ضمنها (argument).
  • في حال لم يتم تعريف موصِّل يتم استخدام موصِّل معرف مسبقاً هو (MPI_COMM_WORLD)يتضمن كل مهام ال MPI التي تقوم بتعريفها .

http://img714.imageshack.us/img714/6880/commworld.gif

التسلسل (Rank):

  • ضمن الموصِّل يكون لكل مهمة معرِّف هو رقم صحيح غير مكرر يقوم النظام باعطائه للمهمة عند تهيئتها. و يدعى أحياناّ برقم المهمة (task ID) . و هذه الأرقام متسلسلة و تبدأ من الصفر.
  • يستخدم المبرمج هذه الأرقام لتحديد مصدر ووجهة الرسائل. و غالباّ ما نستخدمها ضمن التطبيق كشروط تمكننا من التحكم بالتنفيذ, مثلاً : (اذا كان الرقم = 0 اعمل عمل معين , و اذا كان الرقم = 1 اعمل عمل آخر).

توابع الاتصال التجميعي :

تابع MPI_Bcast

يرسل الرسالة من مهمة الى كل المهام الموجودة معها بنفس المجموعة.

http://img571.imageshack.us/img571/5724/mpibcast.gif

تابع MPI_Scatter

يوزع رسائل متمايزة من مهمة مصدر واحدة الى كل المهام في المجموعة.

http://img269.imageshack.us/img269/5277/mpiscatter.gif

تابع MPI_Gather

يجمع رسائل متمايزة من كل مهمة ضمن المجموعة الى مهمة وجهة واحدة , فهو معاكس تماماً للتابع MPI_Scatter.

http://img708.imageshack.us/img708/2264/mpigather.gif


. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

تابع MPI_Allgather

هذا التابع يوحد المعطيات لكل المهام الموجودة ضمن المجموعة.

http://img17.imageshack.us/img17/9586/mpiallgather.gif

تابع MPI_Reduce

يطبق عملية اختزال على كل المهام الموجودة ضمن المجموعة, و يضع النتيجة بأحد هذه المهام.

http://img413.imageshack.us/img413/7407/mpireduce.gif

المصادر

computing.llnl.gov/tutorials/mpi

مواضيع متعلقة

وصلات خارجية

المراجع

  • Using MPI - 2nd Edition: by William Gropp, Ewing Lusk, and Anthony Skjellum
  • Parallel Programming With MPI by Peter Pacheco
  • MPI: The Complete Reference (2-volume set) by Marc Snir and William Gropp
  • Parallel Programming in C with MPI and OpenMP by Michael J. Quinn