قابلة تمرير الرسائل
قابلة تمرير الرسائل 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
الصيغة | (.... ,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
المصادر
- www-unix.mcs.anl.gov/mpi
computing.llnl.gov/tutorials/mpi
مواضيع متعلقة
- المعالجة التفرعية
- تصنيف الحاسبات المتوازية
- تنظيم الكاش في المعالجات التفرعية
- MPICH
- LAM/MPI
- Open MPI
- Intel MPI
- HP MPI
- Microsoft Messaging Passing Interface
- OpenMP
- SHMEM
- Global Arrays
- Unified Parallel C
- Co-array Fortran
- Occam programming language
- Linda (coordination language)
- X10 (programming language)
- Parallel Virtual Machine
- Calculus of communicating systems
- Calculus of Broadcasting Systems
- Actor model
- Interconnect Driven Server
- DDT Debugging tool for MPI programs
- Bulk Synchronous Parallel BSP Programming
- Partitioned global address space
وصلات خارجية
- MPI specification
- MPI Tutorial
- Parallel Programming with MPI
- MacMPI
- MPI over SCTP
- MPI DMOZ category
- Open MPI web site
- LAM/MPI web site
المراجع
- 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