كواري فورتران
لغة فورتران المصفوفية ( CAF )، المعروفة سابقًا باسم F-- ، بدأت كامتداد للغة فورتران 95/2003 للمعالجة المتوازية ، وقد ابتكرها روبرت نومريش وجون ريد في التسعينيات. يتضمن معيار فورتران 2008 (ISO/IEC 1539-1:2010) الآن المصفوفات المشتركة (تُكتب بدون واصلة)، وذلك وفقًا لما تقرر في اجتماع لجنة فورتران التابعة لمنظمة ISO في مايو 2005؛ ويختلف بناء الجملة في معيار فورتران 2008 اختلافًا طفيفًا عن اقتراح CAF الأصلي.
يُفسَّر برنامج CAF كما لو أنه نُسِخَ عدة مرات، ونُفِّذت جميع النسخ بشكل غير متزامن. لكل نسخة مجموعة بيانات خاصة بها، وتُسمى صورة . يُوسَّع بناء جملة المصفوفات في لغة فورتران بإضافة فهارس سفلية إضافية بين قوسين مربعين لتوفير تمثيل موجز للمراجع إلى البيانات الموزعة على الصور.
تم تطبيق امتداد CAF في بعض مُجمِّعات لغة فورتران، مثل تلك التي تُنتجها شركة كراي (منذ الإصدار 3.1). ومنذ إدراج المصفوفات المشتركة في معيار فورتران 2008، يتزايد عدد التطبيقات. يُعد G95 أول مُجمِّع مفتوح المصدر يُطبِّق المصفوفات المشتركة وفقًا لمعيار فورتران 2008 لبنى لينكس . حاليًا، يُوفِّر GNU Fortran تغطية واسعة لميزات المصفوفات المشتركة في فورتران في تكوينات الصور المفردة والمتعددة (الأخيرة تعتمد على مكتبة OpenCoarrays). يتوفر تطبيق آخر للمصفوفات المشتركة والامتدادات المتوازية ذات الصلة من فورتران 2008 في مُجمِّع OpenUH (وهو فرع من Open64 ) الذي طُوِّر في جامعة هيوستن .
التنفيذ في المترجمات
غالبًا ما يتم تنفيذ CAF باستخدام مكتبة واجهة تمرير الرسائل (MPI) لضمان قابلية النقل. بعض التطبيقات، مثل تلك المتوفرة في مترجمي GNU Fortran و OpenUH، قد تعمل على طبقات أخرى منخفضة المستوى (مثل GASNet) مصممة لدعم لغات مساحة العناوين العامة المقسمة .
أمثلة
يُقدَّم أدناه مثال بسيط. يُستخدم برنامج CAF في CGPACK، وهي حزمة برمجية مفتوحة المصدر لمحاكاة المواد متعددة البلورات، طُوِّرت في جامعة بريستول . [ 1 ]
برنامج Hello_World ضمنيًا لا شيء عدد صحيح :: i ! متغير محلي حرف ( الطول = 20 ) :: name [ * ] ! مصفوفة عددية، اسم واحد لكل صورة. ! ملاحظة: "name" هو المتغير المحلي بينما "name[<index>]" يصل إلى ! المتغير في صورة محددة؛ "name[this_image()]" هو نفسه "name".! تفاعل مع المستخدم على الصورة 1؛ تجاهل تنفيذ باقي الصور. إذا كانت الصورة الحالية تساوي 1، فاكتب (*, ' ( a ) ' , advance = ' no ' ) ' أدخل اسمك : ' اقرأ ( * , ' (a)' ) name! توزيع المعلومات على الصور الأخرى do i = 2 , num_images () name [ i ] = name end do end if مزامنة الكل ! حاجز للتأكد من وصول البيانات.! عمليات الإدخال/الإخراج من جميع الصور، تُنفذ بأي ترتيب، ولكن كل سجل مكتوب يبقى سليمًا. اكتب ( * , '(3a,i0)' ) 'Hello ' , trim ( name ), ' from image ' , this_image () end program Hello_worldالبرنامج المذكور أعلاه ضعيف الأداء عند التوسع لأن حلقة توزيع المعلومات تُنفذ بشكل تسلسلي. يتطلب كتابة برامج قابلة للتوسع غالبًا فهمًا متعمقًا للخوارزميات المتوازية، ومعرفة دقيقة بخصائص الشبكة الأساسية، وضبطًا خاصًا لخصائص التطبيق مثل حجم عمليات نقل البيانات. بالنسبة لمعظم مطوري التطبيقات، يُعد ترك المُصرّف أو مكتبة وقت التشغيل يُحدد أفضل خوارزمية أكثر موثوقية وأعلى أداءً. سيُوفر Fortran 2018 إجراءات فرعية للاتصال الجماعي تُمكّن فرق المُصرّف ومكتبة وقت التشغيل من تغليف خوارزميات متوازية فعّالة للاتصال الجماعي والحوسبة الموزعة في مجموعة من الإجراءات الفرعية الجماعية. هذه الإجراءات الفرعية وميزات البرمجة المتوازية الجديدة الأخرى مُلخصة في مواصفات فنية [ 2 ] صوتت لجنة معايير Fortran على دمجها في Fortran 2018. تُمكّن هذه الميزات المستخدم من كتابة نسخة أكثر كفاءة من الخوارزمية المذكورة أعلاه.
برنامج Hello_World ضمنيًا لا شيء حرف ( الطول = 20 ) :: اسم [ * ] ! مصفوفة عددية، اسم واحد لكل صورة. ! ملاحظة: "الاسم" هو المتغير المحلي بينما "الاسم[<الفهرس>]" يصل إلى المتغير في صورة محددة؛ "الاسم[هذه_الصورة()]" هو نفسه "الاسم".! تفاعل مع المستخدم على الصورة 1؛ يتم تجاهل تنفيذ باقي الصور. إذا كانت الصورة الحالية تساوي 1، فاكتب (* , ' ( a ) ' , advance = ' no ' ) ' أدخل اسمك :' اقرأ ( * , '(a)' ) name نهاية الشرط ! وزّع المعلومات على جميع الصور باستخدام co_broadcast ( name , source_image = 1 )! عمليات الإدخال/الإخراج من جميع الصور، تُنفذ بأي ترتيب، ولكن كل سجل مكتوب يبقى سليمًا. اكتب ( * , '(3a,i0)' ) 'Hello ' , trim ( name ), ' from image ' , this_image () end program Hello_worldحيث يتيح غياب التزامن الصريح إمكانية تحقيق أداء أفضل نظرًا لقلة التنسيق بين الصور. علاوة على ذلك، يضمن معيار TS 18508 أنه "لا يمكن نقل البيانات من صورة قبل استدعاء الروتين الفرعي الجماعي على تلك الصورة". وهذا يعني وجود تزامن جزئي داخل co_broadcast، ولكنه قد يكون أكثر فعالية من "مزامنة الكل" في المثال السابق. كما يتضمن معيار TS 18508 العديد من الميزات الجديدة الأخرى التي تعالج المشكلات التي يستهدفها مشروع CAF 2.0 الموضح أدناه. ومن الأمثلة على ذلك فرق الصور والأحداث.
منظور بديل
في عام 2011، تبنت جامعة رايس رؤية بديلة لتوسيعات المصفوفات المشتركة للغة فورتران. [ 3 ] ويتمثل منظورهم في أن خيارات التصميم التي اتخذتها لجنة معيار فورتران 2008 قد تأثرت بشكل أكبر بالرغبة في إدخال أقل قدر ممكن من التعديلات على اللغة، بدلاً من تجميع أفضل مجموعة من التوسيعات لدعم البرمجة المتوازية . ويرى هؤلاء أن كلاً من التصميم الأصلي لنومريش وريد، وتوسيعات المصفوفات المشتركة المقترحة لفورتران 2008، تعاني من أوجه القصور التالية:
- لا يوجد دعم لمجموعات المعالجات الفرعية ؛ على سبيل المثال، يجب تخصيص المصفوفات المشتركة على جميع الصور.
- تفتقر امتدادات المصفوفة المشتركة إلى أي مفهوم للمؤشرات العامة، والتي تعتبر ضرورية لإنشاء ومعالجة أي نوع من هياكل البيانات المرتبطة.
- إن الاعتماد على الأقسام الحرجة المسماة للاستبعاد المتبادل يعيق التوازي القابل للتوسع من خلال ربط الاستبعاد المتبادل بمناطق التعليمات البرمجية بدلاً من كائنات البيانات.
- لا توفر عبارة sync images في لغة Fortran 2008 مساحة تزامن آمنة. ونتيجة لذلك، قد تتداخل عمليات التزامن في كود المستخدم، والتي تكون معلقة عند استدعاء المكتبة، مع عملية التزامن في استدعاء المكتبة.
- لا توجد آليات لتجنب أو تحمل التأخير عند معالجة البيانات على الصور البعيدة.
- لا يوجد دعم للتواصل الجماعي.
لمعالجة هذه النواقص، يعمل فريق جامعة رايس على تطوير تصميم جديد كليًا لنموذج برمجة Coarray Fortran. ويُعدّ تصميم رايس الجديد لـ Coarray Fortran، والذي يُطلق عليه اسم Coarray Fortran 2.0، مجموعةً مُعبّرةً من الإضافات القائمة على المصفوفات المشتركة للغة Fortran، والمصممة لتوفير نموذج برمجة متوازية فعّال . وبالمقارنة مع Fortran 2008، تتضمن إضافات لغة رايس الجديدة القائمة على المصفوفات المشتركة بعض الميزات الإضافية:
- مجموعات فرعية من العمليات تُعرف باسم الفرق، والتي تدعم المصفوفات المشتركة، والتواصل الجماعي، والفهرسة النسبية لصور العمليات للعمليات الثنائية،
- تُعزز البنى الشبكية فرق العمل بهيكل اتصال منطقي،
- التخصيص/إلغاء التخصيص الديناميكي للمصفوفات المشتركة والبيانات المشتركة الأخرى،
- تخصيص وإلغاء تخصيص المصفوفات المشتركة على مستوى الفريق،
- المؤشرات العامة لدعم هياكل البيانات الديناميكية،
- دعم إخفاء زمن الاستجابة وتجنبه، و
- نسخ غير متزامنة،
- العمليات الجماعية غير المتزامنة، و
- وظيفة الشحن.
- دعم مُحسّن للمزامنة من أجل تحكم دقيق في تنفيذ البرنامج.
- دعم آمن وقابل للتطوير للاستبعاد المتبادل، بما في ذلك الأقفال ومجموعات الأقفال،
- الأحداث، التي توفر مساحة آمنة للمزامنة من نقطة إلى نقطة،
- cofence ، الذي يُجبر على الإكمال المحلي للعمليات غير المتزامنة،
- إنهاء، وهو هيكل SPMD يشبه الحاجز ويجبر على إكمال العمليات غير المتزامنة عبر الفريق،
انظر أيضاً
مراجع
- ↑ أ. شتيرينليخت، مكتبة مصفوفات فورتران لمحاكاة البنية المجهرية للأتمتة الخلوية ثلاثية الأبعاد. مؤرشفة في 4 مارس 2016 على موقع Wayback Machine ، (2013) في وقائع المؤتمر السابع لجمعية PGAS، تحرير م. ويلاند، أ. جاكسون، ن. جونسون، منشورات جامعة إدنبرة، ISBN 978-0-9926615-0-2
- ↑ TS 18508 ميزات متوازية إضافية في لغة فورتران
- ↑ "CoArray Fortran 2.0" .
عام
- Fortran programming language family
