سحر++
Charm++ هو نموذج برمجة كائنية التوجه متوازية مبني على لغة C++ ، وقد طُوّر في مختبر البرمجة المتوازية بجامعة إلينوي في أوربانا-شامبين . صُمم Charm++ بهدف تعزيز إنتاجية المبرمجين من خلال توفير تجريد عالي المستوى للبرنامج المتوازي ، مع ضمان أداء جيد على مجموعة واسعة من منصات الأجهزة الأساسية. تُقسّم البرامج المكتوبة بلغة Charm++ إلى عدد من الكائنات المتعاونة التي تعمل بنظام الرسائل، وتُسمى هذه الكائنات " chares" . عندما يستدعي المبرمج دالةً في أحد هذه الكائنات، يُرسل نظام تشغيل Charm++ رسالةً إلى الكائن المُستدعى، والذي قد يكون موجودًا على المعالج المحلي أو على معالج بعيد في عملية حسابية متوازية. تُحفّز هذه الرسالة تنفيذ التعليمات البرمجية داخل الكائن "chare" لمعالجة الرسالة بشكل غير متزامن.
يمكن تنظيم وحدات المعالجة في مجموعات مفهرسة تسمى مصفوفات المعالجة ، ويمكن إرسال الرسائل إلى وحدات معالجة فردية داخل مصفوفة معالجة أو إلى مصفوفة المعالجة بأكملها في وقت واحد.
يقوم نظام تشغيل تكيفي بربط وحدات المعالجة في البرنامج بالمعالجات الفعلية. وتكون عملية ربط وحدات المعالجة بالمعالجات شفافة للمبرمج، مما يسمح لنظام التشغيل بتغيير تخصيص وحدات المعالجة للمعالجات ديناميكيًا أثناء تنفيذ البرنامج لدعم وظائف مثل موازنة الأحمال القائمة على القياس، وتحمل الأعطال، والتحقق التلقائي من نقاط الحفظ، والقدرة على تقليص وتوسيع مجموعة المعالجات المستخدمة في البرنامج المتوازي.
تشمل التطبيقات المُنفذة باستخدام Charm++ كلاً من NAMD (الديناميكا الجزيئية) و OpenAtom (الكيمياء الكمومية)، و ChaNGa وSpECTRE (علم الفلك)، وEpiSimdemics (علم الأوبئة)، وCello/Enzo-E (تحسين الشبكة التكيفي). وقد تم توسيع نطاق جميع هذه التطبيقات لتشمل مئة ألف نواة معالجة أو أكثر على أنظمة بيتا سكيل.
تُعدّ واجهة MPI التكيفية (AMPI) [ 1 ] تطبيقًا لمعيار واجهة تمرير الرسائل (Message Passing Interface) على نظام تشغيل Charm++، وتُوفّر إمكانيات Charm++ ضمن نموذج برمجة MPI أكثر تقليدية. تُغلّف AMPI كل عملية MPI ضمن سلسلة عمليات قابلة للترحيل على مستوى المستخدم، مُرتبطة بكائن Charm++. من خلال تضمين كل سلسلة عمليات في كائن Charm++، يُمكن لبرامج AMPI الاستفادة تلقائيًا من ميزات نظام تشغيل Charm++ مع تغييرات طفيفة أو معدومة في برنامج MPI.
يسمح Charm4py بكتابة تطبيقات Charm++ بلغة بايثون ، ويدعم كائنات بايثون القابلة للترحيل واستدعاء الأساليب البعيدة غير المتزامنة.
مثال
إليك بعض أكواد Charm++ لأغراض التوضيح: [ 2 ]
- ملف رأس الصفحة ( hello.h )
class Hello : public CBase_Hello { public : Hello (); // مُنشئ C++void sayHi ( int from ); // دالة دخول قابلة للاستدعاء عن بُعد };- ملف واجهة Charm++ ( hello.ci )
وحدة hello { مصفوفة [ 1 D ] Hello { مدخل Hello (); مدخل void sayHi ( int ); }; };- ملف المصدر ( hello.cpp )
# تضمين "hello.decl.h" # تضمين "hello.h"CProxy_Main الرئيسي الخارجي ؛ عدد العناصر الخارجية ؛Hello :: Hello () { // لا توجد متغيرات أعضاء لتهيئتها في هذا المثال البسيط }void Hello :: sayHi ( int from ) {// اجعل هذا الكائن chare يُلقي التحية على المستخدم. CkPrintf ( "مرحباً من chare رقم %d على المعالج %d (أُبلغ بواسطة %d) \n " , thisIndex , CkMyPe (), from );// أخبر الكائن التالي في مصفوفة الكائنات // أن يُلقي التحية أيضًا. إذا كان هذا هو الكائن الأخير في // مصفوفة الكائنات، فأخبر الكائن الرئيسي // بالخروج من البرنامج. إذا كان ( thisIndex < ( numElements - 1 )) { thisProxy [ thisIndex + 1 ] .sayHi ( thisIndex ); } else { mainProxy.done ( ) ; } }# تضمين "hello.def.h"مؤشر MPI التكيفي (AMPI)
تُعدّ Adaptive MPI تطبيقًا لبروتوكول MPI (مثل MPICH وOpenMPI وMVAPICH وغيرها) يعمل على نظام تشغيل Charm++. يُمكن للمستخدمين أخذ تطبيقات MPI الموجودة مسبقًا، وإعادة تجميعها باستخدام أغلفة مُجمِّع AMPI، والبدء في تجربة محاكاة العمليات، وموازنة الأحمال الديناميكية، وتحمّل الأعطال. تُطبِّق AMPI "رتب" MPI كخيوط على مستوى المستخدم (بدلاً من عمليات نظام التشغيل). تتميز هذه الخيوط بسرعة تبديل السياق، وبالتالي يُمكن جدولة العديد منها على نفس النواة بناءً على توافر الرسائل لها. كما يُمكن نقل رتب AMPI، وجميع البيانات التي تحتويها، أثناء التشغيل عبر مختلف النوى والعُقد في المهمة. يُفيد هذا في موازنة الأحمال وفي أنظمة تحمّل الأعطال القائمة على نقاط التفتيش/إعادة التشغيل. لمزيد من المعلومات حول AMPI، راجع الدليل: http://charm.cs.illinois.edu/manuals/html/ampi/manual.html
Charm4py
Charm4py [ 3 ] هو إطار عمل للحوسبة المتوازية مكتوب بلغة بايثون، ويعتمد على بيئة تشغيل Charm++ C++، التي يستخدمها كمكتبة مشتركة. يُبسّط Charm4py عملية تطوير تطبيقات Charm++ ويُحسّن جوانب من نموذج البرمجة. على سبيل المثال، لا حاجة لكتابة ملفات واجهة (.ci) أو استخدام SDAG، كما لا يتطلب تجميع البرامج. مع ذلك، يُمكن للمستخدمين تسريع شيفرة تطبيقاتهم باستخدام تقنيات مثل Numba . تتوفر إصدارات ثنائية قياسية جاهزة للاستخدام، ويمكن تثبيتها على أنظمة Linux و macOS و Windows باستخدام pip .
من الممكن أيضاً كتابة برامج هجينة تجمع بين Charm4py وMPI. [ 4 ] ومن الأمثلة على السيناريوهات المدعومة برنامج Charm4py يستخدم مكتبات mpi4py لأجزاء محددة من الحساب.
انظر أيضاً
مراجع
- ↑ "مختبر البرمجة المتوازية" . charm.cs.illinois.edu . تم الاطلاع عليه بتاريخ 12-12-2018 .
- ↑ "برنامج "مرحباً بالعالم" باستخدام المصفوفات: برنامج "مرحباً بالعالم" أكثر تطوراً قليلاً: كود "مرحباً بالعالم" باستخدام المصفوفات" . مختبر البرمجة المتوازية - جامعة إلينوي في أوربانا-شامبين . تاريخ الاسترجاع: 8 مايو 2017 .
- ↑ "Charm4py — توثيق Charm4py 1.0.0" . charm4py.readthedocs.io . تم الاطلاع عليه بتاريخ 11 سبتمبر 2019 .
- ↑ "تشغيل برامج mpi4py و Charm4py الهجينة (التوافق مع mpi)" . منتدى Charm++ و Charm4py . 30 نوفمبر 2018. تاريخ الاسترجاع: 11 ديسمبر 2018 .
روابط خارجية
- عائلة لغات البرمجة C++
