واجهة تمرير الرسائل
واجهة تمرير الرسائل 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
المصادر
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