واجهة تمرير الرسائل
تحتوي هذه المقالة على العديد من المشكلات. يُرجى المساعدة في تحسينها أو مناقشة هذه المشكلات على صفحة المناقشة . ( تعرف على كيفية ومتى يمكنك إزالة هذه الرسائل )
|
واجهة تمرير الرسائل ( MPI ) هي معيار قياسي محمول لتمرير الرسائل مصمم للعمل على بنيات الحوسبة المتوازية . [1] يحدد معيار MPI قواعد بناء الجملة والدلالات لروتينات المكتبة المفيدة لمجموعة واسعة من المستخدمين الذين يكتبون برامج تمرير الرسائل المحمولة في C و C++ و Fortran . هناك العديد من تطبيقات MPI مفتوحة المصدر ، والتي عززت تطوير صناعة البرمجيات المتوازية ، وشجعت على تطوير تطبيقات موازية محمولة وقابلة للتطوير على نطاق واسع.
تاريخ
بدأت جهود واجهة تمرير الرسائل في صيف عام 1991 عندما بدأت مجموعة صغيرة من الباحثين مناقشات في منتجع جبلي في النمسا. ومن تلك المناقشة جاءت ورشة عمل حول معايير تمرير الرسائل في بيئة ذاكرة موزعة، والتي عقدت في الفترة من 29 إلى 30 أبريل 1992 في ويليامزبيرج بولاية فيرجينيا . [2] ناقش الحاضرون في ويليامزبيرج الميزات الأساسية الضرورية لواجهة تمرير الرسائل القياسية وأنشأوا مجموعة عمل لمواصلة عملية التوحيد القياسي. قدم جاك دونجارا وتوني هي وديفيد دبليو ووكر مسودة اقتراح أولية، "MPI1"، في نوفمبر 1992. في نوفمبر 1992، عقد اجتماع لمجموعة عمل MPI في مينيابوليس وقرر وضع عملية التوحيد القياسي على أساس أكثر رسمية. اجتمعت مجموعة عمل MPI كل 6 أسابيع طوال الأشهر التسعة الأولى من عام 1993. وتم تقديم مسودة معيار MPI في مؤتمر Supercomputing '93 في نوفمبر 1993. [3] بعد فترة من التعليقات العامة، والتي أسفرت عن بعض التغييرات في MPI، تم إصدار الإصدار 1.0 من MPI في يونيو 1994. شكلت هذه الاجتماعات ومناقشة البريد الإلكتروني معًا منتدى MPI، الذي كانت عضويته مفتوحة لجميع أعضاء مجتمع الحوسبة عالية الأداء .
شارك في جهود MPI حوالي 80 شخصًا من 40 منظمة، معظمها في الولايات المتحدة وأوروبا. وشاركت أغلب الشركات الكبرى التي تبيع أجهزة الكمبيوتر المتزامنة في جهود MPI، بالتعاون مع باحثين من الجامعات والمختبرات الحكومية والصناعة .
توفر MPI لموردي الأجهزة المتوازية مجموعة أساسية محددة بوضوح من الروتينات التي يمكن تنفيذها بكفاءة. ونتيجة لذلك، يمكن لموردي الأجهزة البناء على هذه المجموعة من الروتينات القياسية منخفضة المستوى لإنشاء روتينات ذات مستوى أعلى لبيئة الاتصالات الموزعة للذاكرة المزودة بأجهزتهم المتوازية . توفر MPI واجهة محمولة سهلة الاستخدام للمستخدم الأساسي، ولكنها قوية بما يكفي للسماح للمبرمجين باستخدام عمليات تمرير الرسائل عالية الأداء المتوفرة على الأجهزة المتقدمة.
في محاولة لإنشاء معيار عالمي لتمرير الرسائل، لم يقم الباحثون بتأسيسه على نظام واحد بل قاموا بدمج الميزات الأكثر فائدة من العديد من الأنظمة، بما في ذلك تلك التي صممتها IBM و Intel و nCUBE و PVM و Express و P4 و PARMACS. يعد نموذج تمرير الرسائل جذابًا بسبب قابلية النقل الواسعة ويمكن استخدامه في الاتصالات للمعالجات المتعددة ذات الذاكرة الموزعة والذاكرة المشتركة وشبكات محطات العمل ومجموعة من هذه العناصر. يمكن تطبيق النموذج في إعدادات متعددة، بغض النظر عن سرعة الشبكة أو بنية الذاكرة.
وقد جاء الدعم لاجتماعات MPI جزئيًا من وكالة مشاريع البحوث الدفاعية المتقدمة ومن مؤسسة العلوم الوطنية الأمريكية (NSF) بموجب المنحة ASC-9310330، واتفاقية التعاون مع مركز العلوم والتكنولوجيا التابع لمؤسسة العلوم الوطنية رقم CCR-8809615، ومن المفوضية الأوروبية من خلال مشروع Esprit P6643. كما قدمت جامعة تينيسي مساهمات مالية لمنتدى MPI.
ملخص
يحتاج هذا القسم إلى التحديث . والسبب المذكور هو: لم يتم وصف الميزات الجديدة لـ MPI-3 بشكل جيد. وفقًا للمواصفات: "يحتوي معيار MPI-3 على امتدادات كبيرة لوظائف MPI، بما في ذلك المجموعات غير الحاجزة، وعمليات الاتصال أحادية الجانب الجديدة، وروابط Fortran 2008". ( أغسطس 2022 ) |
MPI هو بروتوكول اتصال لبرمجة [4] أجهزة الكمبيوتر المتوازية . يتم دعم كل من الاتصالات من نقطة إلى نقطة والاتصالات الجماعية. MPI "هي واجهة برمجة تطبيقات لتمرير الرسائل، جنبًا إلى جنب مع مواصفات البروتوكول والدلالات لكيفية تصرف ميزاتها في أي تنفيذ." [5] أهداف MPI هي الأداء العالي وقابلية التوسع والقدرة على النقل. يظل MPI النموذج السائد المستخدم في الحوسبة عالية الأداء اليوم. [6]
لم يتم اعتماد MPI من قبل أي هيئة معايير رئيسية؛ ومع ذلك، فقد أصبح معيارًا فعليًا للاتصال بين العمليات التي تحاكي برنامجًا موازيًا يعمل على نظام ذاكرة موزعة . غالبًا ما تقوم أجهزة الكمبيوتر العملاقة ذات الذاكرة الموزعة الفعلية مثل مجموعات الكمبيوتر بتشغيل مثل هذه البرامج.
لا يتضمن نموذج MPI-1 الأساسي مفهوم الذاكرة المشتركة ، بينما يتضمن MPI-2 مفهوم الذاكرة المشتركة الموزعة المحدود . ومع ذلك، يتم تشغيل برامج MPI بانتظام على أجهزة كمبيوتر ذات ذاكرة مشتركة، ويمكن لكل من MPICH و Open MPI استخدام الذاكرة المشتركة لنقل الرسائل إذا كانت متاحة. [7] [8] إن تصميم البرامج حول نموذج MPI (على عكس نماذج الذاكرة المشتركة الصريحة ) له مزايا عند التشغيل على بنيات NUMA لأن MPI يشجع على تحديد موقع الذاكرة . تم تقديم برمجة الذاكرة المشتركة الصريحة في MPI-3. [9] [10] [11]
على الرغم من أن MPI ينتمي إلى الطبقات 5 وما فوق من نموذج OSI المرجعي ، فإن التنفيذات قد تغطي معظم الطبقات، مع استخدام المقابس وبروتوكول التحكم في الإرسال (TCP) في طبقة النقل.
تتكون معظم تطبيقات MPI من مجموعة محددة من الروتينات التي يمكن استدعاؤها مباشرة من C و C++ و Fortran (أي واجهة برمجة التطبيقات) وأي لغة قادرة على التفاعل مع مثل هذه المكتبات، بما في ذلك C# و Java و Python . تتمثل مزايا MPI مقارنة بمكتبات تمرير الرسائل القديمة في قابلية النقل (لأن MPI تم تنفيذه لكل بنية ذاكرة موزعة تقريبًا) والسرعة (لأن كل تطبيق مُحسَّن من حيث المبدأ للأجهزة التي يعمل عليها).
تستخدم MPI مواصفات مستقلة عن اللغة (LIS) للمكالمات وربط اللغة. حدد معيار MPI الأول ربط ANSI C وFortran-77 مع LIS. تم تقديم المسودة في Supercomputing 1994 (نوفمبر 1994) [12] وتم الانتهاء منها بعد ذلك بفترة وجيزة. يتكون معيار MPI-1.3 من حوالي 128 وظيفة تم إصدارها كنهاية نهائية لسلسلة MPI-1 في عام 2008. [13]
في الوقت الحاضر، يحتوي المعيار على عدة إصدارات: الإصدار 1.3 (يُختصر عادةً إلى MPI-1 )، والذي يؤكد على تمرير الرسائل ولديه بيئة تشغيل ثابتة، وMPI-2.2 (MPI-2)، والذي يتضمن ميزات جديدة مثل الإدخال/الإخراج المتوازي وإدارة العمليات الديناميكية وعمليات الذاكرة عن بُعد، [14] وMPI-3.1 (MPI-3)، والذي يتضمن امتدادات للعمليات الجماعية مع إصدارات غير حاجب وامتدادات للعمليات أحادية الجانب. [15] تحدد LIS الخاصة بـ MPI-2 أكثر من 500 وظيفة وتوفر روابط لغوية لـ ISO C وISO C++ و Fortran 90. تمت إضافة قابلية التشغيل البيني للكائنات أيضًا للسماح ببرمجة تمرير الرسائل متعددة اللغات بسهولة. كان أحد الآثار الجانبية لتوحيد معيار MPI-2، الذي اكتمل في عام 1996، توضيح معيار MPI-1، وإنشاء MPI-1.2.
إن MPI-2 عبارة عن مجموعة فرعية من MPI-1، على الرغم من أن بعض الوظائف أصبحت قديمة. لا تزال برامج MPI-1.3 تعمل في ظل تنفيذات MPI المتوافقة مع معيار MPI-2.
يقدم MPI-3.0 تحديثات مهمة لمعيار MPI، بما في ذلك الإصدارات غير المانعة للعمليات الجماعية، وتحسينات للعمليات أحادية الجانب، وربط Fortran 2008. كما يزيل روابط C++ القديمة والعديد من الروتينات والكائنات القديمة. ومن المهم أن أي برنامج MPI-2.2 صالح يتجنب العناصر المحذوفة يكون صالحًا أيضًا في MPI-3.0.
MPI-3.1 هو تحديث بسيط يركز على التصحيحات والتوضيحات، وخاصة فيما يتعلق بربطات Fortran. وهو يقدم وظائف جديدة للتلاعب بقيم MPI_Aint، وإجراءات الإدخال/الإخراج الجماعية غير الحظرية، وطرق استرداد قيم الفهرس بالاسم لمتغيرات أداء MPI_T. بالإضافة إلى ذلك، تمت إضافة فهرس عام. كل برامج MPI-3.0 الصالحة صالحة أيضًا في MPI-3.1.
MPI-4.0 هو تحديث رئيسي يقدم إصدارات كبيرة من العديد من الروتينات والعمليات الجماعية المستمرة والاتصالات المقسمة وطريقة تهيئة MPI جديدة. كما يضيف تأكيدات معلومات التطبيق ويحسن تعريفات معالجة الأخطاء، إلى جانب العديد من التحسينات الأصغر. أي برنامج صالح MPI-3.1 متوافق مع MPI-4.0.
MPI-4.1 هو تحديث بسيط يركز على التصحيحات والتوضيحات لمعيار MPI-4.0. وهو يوقف العديد من الروتينات، ومفتاح السمة MPI_HOST، وملف تضمين Fortran mpif.h. تمت إضافة روتين جديد للاستعلام عن الأجهزة التي تعمل على تشغيل برنامج MPI. يظل أي برنامج MPI-4.0 صالحًا في MPI-4.1.
غالبًا ما تتم مقارنة MPI بـ Parallel Virtual Machine (PVM)، وهي بيئة موزعة شائعة ونظام لتمرير الرسائل تم تطويره في عام 1989، والذي كان أحد الأنظمة التي حفزت الحاجة إلى تمرير الرسائل بالتوازي القياسي. يمكن اعتبار نماذج برمجة الذاكرة المشتركة المتعددة الخيوط (مثل Pthreads و OpenMP ) وبرمجة تمرير الرسائل (MPI/PVM) مكملتين وتم استخدامهما معًا في بعض الأحيان، على سبيل المثال، في الخوادم ذات العقد الكبيرة المتعددة للذاكرة المشتركة.
الوظيفة
لا يستشهد هذا القسم بأي مصادر . ( يوليو 2021 ) |
تهدف واجهة MPI إلى توفير الطوبولوجيا الافتراضية الأساسية والمزامنة ووظائف الاتصال بين مجموعة من العمليات (التي تم تعيينها إلى العقد/الخوادم/مثيلات الكمبيوتر) بطريقة مستقلة عن اللغة، مع بناء جملة خاص باللغة (الارتباطات)، بالإضافة إلى بعض الميزات الخاصة باللغة. تعمل برامج MPI دائمًا مع العمليات، ولكن المبرمجين يشيرون عادةً إلى العمليات على أنها معالجات. عادةً، للحصول على أقصى أداء، سيتم تعيين عملية واحدة فقط لكل وحدة معالجة مركزية (أو نواة في جهاز متعدد النواة). يحدث هذا التعيين في وقت التشغيل من خلال الوكيل الذي يبدأ برنامج MPI، والذي يُسمى عادةً mpirun أو mpiexec.
تتضمن وظائف مكتبة MPI، على سبيل المثال لا الحصر، عمليات الإرسال/الاستقبال من نوع الالتقاء من نقطة إلى نقطة، والاختيار بين طوبولوجيا عملية منطقية ديكارتية أو شبيهة بالرسم البياني ، وتبادل البيانات بين أزواج العمليات (عمليات الإرسال/الاستقبال)، والجمع بين النتائج الجزئية للعمليات الحسابية (عمليات التجميع والاختزال)، ومزامنة العقد (عملية الحاجز)، بالإضافة إلى الحصول على معلومات متعلقة بالشبكة مثل عدد العمليات في جلسة الحوسبة، وهوية المعالج الحالية التي يتم تعيين العملية إليها، والعمليات المجاورة التي يمكن الوصول إليها في طوبولوجيا منطقية، وما إلى ذلك. تأتي العمليات من نقطة إلى نقطة في أشكال متزامنة وغير متزامنة ومخزنة مؤقتًا وجاهزة ، للسماح بدلائل أقوى وأضعف نسبيًا لجوانب المزامنة في الإرسال الالتقاء. العديد من العمليات البارزة [ بحاجة لتوضيح ] ممكنة في الوضع غير المتزامن، في معظم التطبيقات.
يتيح كل من MPI-1 وMPI-2 تنفيذات تتداخل مع الاتصالات والحوسبة، ولكن الممارسة والنظرية تختلفان. كما تحدد MPI واجهات آمنة للخيوط ، والتي تحتوي على استراتيجيات تماسك وترابط تساعد في تجنب الحالة المخفية داخل الواجهة. من السهل نسبيًا كتابة كود MPI متعدد الخيوط من نقطة إلى نقطة، وتدعم بعض التنفيذات مثل هذا الكود. يتم إنجاز الاتصال الجماعي متعدد الخيوط بشكل أفضل باستخدام نسخ متعددة من Communicators، كما هو موضح أدناه.
المفاهيم
توفر MPI العديد من الميزات. توفر المفاهيم التالية السياق لجميع هذه القدرات وتساعد المبرمج على تحديد الوظائف التي يجب استخدامها في برامج التطبيق الخاصة به. أربعة من المفاهيم الأساسية الثمانية لـ MPI فريدة من نوعها في MPI-2.
المُتواصل
تربط كائنات Communicator مجموعات العمليات في جلسة MPI. يمنح كل جهاز اتصال لكل عملية مضمنة معرفًا مستقلاً ويرتب عملياته المضمنة في طوبولوجيا مرتبة . يحتوي MPI أيضًا على مجموعات صريحة، ولكنها مفيدة بشكل أساسي لتنظيم وإعادة تنظيم مجموعات العمليات قبل إنشاء جهاز اتصال آخر. يفهم MPI عمليات داخل مجموعة واحدة داخل جهاز الاتصال، والاتصالات الثنائية بين أجهزة الاتصال. في MPI-1، تكون عمليات المجموعة المفردة هي الأكثر انتشارًا. تظهر العمليات الثنائية في الغالب في MPI-2 حيث تتضمن الاتصال الجماعي والإدارة الديناميكية داخل العملية.
يمكن تقسيم أجهزة الاتصال باستخدام العديد من أوامر MPI. تتضمن هذه الأوامر MPI_COMM_SPLIT، حيث تنضم كل عملية إلى أحد أجهزة الاتصال الفرعية الملونة من خلال إعلان نفسها بأنها تمتلك هذا اللون.
أساسيات نقطة إلى نقطة
تتضمن العديد من وظائف MPI المهمة الاتصال بين عمليتين محددتين. ومن الأمثلة الشائعة على ذلك MPI_Send، والتي تسمح لعملية محددة بإرسال رسالة إلى عملية محددة ثانية. تعتبر العمليات من نقطة إلى نقطة، كما تسمى، مفيدة بشكل خاص في الاتصالات النمطية أو غير المنتظمة، على سبيل المثال، بنية البيانات المتوازية حيث يقوم كل معالج بشكل روتيني بتبادل مناطق البيانات مع معالجات أخرى محددة بين خطوات الحساب، أو بنية الرئيسي والتابع حيث يرسل الرئيسي بيانات مهمة جديدة إلى تابع كلما اكتملت المهمة السابقة.
تحدد MPI-1 آليات الاتصال من نقطة إلى نقطة، سواء كانت حاجبةً أو غير حاجبةً، بالإضافة إلى ما يسمى بآلية "الإرسال الجاهز"، حيث لا يمكن تقديم طلب إرسال إلا عندما يتم تقديم طلب الاستلام المطابق بالفعل.
الأساسيات الجماعية
تتضمن الوظائف الجماعية التواصل بين جميع العمليات في مجموعة عمليات (والتي يمكن أن تعني مجموعة العمليات بالكامل أو مجموعة فرعية محددة بواسطة البرنامج). الوظيفة النموذجية هي المكالمة MPI_Bcast(اختصار لـ " البث "). تأخذ هذه الوظيفة البيانات من عقدة واحدة وترسلها إلى جميع العمليات في مجموعة العمليات. العملية العكسية هي المكالمة MPI_Reduce، والتي تأخذ البيانات من جميع العمليات في مجموعة، وتنفذ عملية (مثل الجمع)، وتخزن النتائج على عقدة واحدة. MPI_Reduceغالبًا ما تكون مفيدة في بداية أو نهاية حساب موزع كبير، حيث يعمل كل معالج على جزء من البيانات ثم يجمعها في نتيجة.
تؤدي عمليات أخرى مهام أكثر تعقيدًا، مثل MPI_Alltoallإعادة ترتيب n عنصرًا من البيانات بحيث تحصل العقدة رقم n على عنصر البيانات رقم
n من كل منها.
أنواع البيانات المشتقة
تتطلب العديد من وظائف MPI تحديد نوع البيانات التي يتم إرسالها بين العمليات. وذلك لأن MPI يهدف إلى دعم البيئات غير المتجانسة حيث قد يتم تمثيل الأنواع بشكل مختلف على العقد المختلفة [16] (على سبيل المثال، قد يقومون بتشغيل بنيات وحدة معالجة مركزية مختلفة لها ترتيب طرفي مختلف )، وفي هذه الحالة يمكن لتطبيقات MPI إجراء تحويل البيانات . [16] نظرًا لأن لغة C لا تسمح بمرور النوع نفسه كمعلمة، فإن MPI يحدد مسبقًا الثوابت MPI_INT، MPI_CHAR، MPI_DOUBLEلتتوافق مع int، char، double، إلخ.
فيما يلي مثال في لغة C يمرر مصفوفات من ints من جميع العمليات إلى عملية واحدة. تسمى العملية المتلقية عملية "الجذر"، ويمكن أن تكون أي عملية محددة ولكنها عادةً ما تكون العملية 0. تطلب جميع العمليات إرسال مصفوفاتها إلى الجذر باستخدام MPI_Gather، وهو ما يعادل أن تقوم كل عملية (بما في ذلك الجذر نفسه) باستدعاء MPI_Sendويقوم الجذر بإجراء العدد المقابل من MPI_Recvالاستدعاءات المرتبة لتجميع كل هذه المصفوفات في واحدة أكبر: [17]
int send_array [ 100 ]; int root = 0 ; /* أو أيًا كان */ int num_procs , * recv_array ; MPI_Comm_size ( comm , & num_procs ); recv_array = malloc ( num_procs * sizeof ( send_array )); MPI_Gather ( send_array , sizeof ( send_array ) / sizeof ( * send_array ), MPI_INT , recv_array , sizeof ( send_array ) / sizeof ( * send_array ), MPI_INT , root , comm );
ومع ذلك، قد ترغب بدلاً من ذلك في إرسال البيانات ككتلة واحدة بدلاً من 100 intثانية. للقيام بذلك، قم بتعريف نوع بيانات مشتق من "كتلة متجاورة":
نوع بيانات MPI نوع جديد ؛ نوع MPI_متجاور ( 100 ، MPI_INT ، ونوع جديد )؛ التزام MPI_نوع ( نوع جديد )؛ MPI_Gather ( مصفوفة ، 1 ، نوع جديد ، مصفوفة استقبال ، 1 ، نوع جديد ، جذر ، اتصال )؛
لتمرير فئة أو بنية بيانات، MPI_Type_create_structيتم إنشاء نوع بيانات مشتق من MPI من MPI_predefinedأنواع البيانات، على النحو التالي:
int MPI_Type_create_struct ( int count ، int * blocklen ، MPI_Aint * disp ، MPI_Datatype * type ، MPI_Datatype * newtype )
أين:
countهو عدد الكتل، ويحدد الطول (بالعناصر) للمصفوفاتblocklen،disp، وtype.blocklenيحتوي على عدد من العناصر في كل كتلة،dispيحتوي على إزاحات البايت لكل كتلة،typeيحتوي على أنواع العناصر في كل كتلة.newtype(الإخراج) يحتوي على النوع المشتق الجديد الذي تم إنشاؤه بواسطة هذه الوظيفة
تُعد مصفوفة disp(الإزاحات) ضرورية لمحاذاة بنية البيانات ، حيث قد يقوم المترجم بتبطين المتغيرات في فئة أو بنية بيانات. الطريقة الأكثر أمانًا للعثور على المسافة بين الحقول المختلفة هي الحصول على عناوينها في الذاكرة. يتم ذلك باستخدام MPI_Get_address، وهو نفس &عامل C عادةً ولكن قد لا يكون هذا صحيحًا عند التعامل مع تجزئة الذاكرة . [18]
إن تمرير بنية بيانات ككتلة واحدة أسرع بشكل ملحوظ من تمرير عنصر واحد في كل مرة، وخاصة إذا كان من المقرر تكرار العملية. وذلك لأن الكتل ذات الحجم الثابت لا تتطلب التسلسل أثناء النقل. [19]
بالنظر إلى هياكل البيانات التالية:
البنية A { int f ؛ قصيرة p ؛ };
البنية B { البنية A a ؛ int pp ، vp ؛ };
فيما يلي الكود C لبناء نوع بيانات مشتق من MPI:
ثابت ثابت int blocklen [ ] = { 1 ، 1 ، 1 ، 1 }؛ ثابت ثابت MPI_Aint disp [] = { إزاحة ( هيكل B ، أ ) + إزاحة ( هيكل A ، و )، إزاحة ( هيكل B ، أ ) + إزاحة ( هيكل A ، ص )، إزاحة ( هيكل B ، ص )، إزاحة ( هيكل B ، ف ) }؛ ثابت نوع بيانات MPI [] = { MPI_INT ، MPI_SHORT ، MPI_INT ، MPI_INT }؛ نوع بيانات MPI نوع جديد ؛ MPI_Type_create_struct ( حجم ( النوع ) / حجم ( * النوع )، blocklen ، disp ، النوع ، والنوع الجديد )؛ MPI_Type_commit ( & نوع جديد )؛
مفاهيم MPI-2
التواصل من جانب واحد
يحدد MPI-2 ثلاث عمليات اتصال أحادية الجانب، MPI_Putو MPI_Getو و MPI_Accumulate، وهي كتابة إلى ذاكرة بعيدة، وقراءة من ذاكرة بعيدة، وعملية اختزال على نفس الذاكرة عبر عدد من المهام، على التوالي. كما يتم تعريف ثلاث طرق مختلفة لمزامنة هذا الاتصال (الأقفال العالمية، والزوجية، والبعيدة) حيث لا تضمن المواصفات حدوث هذه العمليات حتى نقطة المزامنة.
يمكن أن تكون هذه الأنواع من المكالمات مفيدة في كثير من الأحيان للخوارزميات التي قد يكون المزامنة فيها غير ملائمة (على سبيل المثال، ضرب المصفوفة الموزعة )، أو حيث يكون من المرغوب فيه أن تتمكن المهام من موازنة حمولتها أثناء تشغيل معالجات أخرى على البيانات.
إدارة العمليات الديناميكية
هذا القسم يحتاج إلى التوسعة . يمكنك المساعدة بإضافة المزيد إليه. ( يونيو 2008 ) |
الجانب الرئيسي هو "قدرة عملية MPI على المشاركة في إنشاء عمليات MPI جديدة أو إنشاء اتصال مع عمليات MPI التي تم بدء تشغيلها بشكل منفصل." تصف مواصفات MPI-2 ثلاث واجهات رئيسية يمكن من خلالها لعمليات MPI إنشاء اتصالات بشكل ديناميكي، MPI_Comm_spawnو MPI_Comm_accept/ MPI_Comm_connectو MPI_Comm_join. MPI_Comm_spawnتسمح الواجهة لعملية MPI بإنشاء عدد من حالات عملية MPI المسماة. تشكل مجموعة عمليات MPI التي تم إنشاؤها حديثًا MPI_COMM_WORLDوحدة اتصال داخلية جديدة ولكنها يمكن أن تتواصل مع الأصل ووحدة الاتصال المتبادلة التي تعيدها الوظيفة. MPI_Comm_spawn_multipleهي واجهة بديلة تسمح للحالات المختلفة التي تم إنشاؤها بأن تكون ثنائيات مختلفة بحجج مختلفة. [20]
إدخال/إخراج
هذا القسم يحتاج إلى التوسعة . يمكنك المساعدة بإضافة المزيد إليه. ( يونيو 2008 ) |
تسمى ميزة الإدخال/الإخراج الموازية أحيانًا MPI-IO، [21] وتشير إلى مجموعة من الوظائف المصممة لتلخيص إدارة الإدخال/الإخراج على الأنظمة الموزعة إلى MPI، والسماح بالوصول بسهولة إلى الملفات بطريقة نمطية باستخدام وظيفة نوع البيانات المشتقة الموجودة.
تشير الأبحاث القليلة التي أجريت على هذه الميزة إلى أنه قد لا يكون من السهل الحصول على مكاسب عالية في الأداء باستخدام MPI-IO. على سبيل المثال، يُظهر تنفيذ عمليات ضرب المصفوفة المتفرقة باستخدام مكتبة MPI I/O سلوكًا عامًا لمكسب طفيف في الأداء، ولكن هذه النتائج غير حاسمة. [22] لم يبدأ MPI-IO في الوصول إلى اعتماد واسع النطاق إلا بعد تنفيذ فكرة الإدخال والإخراج الجماعي [23] في MPI-IO. تعمل الإدخال والإخراج الجماعي على تعزيز عرض النطاق الترددي للإدخال والإخراج للتطبيقات بشكل كبير من خلال جعل العمليات تحول بشكل جماعي عمليات الإدخال والإخراج الصغيرة وغير المتجاورة إلى عمليات كبيرة ومتجاورة، وبالتالي تقليل تكلفة القفل والبحث عن القرص. نظرًا لفوائد الأداء الهائلة، أصبحت MPI-IO أيضًا طبقة الإدخال والإخراج الأساسية للعديد من مكتبات الإدخال والإخراج الحديثة، مثل HDF5 و Parallel NetCDF . كما أدت شعبيتها إلى إجراء أبحاث حول تحسينات الإدخال والإخراج الجماعية، مثل الإدخال والإخراج المدرك للتخطيط [24] والتجميع عبر الملفات. [25] [26]
التنفيذات الرسمية
- كان التنفيذ الأولي لمعيار MPI 1.x هو MPICH ، من مختبر أرجون الوطني (ANL) وجامعة ولاية ميسيسيبي . كانت شركة IBM أيضًا من أوائل المنفذين، وقامت معظم شركات الحواسيب العملاقة في أوائل التسعينيات إما بتسويق MPICH تجاريًا أو بناء تنفيذها الخاص. كان LAM/MPI من مركز الحواسيب العملاقة في أوهايو تنفيذًا مفتوحًا مبكرًا آخر. استمر ANL في تطوير MPICH لأكثر من عقد من الزمان، ويقدم الآن MPICH-3.2، الذي ينفذ معيار MPI-3.1.
- تم تشكيل Open MPI (لا ينبغي الخلط بينه وبين OpenMP ) من خلال دمج FT-MPI، وLA-MPI، و LAM/MPI ، وPACX-MPI، ويوجد في العديد من أجهزة الكمبيوتر العملاقة TOP-500 .
هناك العديد من الجهود الأخرى المشتقة من MPICH وLAM وأعمال أخرى، بما في ذلك، على سبيل المثال لا الحصر، التنفيذات التجارية من HPE و Intel و Microsoft و NEC .
في حين أن المواصفات تلزم باستخدام واجهة C وFortran، فإن اللغة المستخدمة لتنفيذ MPI ليست مقيدة بمطابقة اللغة أو اللغات التي تسعى إلى دعمها في وقت التشغيل. تجمع معظم التطبيقات بين C وC++ ولغة التجميع، وتستهدف مبرمجي C وC++ وFortran. تتوفر روابط للعديد من اللغات الأخرى، بما في ذلك Perl وPython وR وRuby وJava و CL (انظر #روابط اللغة).
تنقسم واجهة ABI لتطبيقات MPI تقريبًا بين مشتقات MPICH و Open MPI ، بحيث تعمل مكتبة من عائلة واحدة كبديل مباشر لمكتبة من نفس العائلة، ولكن الاستبدال المباشر عبر العائلات أمر مستحيل. تحتفظ CEA الفرنسية بواجهة غلاف لتسهيل مثل هذه التبديلات. [27]
الأجهزة
تركز أبحاث أجهزة MPI على تنفيذ MPI مباشرة في الأجهزة، على سبيل المثال عبر المعالج في الذاكرة ، وبناء عمليات MPI في الدوائر الدقيقة لشرائح ذاكرة الوصول العشوائي في كل عقدة. وبالتالي، فإن هذا النهج مستقل عن اللغة ونظام التشغيل ووحدة المعالجة المركزية، ولكن لا يمكن تحديثه أو إزالته بسهولة.
كان النهج الآخر هو إضافة تسريع الأجهزة إلى جزء واحد أو أكثر من العملية، بما في ذلك معالجة الأجهزة لطوابير MPI واستخدام RDMA لنقل البيانات مباشرة بين الذاكرة ووحدة التحكم في واجهة الشبكة دون تدخل وحدة المعالجة المركزية أو نواة نظام التشغيل.
غلافات المجمّع
mpicc (وعلى نحو مماثل mpic++ و mpif90 وما إلى ذلك) هو برنامج يلف حول مُجمِّع موجود لتعيين علامات سطر الأوامر الضرورية عند تجميع الكود الذي يستخدم MPI. وعادةً ما يضيف بضعة علامات تمكن الكود من التجميع والربط بمكتبة MPI. [28]
روابط اللغة
الارتباطات عبارة عن مكتبات تعمل على توسيع دعم MPI إلى لغات أخرى من خلال تغليف تنفيذ MPI موجود مثل MPICH أو Open MPI.
البنية التحتية للغة المشتركة
إن تنفيذي Common Language Infrastructure .NET المُدارين هما Pure Mpi.NET [29] وMPI.NET، [30] وهو جهد بحثي في جامعة إنديانا مرخص بموجب ترخيص على غرار BSD . وهو متوافق مع Mono ، ويمكنه الاستفادة الكاملة من أنسجة شبكة MPI الأساسية ذات زمن الوصول المنخفض.
جافا
على الرغم من أن Java لا تحتوي على رابط MPI رسمي، إلا أن العديد من المجموعات تحاول ربط الاثنين بدرجات متفاوتة من النجاح والتوافق. كانت إحدى المحاولات الأولى هي mpiJava لـ Bryan Carpenter، [31] وهي في الأساس مجموعة من غلافات Java Native Interface (JNI) لمكتبة MPI محلية بلغة C، مما أدى إلى تنفيذ هجين مع قابلية نقل محدودة، والتي يجب أيضًا تجميعها مقابل مكتبة MPI المحددة المستخدمة.
ومع ذلك، حدد هذا المشروع الأصلي أيضًا واجهة برمجة تطبيقات mpiJava [32] ( واجهة برمجة تطبيقات MPI بحكم الأمر الواقع لـ Java والتي اتبعت عن كثب ارتباطات C++ المكافئة) والتي تبنتها مشاريع Java MPI اللاحقة الأخرى. إحدى واجهات برمجة التطبيقات الأقل استخدامًا هي واجهة برمجة تطبيقات MPJ، والتي تم تصميمها لتكون أكثر توجهاً نحو الكائنات وأقرب إلى اتفاقيات ترميز Sun Microsystems . [33] بخلاف واجهة برمجة التطبيقات، يمكن أن تعتمد مكتبات Java MPI إما على مكتبة MPI محلية، أو تنفذ وظائف تمرير الرسائل في Java، بينما توفر بعضها مثل P2P-MPI أيضًا وظيفة نظير إلى نظير وتسمح بالتشغيل على منصات مختلطة.
تنشأ بعض الأجزاء الأكثر تحديًا في Java/MPI من خصائص Java مثل الافتقار إلى المؤشرات الصريحة ومساحة عنوان الذاكرة الخطية لكائناتها، مما يجعل نقل المصفوفات متعددة الأبعاد والكائنات المعقدة غير فعال. تتضمن الحلول البديلة عادةً نقل سطر واحد في كل مرة و/أو إجراء تسلسل صريح وتحويل عند طرفي الإرسال والاستقبال، ومحاكاة المصفوفات الشبيهة بلغة C أو Fortran باستخدام مصفوفة أحادية البعد، والمؤشرات إلى أنواع بدائية باستخدام مصفوفات ذات عنصر واحد، مما يؤدي بالتالي إلى أنماط برمجة بعيدة تمامًا عن اتفاقيات Java .
نظام آخر لتمرير الرسائل في Java هو MPJ Express. [34] يمكن تنفيذ الإصدارات الأخيرة في تكوينات عنقودية ومتعددة النواة. في تكوين العنقود، يمكنه تنفيذ تطبيقات Java موازية على العناقيد والسحابات. هنا يمكن لمقابس Java أو وصلات الإدخال/الإخراج المتخصصة مثل Myrinet دعم المراسلة بين عمليات MPJ Express. يمكنه أيضًا الاستفادة من تنفيذ C الأصلي لـ MPI باستخدام جهازه الأصلي. في تكوين متعدد النواة، يتم تنفيذ تطبيق Java موازٍ على معالجات متعددة النواة. في هذا الوضع، يتم تمثيل عمليات MPJ Express بواسطة خيوط Java.
جوليا
هناك غلاف لغة Julia لـ MPI. [35]
ماتلاب
هناك عدد قليل من التطبيقات الأكاديمية لـ MPI باستخدام MATLAB . يحتوي MATLAB على مكتبة توسعة متوازية خاصة به تم تنفيذها باستخدام MPI و PVM .
أوكامل
تنفذ وحدة OCamlMPI [36] مجموعة كبيرة من وظائف MPI وهي قيد الاستخدام النشط في الحوسبة العلمية. تم "تعديل" برنامج OCaml الذي يحتوي على 11000 سطر باستخدام الوحدة، مع إضافة 500 سطر إضافي من التعليمات البرمجية وإعادة هيكلة طفيفة وتم تشغيله بنتائج ممتازة على ما يصل إلى 170 عقدة في حاسوب فائق. [37]
باري/جي بي
يمكن بناء PARI/GP [38] لاستخدام MPI كمحرك متعدد الخيوط، مما يسمح بتشغيل برامج PARI وGP المتوازية على مجموعات MPI دون تعديل.
بايثون
تتضمن غلافات MPI التي يتم صيانتها بنشاط لـ Python ما يلي: mpi4py، [39] و numba-mpi [40] وnumba-jax. [41]
تتضمن التطورات المتوقفة ما يلي: pyMPI ، وpypar، [42] و MYMPI [43] والوحدة الفرعية MPI في ScientificPython .
ر
تتضمن روابط R لـ MPI Rmpi [44] و pbdMPI ، [45] حيث يركز Rmpi على التوازي بين المدير والعامل بينما يركز pbdMPI على التوازي بين SPMD . يدعم كلا التنفيذين Open MPI أو MPICH2 بشكل كامل .
برنامج مثال
فيما يلي برنامج "Hello, World!" مكتوب بلغة MPI بلغة C. في هذا المثال، نرسل رسالة "hello" إلى كل معالج، ونقوم بمعالجتها بسهولة، ونعيد النتائج إلى العملية الرئيسية، ونطبع الرسائل.
/*
برنامج اختبار MPI "Hello World"
*/
#include <assert.h> #include <stdio.h> #include <string.h> #include <mpi.h>
int main ( int argc ، char ** argv ) { char buf [ 256 ]؛ int my_rank ، num_procs ؛
/* تهيئة البنية الأساسية اللازمة للاتصالات */
MPI_Init ( & argc , & argv );
/* تحديد هذه العملية */
MPI_Comm_rank ( MPI_COMM_WORLD , & my_rank );
/* اكتشف إجمالي عدد العمليات النشطة */
MPI_Comm_size ( MPI_COMM_WORLD , & num_procs );
/* حتى هذه النقطة، كانت جميع البرامج تقوم بنفس الشيء تمامًا.
هنا، نتحقق من الرتبة للتمييز بين أدوار البرامج */
if ( my_rank == 0 ) { int other_rank ; printf ( "لدينا %i عمليات. \n " , num_procs );
/* إرسال رسائل إلى جميع العمليات الأخرى */
for ( other_rank = 1 ; other_rank < num_procs ; other_rank ++ ) { sprintf ( buf , "Hello %i!" , other_rank ); MPI_Send ( buf , 256 , MPI_CHAR , other_rank , 0 , MPI_COMM_WORLD ); }
/* تلقي الرسائل من جميع العمليات الأخرى */
for ( other_rank = 1 ; other_rank < num_procs ; other_rank ++ ) { MPI_Recv ( buf , 256 , MPI_CHAR , other_rank , 0 , MPI_COMM_WORLD , MPI_STATUS_IGNORE ); printf ( "%s \n " , buf ); }
} آخر {
/* تلقي رسالة من العملية #0 */
MPI_Recv ( buf ، 256 ، MPI_CHAR ، 0 ، 0 ، MPI_COMM_WORLD ، MPI_STATUS_IGNORE )؛ assert ( memcmp ( buf ، "Hello" ، 6 ) == 0 )؛
/* إرسال رسالة إلى العملية #0 */
sprintf ( buf ، "عملية %i تقوم بالإبلاغ عن الواجب." ، my_rank )؛ MPI_Send ( buf ، 256 ، MPI_CHAR ، 0 ، 0 ، MPI_COMM_WORLD )؛
}
/* هدم البنية التحتية للاتصالات */
MPI_Finalize (); return 0 ; }
عند تشغيله باستخدام 4 عمليات، يجب أن ينتج الناتج التالي: [46]
$ mpicc example.c && mpiexec -n 4 ./a.out لدينا 4 عمليات. عملية 1 الإبلاغ عن الواجب. عملية 2 الإبلاغ عن الواجب. عملية 3 الإبلاغ عن الواجب.
فيما يلي mpiexecأمر يستخدم لتنفيذ برنامج المثال باستخدام 4 عمليات ، كل منها عبارة عن مثيل مستقل للبرنامج في وقت التشغيل ورتب معينة (أي معرفات رقمية) 0 و1 و2 و3. الاسم mpiexecموصى به من قبل معيار MPI، على الرغم من أن بعض التنفيذات توفر أمرًا مشابهًا تحت الاسم mpirun. MPI_COMM_WORLDهو جهاز الاتصال الذي يتكون من جميع العمليات.
يتم تسهيل نموذج برمجة برنامج واحد وبيانات متعددة ( SPMD )، ولكن ليس مطلوبًا؛ تسمح العديد من تطبيقات MPI ببدء تشغيل ملفات قابلة للتنفيذ متعددة ومختلفة في نفس مهمة MPI. كل عملية لها رتبتها الخاصة، والعدد الإجمالي للعمليات في العالم، والقدرة على التواصل بينها إما من خلال الاتصال من نقطة إلى نقطة (إرسال/استقبال)، أو من خلال الاتصال الجماعي بين المجموعة. يكفي أن توفر MPI برنامجًا على غرار SPMD MPI_COMM_WORLDبرتبته الخاصة، وحجم العالم للسماح للخوارزميات بتحديد ما يجب القيام به. في المواقف الأكثر واقعية، تتم إدارة الإدخال/الإخراج بعناية أكبر من هذا المثال. لا ينص MPI على كيفية عمل الإدخال/الإخراج القياسي (stdin، stdout، stderr) على نظام معين. إنه يعمل بشكل عام كما هو متوقع في عملية الرتبة 0، كما تقوم بعض التطبيقات أيضًا بالتقاط وتوجيه الناتج من عمليات أخرى.
يستخدم MPI مفهوم العملية بدلاً من المعالج. يتم تعيين نسخ البرنامج إلى المعالجات بواسطة وقت تشغيل MPI . بهذا المعنى، يمكن للآلة المتوازية أن تعيّن معالجًا ماديًا واحدًا، أو إلى N معالج، حيث N هو عدد المعالجات المتاحة، أو حتى شيء بينهما. لتحقيق أقصى سرعة متوازية، يتم استخدام المزيد من المعالجات المادية. يضبط هذا المثال سلوكه وفقًا لحجم العالم N ، لذلك يسعى أيضًا إلى التوسع وفقًا لتكوين وقت التشغيل دون تجميع لكل اختلاف في الحجم، على الرغم من أن قرارات وقت التشغيل قد تختلف اعتمادًا على هذا المقدار المطلق من التزامن المتاح.
اعتماد MPI-2
كان اعتماد MPI-1.2 عالميًا، وخاصة في الحوسبة العنقودية، لكن قبول MPI-2.1 كان أكثر محدودية. تتضمن المشكلات ما يلي:
- تتضمن تطبيقات MPI-2 عمليات الإدخال والإخراج وإدارة العمليات الديناميكية، كما أن حجم البرامج الوسيطة أكبر بشكل كبير. لا تستطيع معظم المواقع التي تستخدم أنظمة جدولة الدفعات دعم إدارة العمليات الديناميكية. إن عمليات الإدخال والإخراج المتوازية في MPI-2 مقبولة بشكل جيد. [ بحاجة لمصدر ]
- تم تطوير العديد من برامج MPI-1.2 قبل MPI-2. وقد أدت مخاوف قابلية النقل في البداية إلى إبطاء عملية التبني، على الرغم من أن الدعم الأوسع قد قلل من هذا.
- تستخدم العديد من تطبيقات MPI-1.2 مجموعة فرعية فقط من هذا المعيار (16-25 وظيفة) دون الحاجة الحقيقية إلى وظيفة MPI-2.
مستقبل
تبدو بعض جوانب مستقبل MPI قوية؛ والبعض الآخر أقل قوة. انعقد منتدى MPI مرة أخرى في عام 2007 لتوضيح بعض مشكلات MPI-2 واستكشاف التطورات الخاصة بـ MPI-3 المحتملة، مما أدى إلى إصداري MPI-3.0 (سبتمبر 2012) [47] وMPI-3.1 (يونيو 2015) [48] . واستمر التطوير مع الموافقة على MPI-4.0 في 9 يونيو 2021 [49] ، ومؤخرًا، تمت الموافقة على MPI-4.1 في 2 نوفمبر 2023. [50]
تتغير البنيات، مع وجود تزامن داخلي أكبر ( متعدد النواة )، وتحكم أفضل في التزامن الدقيق (الترابط، والتقارب)، ومستويات أكثر من التسلسل الهرمي للذاكرة . يمكن للبرامج متعددة الخيوط الاستفادة من هذه التطورات بسهولة أكبر من التطبيقات أحادية الخيط. وقد أسفر هذا بالفعل عن معايير منفصلة ومكملة للمعالجة المتعددة المتماثلة ، وهي OpenMP . يحدد MPI-2 كيف يجب أن تتعامل التطبيقات المتوافقة مع المعايير مع مشكلات تعدد الخيوط، ولكنه لا يتطلب أن تكون التطبيقات متعددة الخيوط، أو حتى آمنة للخيوط. يضيف MPI-3 القدرة على استخدام التوازي في الذاكرة المشتركة داخل العقدة. تقدم تطبيقات MPI مثل Adaptive MPI وHybrid MPI وFine-Grained MPI وMPC وغيرها امتدادات لمعيار MPI تعالج تحديات مختلفة في MPI.
كتب عالم الفيزياء الفلكية جوناثان دورسي مقال رأي يصف MPI بأنه عتيق، مشيرًا إلى تقنيات أحدث مثل لغة Chapel و Unified Parallel C و Hadoop و Spark و Flink . [51] في الوقت نفسه، تعتمد جميع المشاريع تقريبًا في مشروع الحوسبة Exascale صراحةً على MPI؛ وقد ثبت أن MPI يمكن توسيع نطاقها إلى أكبر الآلات اعتبارًا من أوائل عشرينيات القرن الحادي والعشرين ويُعتبر على نطاق واسع أنها ستظل ذات صلة لفترة طويلة قادمة.
انظر أيضا
مراجع
- ^ "واجهة تمرير الرسائل :: الحوسبة عالية الأداء". hpc.nmsu.edu . تم الاسترجاع في 2022-08-06 .
- ^ Walker DW (أغسطس 1992). معايير تمرير الرسائل في بيئة ذاكرة موزعة (PDF) (تقرير). مختبر أوك ريدج الوطني، تينيسي (الولايات المتحدة)، مركز أبحاث الحوسبة المتوازية (CRPC). ص. 25. OSTI 10170156. ORNL/TM-12147 . تم الاسترجاع في 2019-08-18 .
- ^ منتدى MPI، CORPORATE (15-19 نوفمبر 1993). "MPI: واجهة تمرير الرسائل". وقائع مؤتمر ACM/IEEE لعام 1993 حول الحوسبة الفائقة . الحوسبة الفائقة '93. بورتلاند، أوريجون، الولايات المتحدة الأمريكية: ACM. ص. 878-883. doi :10.1145/169627.169855. ISBN 0-8186-4340-4.
- ^ نيلسن، فرانك (2016). "2. مقدمة إلى MPI: واجهة MessagePassing". مقدمة إلى الحوسبة عالية الأداء باستخدام MPI لعلوم البيانات. سبرينغر. ص 195-211. رقم ISBN 978-3-319-21903-5.
- ^ جروب، لوسك وسكيلوم 1996، ص. 3
- ^ Sur, Sayantan; Koop, Matthew J.; Panda, Dhabaleswar K. (4 أغسطس 2017). "MPI والاتصالات---MPI عالية الأداء وقابلة للتطوير عبر InfiniBand مع تقليل استخدام الذاكرة: تحليل أداء متعمق". وقائع مؤتمر ACM/IEEE لعام 2006 حول الحوسبة الفائقة - SC '06 . ACM. ص. 105. doi :10.1145/1188455.1188565. ISBN 978-0769527000. S2CID 818662.
- ^ KNEM: اتصالات MPI عالية الأداء داخل العقدة "يستخدم MPICH2 (منذ الإصدار 1.1.1) KNEM في DMA LMT لتحسين أداء الرسائل الكبيرة داخل عقدة واحدة. يتضمن Open MPI أيضًا دعم KNEM في مكون SM BTL الخاص به منذ الإصدار 1.5. بالإضافة إلى ذلك، يتضمن NetPIPE واجهة خلفية KNEM منذ الإصدار 3.7.2."
- ^ "الأسئلة الشائعة: ضبط خصائص وقت التشغيل لاتصالات MPI sm". www.open-mpi.org .
- ^ https://software.intel.com/en-us/articles/an-introduction-to-mpi-3-shared-memory-programming?language=en "يقدم معيار MPI-3 نهجًا آخر للبرمجة الهجينة التي تستخدم نموذج MPI Shared Memory (SHM) الجديد"
- ^ الذاكرة المشتركة وMPI 3.0 "يمكن تشغيل معايير مختلفة لتحديد الطريقة الأفضل لتطبيق معين، سواء باستخدام MPI + OpenMP أو ملحقات MPI SHM. في حالة اختبار بسيطة إلى حد ما، كانت عمليات التسريع على الإصدار الأساسي الذي يستخدم الاتصال من نقطة إلى نقطة تصل إلى 5X، اعتمادًا على الرسالة."
- ^ استخدام ذاكرة MPI-3 المشتركة كنظام برمجة متعدد النواة (شرائح عرض PDF)
- ^ جدول المحتويات — سبتمبر 1994، 8 (3-4). Hpc.sagepub.com. تم الاسترجاع في 2014-03-24.
- ^ وثائق MPI. Mpi-forum.org. تم الاسترجاع في 2014-03-24.
- ^ جروب، لوسك وسكيلوم 1999ب، الصفحات من 4 إلى 5
- ^ MPI: A Message-Passing Interface StandardVersion 3.1, Message Passing Interface Forum, June 4, 2015. http://www.mpi-forum.org. تم الاسترجاع في 2015-06-16.
- ^ ab "قواعد مطابقة النوع". mpi-forum.org .
- ^ "صفحة دليل MPI_Gather(3) (الإصدار 1.8.8)". www.open-mpi.org .
- ^ "MPI_Get_address". www.mpich.org .
- ^ الأساس المنطقي لآلية هيكل/محتوى Boost.MPI (تم إنتاج الرسوم البيانية لمقارنة الأداء باستخدام NetPIPE )
- ^ جروب، لوسك وسكيلينج 1999ب، ص. 7
- ^ جروب، لوسك وسكيلينج 1999ب، الصفحات من 5 إلى 6
- ^ "عمليات ضرب المصفوفة والمتجه المتفرقة باستخدام مكتبة MPI I/O" (PDF) .
- ^ "غربلة البيانات والإدخال والإخراج الجماعي في ROMIO" (PDF) . IEEE. فبراير 1999.
- ^ تشن، يونج؛ صن، شيان هي؛ ثاكور، راجيف؛ روث، فيليب سي؛ جروب، ويليام دي. (سبتمبر 2011). "LACIO: استراتيجية جماعية جديدة للإدخال والإخراج لأنظمة الإدخال والإخراج المتوازية". ندوة المعالجة المتوازية والموزعة الدولية لمعهد مهندسي الكهرباء والإلكترونيات لعام 2011. IEEE. ص. 794-804. CiteSeerX 10.1.1.699.8972 . doi :10.1109/IPDPS.2011.79. ISBN 978-1-61284-372-8. S2CID 7110094.
- ^ تنج وانج؛ كيفن فاسكو؛ تشو ليو؛ هوي تشين؛ ويكوان يو (2016). "تحسين الإدخال/الإخراج المتوازي باستخدام التجميع عبر الحزم". المجلة الدولية لتطبيقات الحوسبة عالية الأداء . 30 (2): 241-256. doi :10.1177/1094342015618017. S2CID 12067366.
- ^ وانج، تنج؛ فاسكو، كيفن؛ ليو، تشو؛ تشين، هوي؛ يو، ويكوان (نوفمبر 2014). "BPAR: إطار عمل تجميع متوازي قائم على الحزمة لتنفيذ الإدخال/الإخراج المنفصل". ورشة العمل الدولية لعام 2014 حول أنظمة الحوسبة القابلة للتطوير كثيفة البيانات . معهد مهندسي الكهرباء والإلكترونيات. ص 25-32. doi :10.1109/DISCS.2014. رقم ISBN 978-1-4673-6750-9. S2CID 2402391.
- ^ cea-hpc. "cea-hpc/wi4mpi: واجهة التغليف لـ MPI". GitHub .
- ^ mpicc. Mpich.org. تم الاسترجاع في 2014-03-24.
- ^ Pure Mpi.NET
- ^ "MPI.NET: مكتبة C# عالية الأداء لتمرير الرسائل". www.osl.iu.edu .
- ^ "الصفحة الرئيسية لـ mpiJava". www.hpjava.org .
- ^ "مقدمة إلى واجهة برمجة التطبيقات mpiJava". www.hpjava.org .
- ^ "مواصفات واجهة برمجة التطبيقات MPJ". www.hpjava.org .
- ^ "مشروع MPJ Express". mpj-express.org .
- ^ JuliaParallel/MPI.jl، Parallel Julia، 2019-10-03 ، تم الاسترجاع 2019-10-08
- ^ "Xavier Leroy - Software". cristal.inria.fr .
- ^ أرشيف قائمة البريد الإلكتروني Caml > رسالة من Yaron M. Minsky. Caml.inria.fr (2003-07-15). تم الاسترجاع في 2014-03-24.
- ^ "مقدمة إلى GP المتوازي" (PDF) . pari.math.u-bordeaux.fr .
- ^ "mpi4py".
- ^ "نومبا-مبي".
- ^ "mpi4jax".
- ^ "أرشيف Google Code - تخزين طويل الأمد لاستضافة مشروع Google Code". code.google.com .
- ^ الآن جزء من بيدوسا
- ^ يو، هاو (2002). "Rmpi: الحوسبة الإحصائية المتوازية في R". أخبار R.
- ^ تشن، وي تشن؛ أوستروشوف، جورج؛ شميدت، درو؛ باتيل، براجنيشكومار؛ يو، هاو (2012). "pbdMPI: البرمجة باستخدام البيانات الضخمة - واجهة MPI".
- ^ تم إنتاج مقتطف الإخراج على نظام سطح مكتب Linux عادي مع تثبيت Open MPI. عادةً ما تضع توزيعات النظام أمر mpicc في حزمة openmpi-devel أو libopenmpi-dev، وفي بعض الأحيان تجعل من الضروري تشغيل "module add mpi/openmpi-x86_64" أو ما شابه قبل توفر mpicc وmpiexec.
- ^ https://www.mpi-forum.org/docs/mpi-3.0/mpi30-report.pdf
- ^ https://www.mpi-forum.org/docs/mpi-3.1/mpi31-report.pdf
- ^ https://www.mpi-forum.org/docs/mpi-4.0/mpi40-report.pdf
- ^ https://www.mpi-forum.org/docs/mpi-4.1/mpi41-report.pdf
- ^ "الحوسبة عالية الأداء تموت، وتقنية MPI تقتلها". www.dursi.ca .
قراءة إضافية
- تعتمد هذه المقالة على مادة مأخوذة من Message Passing Interface في القاموس المجاني للحوسبة على الإنترنت قبل 1 نوفمبر 2008 وتم تضمينها بموجب شروط "إعادة الترخيص" في GFDL ، الإصدار 1.3 أو الأحدث.
- أوياما، يوكيا؛ ناكانو، يونيو (1999) RS/6000 SP: برمجة MPI العملية ، ITSO
- فوستر، إيان (1995) تصميم وبناء برامج متوازية (عبر الإنترنت) أديسون ويسلي ISBN 0-201-57594-9 ، الفصل 8 واجهة تمرير الرسائل
- Wijesuriya, Viraj Brian (2010-12-29) Daniweb: نموذج كود لضرب المصفوفات باستخدام أسلوب البرمجة المتوازية MPI
- استخدام سلسلة MPI:
- غروب، ويليام؛ لوسك، إيوينج؛ سكجيلوم، أنتوني (1994). استخدام MPI: البرمجة المتوازية المحمولة مع واجهة تمرير الرسائل. كامبريدج، ماساتشوستس، الولايات المتحدة الأمريكية: سلسلة الحوسبة العلمية والهندسية لمطبعة معهد ماساتشوستس للتكنولوجيا . رقم ISBN 978-0-262-57104-3.
- غروب، ويليام؛ لوسك، إيوينج؛ سكجيلوم، أنتوني (1999أ). استخدام MPI، الإصدار الثاني: البرمجة المتوازية المحمولة باستخدام واجهة تمرير الرسائل. كامبريدج، ماساتشوستس، الولايات المتحدة الأمريكية: سلسلة الحوسبة العلمية والهندسية لمطبعة معهد ماساتشوستس للتكنولوجيا . رقم ISBN 978-0-262-57132-6.
- غروب، ويليام؛ لوسك، إيوينج؛ سكجيلوم، أنتوني (1999ب). استخدام MPI-2: الميزات المتقدمة لواجهة تمرير الرسائل. مطبعة معهد ماساتشوستس للتكنولوجيا . رقم ISBN 978-0-262-57133-3.
- غروب، ويليام؛ لوسك، إيوينج؛ سكجيلوم، أنتوني (2014). استخدام MPI، الطبعة الثالثة: البرمجة المتوازية المحمولة باستخدام واجهة تمرير الرسائل. كامبريدج، ماساتشوستس، الولايات المتحدة الأمريكية: سلسلة الحوسبة العلمية والهندسية لمطبعة معهد ماساتشوستس للتكنولوجيا . رقم ISBN 978-0-262-52739-2.
- جروب، ويليام؛ لوسك، إيوينج؛ سكجيلوم، أنتوني (1996). "تطبيق محمول عالي الأداء لواجهة تمرير الرسائل MPI". الحوسبة المتوازية . 22 (6): 789-828. CiteSeerX 10.1.1.102.9485 . doi :10.1016/0167-8191(96)00024-5.
- باتشيكو، بيتر س. (1997) البرمجة المتوازية مع MPI . [1] 500 صفحة. مورجان كوفمان ISBN 1-55860-339-5 .
- MPI—سلسلة المراجع الكاملة :
- سنير، مارك؛ أوتو، ستيف دبليو؛ هوس-ليديرمان، ستيفن؛ ووكر، ديفيد دبليو؛ دونجارا، جاك جيه. (1995) MPI: The Complete Reference . مطبعة معهد ماساتشوستس للتكنولوجيا، كامبريدج، ماساتشوستس، الولايات المتحدة الأمريكية. ISBN 0-262-69215-5
- سنير، مارك؛ أوتو، ستيف دبليو؛ هوس-ليديرمان، ستيفن؛ ووكر، ديفيد دبليو؛ دونجارا، جاك جيه (1998) MPI—المرجع الكامل: المجلد 1، جوهر MPI . مطبعة معهد ماساتشوستس للتكنولوجيا، كامبريدج، ماساتشوستس. رقم ISBN 0-262-69215-5
- غروب، ويليام؛ هوس-ليديرمان، ستيفن؛ لومسدين، أندرو؛ لوسك، إيوينج؛ نيتزبيرج، بيل؛ سافير، ويليام؛ وسنير، مارك (1998) MPI—المرجع الكامل: المجلد 2، امتدادات MPI-2 . مطبعة معهد ماساتشوستس للتكنولوجيا، كامبريدج، ماساتشوستس رقم ISBN 978-0-262-57123-4
- فيروزيان، محمد؛ نومينسين، أو. (2002) المعالجة المتوازية عبر MPI وOpenMP ، Linux Enterprise، 10/2002
- فانيسكي، ماركو (1999) نماذج متوازية للحوسبة العلمية في وقائع المدرسة الأوروبية للكيمياء الحاسوبية (1999، بيروجيا، إيطاليا)، العدد 75 في مذكرات المحاضرات في الكيمياء ، الصفحات 170-183. سبرينغر، 2000
- بالا، بروك، سايفر، إلستوندو، أ هو، سي تي هو، كيبنيس، سنير (1995) "مكتبة اتصالات جماعية محمولة وقابلة للضبط لأجهزة الكمبيوتر المتوازية القابلة للتطوير" في معاملات معهد مهندسي الكهرباء والإلكترونيات للأنظمة المتوازية والموزعة، المجلد 6، العدد 2، ص 154-164، فبراير 1995.
روابط خارجية
- الموقع الرسمي
- معيار MPI-3.1 الرسمي (إصدار HTML غير الرسمي)
- برنامج تعليمي حول MPI: واجهة تمرير الرسائل
- دليل المستخدم لـ MPI
- البرنامج التعليمي: مقدمة إلى MPI (بالسرعة التي تناسبك، ويتضمن اختبارات ذاتية وتمارين)
