الهيكل الخوارزمي
في مجال الحوسبة ، تعتبر الهياكل الخوارزمية ، أو أنماط التوازي ، نموذج برمجة متوازية عالي المستوى للحوسبة المتوازية والموزعة .
تستفيد الهياكل الخوارزمية من أنماط البرمجة الشائعة لإخفاء تعقيد التطبيقات المتوازية والموزعة. انطلاقًا من مجموعة أساسية من الأنماط (الهياكل)، يمكن بناء أنماط أكثر تعقيدًا من خلال دمج الأنماط الأساسية.
ملخص
إن أبرز ما يميز الهياكل الخوارزمية، والذي يفرقها عن نماذج البرمجة المتوازية الأخرى عالية المستوى، هو أن تنسيق ومزامنة الأنشطة المتوازية مُحددة ضمنيًا بواسطة أنماط الهيكل. فلا يحتاج المبرمجون إلى تحديد المزامنة بين الأجزاء المتسلسلة للتطبيق. وينتج عن ذلك أمران: أولًا، بما أن أنماط الاتصال/الوصول إلى البيانات معروفة مسبقًا، يمكن تطبيق نماذج التكلفة لجدولة برامج الهياكل. [ 1 ] ثانيًا، أن برمجة الهياكل الخوارزمية تقلل من عدد الأخطاء مقارنةً بنماذج البرمجة المتوازية التقليدية منخفضة المستوى (مثل الخيوط، وMPI).
برنامج نموذجي
يعتمد المثال التالي على مكتبة Java Skandium للبرمجة المتوازية.
الهدف هو تطبيق نسخة متوازية من خوارزمية الفرز السريع باستخدام نمط فرق تسد، وذلك بالاعتماد على الهيكل الخوارزمي. تجدر الإشارة إلى أن هذا النهج عالي المستوى يُخفي إدارة الخيوط عن المبرمج.
استيراد java.util.concurrent.* ؛ استيراد cl.niclabs.skandium.* ؛// 1. تعريف البرنامج الأساسي Skeleton < Range , Range > sort = new DaC <> ( new ShouldSplit ( threshold , maxTimes ), new SplitList (), new Sort ( ) , new MergeList () ); // 2. مُدخلات Future <Range> future = sort.input ( new Range ( generate ( ... ) )); // 3. تنفيذ إجراءات أخرى هنا. // ... // 4. انتظار النتائج Range result = future.get ( ) ;- أول خطوة هي تعريف نسخة جديدة من الهيكل باستخدام الكود الوظيفي الذي يفي بالنمط (
ShouldSplit,SplitList,Sort,MergeList). يكتب المبرمج الكود الوظيفي دون مراعاة التوازي. - الخطوة الثانية هي إدخال البيانات التي تُشغّل الحساب. في هذه الحالة، يُمثّل Range فئةً تحتوي على مصفوفة وفهرسين يسمحان بتمثيل مصفوفة فرعية. لكل بيانات مُدخلة في الإطار، يتم إنشاء كائن Future جديد. يُمكن إدخال أكثر من كائن Future واحد في الهيكل في آنٍ واحد.
- يسمح المستقبل بالحساب غير المتزامن، حيث يمكن تنفيذ مهام أخرى أثناء حساب النتائج.
- يمكننا استرجاع نتيجة الحساب، مع إمكانية الحظر إذا لزم الأمر (أي النتائج غير متوفرة بعد).
تتوافق الرموز الوظيفية في هذا المثال مع أربعة أنواع: الشرط، والتقسيم، والتنفيذ، والدمج.
import java.util.concurrent.* ;public class ShouldSplit implements Condition <Range> { private int threshold ; private int maxTimes ; private int times ; public ShouldSplit ( int threshold , int maxTimes ) { this.threshold = threshold ; this.maxTimes = maxTimes ; this.times = 0 ; } @Override public synchronized boolean condition ( Range r ) { return ( r.right - r.left ) > threshold && times ++ < maxTimes ; } }تُطبّق فئة ShouldSplit واجهة Condition. تستقبل الدالة مُدخلاً، وهو النطاق r في هذه الحالة، وتُعيد قيمة منطقية (صواب أو خطأ). في سياق عملية Divide and Conquer حيث ستُستخدم هذه الدالة، سيُحدد هذا ما إذا كان ينبغي تقسيم مصفوفة فرعية مرة أخرى أم لا.
تُنفّذ فئة SplitList واجهة split، التي تُقسّم في هذه الحالة مصفوفة (أو مصفوفة فرعية) إلى مصفوفات فرعية أصغر. وتستخدم الفئة دالة مساعدة تُنفّذ خوارزمية QuickSortpartition(...) المعروفة للترتيب المحوري والتبديل.
import java.util.concurrent.* ;public class SplitList implements Split < Range , Range > { @Override public Range [ ] split ( Range r ) { int i = partition ( r.array , r.left , r.right ) ; Range [ ] intervals = { new Range ( r.array , r.left , i - 1 ) , new Range ( r.array , i + 1 , r.right ) } ; return intervals ; } }تُنفّذ فئة Sort واجهة Execute، وهي مسؤولة عن فرز المصفوفة الفرعية المحددة Range r. في هذه الحالة، نستدعي ببساطة دالة Java الافتراضية (Arrays.sort) للمصفوفة الفرعية المُعطاة.
استيراد java.util.Arrays ؛ استيراد java.util.concurrent.* ؛public class Sort implements Execute < Range , Range > { @Override public Range execute ( Range r ) { if ( r.right < = r.left ) { return r ; } Arrays.sort ( r.array , r.left , r.right + 1 ) ; return r ; } }وأخيرًا، بمجرد فرز مجموعة من المصفوفات الفرعية، نقوم بدمج أجزاء المصفوفة الفرعية في مصفوفة أكبر باستخدام فئة MergeList التي تنفذ واجهة Merge.
import java.util.concurrent.* ;public class MergeList implements Merge < Range , Range > { @Override public Range merge ( Range [ ] r ) { return new Range ( r [ 0 ] .array , r [ 0 ] .left , r [ 1 ] .right ) ; } }الأطر والمكتبات
يساعد
ASSIST [ 2 ] [ 3 ] هي بيئة برمجة توفر للمبرمجين لغة تنسيق منظمة. تُمكّن لغة التنسيق هذه من التعبير عن البرامج المتوازية كرسم بياني عشوائي لوحدات برمجية. يصف الرسم البياني للوحدات كيفية تفاعل مجموعة من الوحدات مع بعضها البعض باستخدام مجموعة من تدفقات البيانات المُصنّفة. يمكن أن تكون الوحدات متسلسلة أو متوازية. يمكن كتابة الوحدات المتسلسلة بلغات C أو C++ أو Fortran؛ بينما تُبرمج الوحدات المتوازية باستخدام وحدة ASSIST المتوازية الخاصة ( parmod ).
يُستخدم نظام AdHoc، وهو نظام ذاكرة مشتركة موزعة (DSM) هرمي ومتسامح مع الأعطال، لربط تدفقات البيانات بين عناصر المعالجة من خلال توفير مستودع بيانات مزود بعمليات الجلب/الإضافة/الحذف/التنفيذ. وقد ركزت الأبحاث المتعلقة بنظام AdHoc على شفافية مستودع البيانات وقابليته للتوسع ومقاومته للأعطال.
على الرغم من أنها ليست إطار عمل هيكلي كلاسيكي، بمعنى أنه لا يتم توفير هياكل، إلا أنه يمكن تخصيص وحدة parmod العامة الخاصة بـ ASSIST إلى هياكل كلاسيكية مثل: farm و map وما إلى ذلك. كما يدعم ASSIST التحكم التلقائي في وحدات parmod ، ويمكن إخضاعه لعقد أداء من خلال التكيف الديناميكي لعدد الموارد المستخدمة.
CO2P3S
CO2P3S (نظام البرمجة المتوازية القائم على الأنماط الموجهة للكائنات الصحيحة)، هو بيئة تطوير موجهة بالأنماط، [ 6 ] والتي تحقق التوازي باستخدام الخيوط في جافا.
يهتم CO2P3S بعملية التطوير الكاملة للتطبيقات المتوازية. يتفاعل المبرمجون عبر واجهة مستخدم رسومية لاختيار نمط وخيارات تكوينه. بعد ذلك، يُضيفون الوصلات المطلوبة للنمط، ويتم إنشاء كود جديد كإطار عمل بلغة جافا لتنفيذ التطبيق بالتوازي. يستخدم إطار العمل المُنشأ ثلاثة مستويات، بترتيب تنازلي للتجريد: طبقة الأنماط، وطبقة الكود الوسيط، وطبقة الكود الأصلي. بالتالي، يُمكن للمبرمجين المتقدمين تعديل الكود المُنشأ على مستويات متعددة لتحسين أداء تطبيقاتهم. يتميز الكود المُنشأ في الغالب بأمان النوع ، حيث يستخدم الأنواع التي يُحددها المبرمج والتي لا تتطلب توسيع الفئة الأساسية، ولكنه لا يكون آمنًا تمامًا من حيث النوع، كما هو الحال في دالة reduce(..., Object reducer) في نمط الشبكة.
تتضمن مجموعة الأنماط المدعومة في CO2P3S أنماط تسلسل الأساليب، والموزعات، والشبكات، وجبهة الموجة. ويمكن بناء تطبيقات معقدة من خلال دمج الأطر مع مراجع الكائنات الخاصة بها. ومع ذلك، إذا لم يكن أي نمط مناسبًا، فإن أداة MetaCO2P3S الرسومية تعالج قابلية التوسع من خلال السماح للمبرمجين بتعديل تصميمات الأنماط وإضافة أنماط جديدة إلى CO2P3S .
أُضيف دعم بنى الذاكرة الموزعة في CO2P3S لاحقًا. [ 7 ] لاستخدام نمط الذاكرة الموزعة، يجب على المبرمجين تغيير خيار الذاكرة في النمط من مشترك إلى موزع، ثم إنشاء الكود الجديد. من منظور الاستخدام، يتطلب إصدار الذاكرة الموزعة من الكود إدارة الاستثناءات عن بُعد.
الكالسيوم والسكانديوم
يستوحي كالسيوم تصميمه بشكل كبير من ليثيوم وموسكل. ولذلك، فهو يوفر برمجة هيكلية خوارزمية كمكتبة جافا. تتميز الهياكل المتوازية للمهام والبيانات بإمكانية التداخل الكامل، ويتم إنشاؤها عبر كائنات هيكلية بارامترية، وليس عبر الوراثة.
يدعم Calcium تشغيل التطبيقات الهيكلية على بيئة ProActive للبنية التحتية الموزعة الشبيهة بالمجموعات الحاسوبية. بالإضافة إلى ذلك، يتميز Calcium بثلاث خصائص فريدة لبرمجة الهياكل الخوارزمية. أولًا، نموذج ضبط الأداء الذي يساعد المبرمجين على تحديد التعليمات البرمجية المسؤولة عن أخطاء الأداء. [ 8 ] ثانيًا، نظام أنواع للهياكل القابلة للتداخل، والذي أثبت فعاليته في ضمان خصائص تقليل عدد العناصر، ويتم تنفيذه باستخدام Java Generics. [ 9 ] ثالثًا، نموذج وصول شفاف لملفات الهياكل الخوارزمية، مما يُمكّن من استخدام الهياكل للتطبيقات كثيفة البيانات. [ 10 ]
Skandium هو إعادة تنفيذ كاملة لـ Calcium للحوسبة متعددة النوى. يمكن للبرامج المكتوبة باستخدام Skandium الاستفادة من الذاكرة المشتركة لتبسيط البرمجة المتوازية. [ 11 ]
عدن
إيدن [ 12 ] هي لغة برمجة متوازية لبيئات الذاكرة الموزعة، وهي امتداد للغة هاسكل. تُعرَّف العمليات بشكل صريح لتحقيق البرمجة المتوازية، بينما تبقى اتصالاتها ضمنية. تتواصل العمليات عبر قنوات أحادية الاتجاه، تربط كاتبًا واحدًا بقارئ واحد فقط. يحتاج المبرمجون فقط إلى تحديد البيانات التي تعتمد عليها العملية. يوفر نموذج عمليات إيدن تحكمًا مباشرًا في دقة العملية، وتوزيع البيانات، وبنية الاتصال.
لا تُعدّ إيدن لغة هيكلية بالمعنى الحرفي، إذ لا تُقدّم الهياكل كبنى لغوية. بل تُعرّف الهياكل فوق تجريد العمليات منخفض المستوى في إيدن، ما يدعم التوازي في كلٍّ من المهام والبيانات . لذا، وخلافًا لمعظم المناهج الأخرى، تسمح إيدن بتعريف الهياكل بنفس اللغة وعلى نفس المستوى الذي تُكتب فيه عملية إنشاء الهيكل: إيدن نفسها. ولأن إيدن امتداد للغة وظيفية، فإن هياكلها عبارة عن دوال من الرتبة العليا . تُقدّم إيدن مفهوم هيكل التنفيذ، وهو مخطط مستقل عن بنية النظام يصف تنفيذًا متوازٍ لهيكل خوارزمي.
إسكل
مكتبة إدنبرة للهياكل العظمية ( eSkel ) متوفرة بلغة C وتعمل على منصة MPI. تم وصف الإصدار الأول من eSkel في المرجع [ 13 ] ، بينما تم تقديم إصدار أحدث في المرجع [ 14 ] .
في المرجع [ 15 ] ، تم تعريف نمط التداخل ونمط التفاعل للهياكل. يمكن أن يكون نمط التداخل مؤقتًا أو دائمًا، بينما يمكن أن يكون نمط التفاعل ضمنيًا أو صريحًا. يعني التداخل المؤقت أن الهيكل المتداخل يُنشأ لكل استدعاء ثم يُحذف، بينما يعني التداخل الدائم أن الهيكل يُنشأ مرة واحدة فقط، وسيتم استدعاء نفس نسخة الهيكل طوال فترة تشغيل التطبيق. يعني التفاعل الضمني أن تدفق البيانات بين الهياكل مُحدد بالكامل من خلال تركيب الهيكل، بينما يعني التفاعل الصريح أنه يمكن إنشاء البيانات أو إزالتها من التدفق بطريقة غير محددة في تركيب الهيكل. على سبيل المثال، الهيكل الذي يُنتج مُخرجات دون استقبال أي مُدخلات يتمتع بتفاعل صريح.
تم استكشاف التنبؤ بالأداء لجدولة وتعيين الموارد، وخاصة لخطوط الأنابيب، بواسطة بينوا وآخرون [ 16 ] [ 17 ] [ 18 ] [ 19 ] لقد قدموا نموذج أداء لكل تعيين، استنادًا إلى جبر العمليات، وحددوا أفضل استراتيجية جدولة بناءً على نتائج النموذج.
تناولت أعمال أحدث مشكلة التكيف في البرمجة المتوازية المهيكلة، [ 20 ] وخاصةً بالنسبة لهيكل الأنابيب. [ 21 ] [ 22 ]
التدفق السريع
FastFlow هو إطار عمل برمجي متوازي هيكلي مصمم خصيصًا لتطوير تطبيقات البث والتطبيقات المتوازية للبيانات. طُوّر في البداية لاستهداف منصات متعددة النوى ، ثم وُسّع لاحقًا ليشمل منصات غير متجانسة تتكون من مجموعات من منصات الذاكرة المشتركة، [ 23 ] [ 24 ] والتي قد تكون مزودة بمسرعات حوسبة مثل NVidia GPGPUs و Xeon Phi وTilera TILE64. تتمثل فلسفة التصميم الرئيسية لـ FastFlow في تزويد مصممي التطبيقات بميزات أساسية للبرمجة المتوازية (مثل سرعة الوصول إلى السوق، وقابلية النقل، والكفاءة، وقابلية نقل الأداء) من خلال تجريدات برمجة متوازية مناسبة ودعم وقت تشغيل مصمم بعناية. [ 25 ] FastFlow هو إطار عمل برمجي عام للأغراض العامة مكتوب بلغة C++ لمنصات متوازية غير متجانسة. ومثل أطر البرمجة عالية المستوى الأخرى، مثل Intel TBB وOpenMP، يُبسّط FastFlow تصميم وهندسة التطبيقات المتوازية القابلة للنقل. مع ذلك، يتميز FastFlow بتفوق واضح من حيث القدرة التعبيرية والأداء مقارنةً بأطر البرمجة المتوازية الأخرى في سيناريوهات تطبيقية محددة، بما في ذلك على سبيل المثال لا الحصر: التوازي الدقيق على منصات الذاكرة المشتركة المتماسكة؛ تطبيقات البث؛ الاستخدام المتزامن للمعالجات متعددة النوى والمسرعات. في حالات أخرى، يكون FastFlow عادةً مماثلاً (وفي بعض الحالات أسرع قليلاً) لأحدث أطر البرمجة المتوازية مثل Intel TBB وOpenMP وCilk، إلخ. [ 26 ]
HDC
تُعدّ لغة البرمجة الوظيفية "فرق تسد" ( HDC ) [ 27 ] مجموعة فرعية من لغة البرمجة الوظيفية "هاسكل" . تُعرض البرامج الوظيفية على شكل دوال متعددة الأشكال من الرتبة العليا، والتي يمكن ترجمتها إلى لغة C/MPI، وربطها بتنفيذات هيكلية. تركز هذه اللغة على نموذج "فرق تسد"، وانطلاقًا من هيكل عام لهذا النموذج، تُشتق حالات أكثر تحديدًا ذات تنفيذات فعّالة. تشمل هذه الحالات: عمق الاستدعاء الثابت، ودرجة الاستدعاء الثابتة، والاستدعاء المتعدد للكتل، والعمليات على مستوى العناصر، والاتصالات المقابلة [ 28 ].
يولي نظام HDC اهتمامًا خاصًا بدقة تفاصيل المشكلة الفرعية وعلاقتها بعدد المعالجات المتاحة. يُعدّ العدد الإجمالي للمعالجات معيارًا أساسيًا لأداء البرنامج الهيكلي، إذ يسعى نظام HDC إلى تقدير التوزيع الأمثل للمعالجات لكل جزء من البرنامج. وبالتالي، يرتبط أداء التطبيق ارتباطًا وثيقًا بالعدد المُقدّر للمعالجات، مما قد يؤدي إما إلى تجاوز عدد المشكلات الفرعية، أو إلى عدم كفاية التوازي لاستغلال المعالجات المتاحة.
HOC-SA
HOC-SA هو مشروع تابع لحاضنة غلوبوس . يرمز HOC-SA إلى بنية المكونات والخدمات عالية المستوى. تهدف المكونات عالية المستوى ( HOCs ) إلى تبسيط تطوير تطبيقات الشبكة. يتمثل هدف HOC-SA في تزويد مستخدمي غلوبوس، الذين لا يرغبون في معرفة جميع تفاصيل برمجيات غلوبوس الوسيطة (مستندات GRAM RSL، وخدمات الويب، وتكوين الموارد، وما إلى ذلك)، بمكونات HOCs توفر واجهة عالية المستوى للشبكة مقارنةً بمجموعة أدوات غلوبوس الأساسية. تُعد مكونات HOCs هياكل أساسية مُفعّلة للشبكة، مُنفذة كمكونات فوق مجموعة أدوات غلوبوس، ويمكن الوصول إليها عن بُعد عبر خدمات الويب. [ 29 ]
جاسكل
JaSkel [ 30 ] هو إطار عمل هيكلي قائم على لغة جافا، يوفر هياكل أساسية مثل Farm وPipe وHeartbeat. يتم تخصيص هذه الهياكل باستخدام الوراثة. يقوم المبرمجون بتنفيذ الطرق المجردة لكل هيكل لتوفير التعليمات البرمجية الخاصة بتطبيقاتهم. تتوفر الهياكل في JaSkel بإصدارات تسلسلية ومتزامنة وديناميكية. على سبيل المثال، يمكن استخدام Farm المتزامن في بيئات الذاكرة المشتركة (الخيوط)، ولكن ليس في البيئات الموزعة (المجموعات الحاسوبية) حيث يُفضل استخدام Farm الموزع. للانتقال من إصدار إلى آخر، يجب على المبرمجين تغيير توقيع فئاتهم للوراثة من هيكل مختلف. يستخدم تداخل الهياكل فئة Java Object الأساسية، وبالتالي لا يتم فرض أي نظام أنواع أثناء تكوين الهيكل.
تُعالج جوانب التوزيع في JaSkel باستخدام البرمجة الموجهة نحو الجوانب (AOP)، وتحديدًا تطبيق AspectJ. وبالتالي، يمكن نشر JaSkel على كلٍ من البنى التحتية العنقودية والشبكية. [ 31 ] مع ذلك، يتمثل أحد عيوب منهج JaSkel في أن تداخل الهيكل يرتبط ارتباطًا وثيقًا ببنية النشر. لذا، فإن التداخل المزدوج للمزارع يُحقق أداءً أفضل من مزرعة واحدة على البنى التحتية الهرمية. وهذا يُفقد الغرض من استخدام البرمجة الموجهة نحو الجوانب (AOP) لفصل جوانب التوزيع عن الجوانب الوظيفية لبرنامج الهيكل.
الليثيوم والعضلات
يُعدّ كلٌّ من Lithium [ 32 ] [ 33 ] [ 34 ] وخليفته Muskel إطارَي عملٍ هيكليين طُوِّرا في جامعة بيزا بإيطاليا. يوفر كلاهما للمبرمج هياكلَ قابلةً للتداخل كمكتبات جافا. ويتبع تقييم تطبيق الهيكل تعريفًا رسميًا للدلالات التشغيلية التي قدمها ألدينوتشي ودانيلوتو [ 35 ] [ 36 ] ، والتي يمكنها التعامل مع كلٍّ من توازي المهام وتوازي البيانات. تصف الدلالات السلوك الوظيفي والمتوازي للغة الهيكل باستخدام نظام انتقال مُصنَّف. بالإضافة إلى ذلك، تُطبَّق العديد من تقنيات تحسين الأداء، مثل: تقنيات إعادة كتابة الهيكل [18، 10]، والتنبؤ بالمهام، والربط الكسول بين الخوادم [ 37 ] .
على مستوى التنفيذ، يستغل نظام Lithium تدفق البيانات الكلي [ 38 ] [ 39 ] لتحقيق التوازي. فعندما يستقبل دفق الإدخال مُعاملًا جديدًا، تتم معالجة البرنامج الأساسي للحصول على رسم بياني لتدفق البيانات الكلي. تمثل عُقد هذا الرسم البياني تعليمات تدفق البيانات الكلي (MDFi)، والتي تُمثل أجزاءً متسلسلة من التعليمات البرمجية التي يُقدمها المبرمج. تُستخدم المهام لتجميع عدة تعليمات MDFi معًا، وتستهلكها عناصر المعالجة الخاملة من مجمع المهام. عند اكتمال حساب الرسم البياني، تُوضع النتيجة في دفق الإخراج، وبالتالي تُعاد إلى المستخدم.
يُوفر Muskel أيضًا ميزات غير وظيفية مثل جودة الخدمة (QoS)؛ [ 40 ] والأمان بين مجموعة المهام والمترجمات؛ [ 41 ] [ 42 ] واكتشاف الموارد، وموازنة الأحمال، وتحمل الأعطال عند التفاعل مع إطار عمل Java/Jini Parallel Framework (JJPF)، [ 43 ] وهو إطار عمل للتنفيذ الموزع. كما يدعم Muskel الجمع بين البرمجة المهيكلة وغير المهيكلة [ 44 ] ، وقد تناولت الأبحاث الحديثة قابلية التوسع. [ 45 ]
مالبا
Mallba [ 46 ] مكتبةٌ لتحسينات التوافقية، تدعم استراتيجيات البحث الدقيقة، والتقريبية، والهجينة. [ 47 ] تُنفَّذ كل استراتيجية في Mallba كهيكلٍ عام، يُمكن استخدامه بتوفير الكود المطلوب. بالنسبة لخوارزميات البحث الدقيقة، تُوفِّر Mallba هياكلَ البحث بالتفرع والتقييد، والتحسين الديناميكي. أما بالنسبة لخوارزميات البحث التقريبية المحلية، فتدعم Mallba: تسلق التلال ، والمتروبوليس، والتقسية المحاكاة ، والبحث المحظور ؛ بالإضافة إلى الخوارزميات التقريبية القائمة على السكان والمستمدة من الخوارزميات التطورية ، مثل الخوارزميات الجينية ، واستراتيجية التطور، وغيرها (CHC). تجمع الهياكل الهجينة بين استراتيجياتٍ مثل: GASA، وهي مزيجٌ من الخوارزمية الجينية والتقسية المحاكاة، وCHCCES التي تجمع بين CHC وES.
تُقدَّم الهياكل الأساسية كمكتبة C++، وهي غير قابلة للتداخل ولكنها آمنة من حيث أنواع البيانات. تُستخدم طبقة تجريد MPI مخصصة، NetStream، تتولى معالجة أنواع البيانات الأولية، والمزامنة، وما إلى ذلك. قد يحتوي الهيكل الأساسي على عدة تطبيقات متوازية منخفضة المستوى، وذلك حسب بنية النظام المستهدف: التسلسلية، وشبكات LAN، وشبكات WAN. على سبيل المثال: نظام رئيسي-تابع مركزي، ونظام رئيسي-تابع موزع، وما إلى ذلك.
توفر مكتبة Mallba أيضًا متغيرات حالة تُخزّن حالة هيكل البحث. تربط هذه الحالة عملية البحث بالبيئة، ويمكن الوصول إليها لفحص تطور البحث واتخاذ القرارات بشأن الإجراءات المستقبلية. على سبيل المثال، يمكن استخدام الحالة لتخزين أفضل حل تم التوصل إليه حتى الآن، أو قيم α و β لتقليم التفرع والتقييد. [ 48 ]
بالمقارنة مع الأطر الأخرى، يُعد استخدام Mallba لمفاهيم الهياكل العظمية فريدًا من نوعه. تُقدَّم الهياكل العظمية كاستراتيجيات بحث بارامترية بدلاً من أنماط التوازي البارامترية.
نخاع العظم
Marrow [ 49 ] [ 50 ] هو إطار عمل هيكلي خوارزمي مكتوب بلغة C++ لتنسيق حسابات OpenCL في بيئات متعددة وحدات معالجة الرسومات (GPU) ، والتي قد تكون غير متجانسة . يوفر Marrow مجموعة من الهياكل الهيكلية المتوازية للمهام والبيانات، والتي يمكن دمجها، من خلال التداخل، لبناء حسابات مركبة. تمثل العقد الطرفية لأشجار التركيب الناتجة نوى حسابات وحدة معالجة الرسومات، بينما تشير العقد المتبقية إلى الهيكل الهيكلي المطبق على الشجرة الفرعية المتداخلة. يتولى إطار العمل مسؤولية التنسيق الكامل من جانب المضيف اللازم لتنفيذ هذه الأشجار بشكل صحيح في بيئات متعددة وحدات معالجة الرسومات غير متجانسة، بما في ذلك الترتيب الصحيح لنقل البيانات وطلبات التنفيذ، والتواصل المطلوب بين عقد الشجرة.
من أبرز ميزات Marrow مجموعة من الهياكل التي لم تكن متاحة سابقًا في سياق وحدة معالجة الرسومات، مثل Pipeline وLoop، بالإضافة إلى إمكانية تداخل الهياكل - وهي ميزة جديدة أيضًا في هذا السياق. علاوة على ذلك، يُدخل الإطار تحسينات تتداخل بين الاتصال والحساب، مما يُخفي زمن الاستجابة الذي يفرضه ناقل PCIe .
يتبع التنفيذ المتوازي لشجرة تركيب مارو بواسطة وحدات معالجة رسومية متعددة استراتيجية تجزئة متوازية للبيانات، حيث تُطبق الشجرة الحسابية بأكملها في وقت واحد على أقسام مختلفة من مجموعة بيانات الإدخال. وباستثناء تحديد معلمات النواة التي يمكن تجزئتها، وتحديد كيفية دمج النتائج الجزئية عند الحاجة، فإن المبرمج معزول تمامًا عن بنية وحدات المعالجة الرسومية المتعددة الأساسية.
يمكنكم الاطلاع على المزيد من المعلومات، بالإضافة إلى شفرة المصدر، على موقع مارو الإلكتروني.
موسلي
مكتبة Muesli [ 51 ] [ 52 ] هي مكتبة قوالب مكتوبة بلغة C++ تعيد تنفيذ العديد من الأفكار والمفاهيم التي تم تقديمها في Skil ، مثل الدوال ذات الرتبة العليا، والتقسيم الجزئي، والأنواع متعددة الأشكال.تعتمد هذه المكتبة على MPI 1.2 و OpenMP 2.5، وتدعم، على عكس العديد من مكتبات الهياكل الأخرى، كلاً من الهياكل المتوازية للمهام والبيانات. يشبه تداخل الهياكل (تركيبها) نهج الطبقتين في P3L ، أي يمكن تداخل الهياكل المتوازية للمهام بشكل عشوائي، بينما لا يمكن تداخل الهياكل المتوازية للبيانات، ولكن يمكن استخدامها في أوراق شجرة تداخل الهياكل المتوازية للمهام. [ 53 ] تُستخدم قوالب C++ لجعل الهياكل متعددة الأشكال، ولكن لا يُفرض نظام أنواع محدد. مع ذلك، تُنفذ المكتبة آلية تسلسل تلقائية مستوحاة من [ 54 ] بحيث يمكن، بالإضافة إلى أنواع بيانات MPI القياسية، استخدام أنواع بيانات مُعرّفة من قِبل المستخدم داخل الهياكل. تتضمن الهياكل الأساسية المتوازية المدعومة للمهام [ 55 ] : التفرع والتقييد، [ 56 ] فرق تسد، [ 57 ] [ 58 ] المزرعة، [ 59 ] [ 60 ] والأنبوب، أما الهياكل الأساسية المساعدة فهي: التصفية، والنهائية، والابتدائية. تُنفذ الهياكل الأساسية المتوازية للبيانات، مثل الطي (الاختزال)، والخريطة، والتبديل، والضغط، ومتغيراتها، كدوال عضوية من الرتبة العليا لهيكل بيانات موزع. يدعم Muesli حاليًا هياكل البيانات الموزعة للمصفوفات، والمصفوفات المتفرقة، والمصفوفات المتفرقة. [ 61 ]
تتميز هياكل Muesli المتوازية للبيانات، كميزة فريدة، بقدرتها على التوسع التلقائي على كلٍ من البنى أحادية النواة ومتعددة النوى والعُقد العنقودية. [ 62 ] [ 63 ] ويُضمن هنا قابلية التوسع عبر العُقد والنوى باستخدام MPI وOpenMP في آنٍ واحد. مع ذلك، تُعد هذه الميزة اختيارية، إذ يُمكن تجميع وتشغيل أي برنامج مكتوب باستخدام Muesli على حاسوب عنقودي أحادي النواة ومتعدد العُقد دون أي تغييرات في شفرة المصدر، أي أن التوافق مع الإصدارات السابقة مضمون. ويتحقق ذلك من خلال توفير طبقة تجريد OpenMP بسيطة للغاية، بحيث يُمكن تفعيل/إيقاف دعم البنى متعددة النوى ببساطة عن طريق تحديد/حذف علامة مُجمِّع OpenMP عند تجميع البرنامج. وبذلك، لا تُضاف أي تكلفة إضافية تُذكر أثناء التشغيل.
P3L، SkiIE، SKElib
لغة P3L [ 64 ] (لغة بيزا للبرمجة المتوازية) هي لغة تنسيق قائمة على الهياكل. توفر P3L هياكل تُستخدم لتنسيق التنفيذ المتوازي أو التسلسلي لشيفرة C. يُوفر لهذه اللغة مُترجم يُسمى أناكليتو [ 65 ] . يستخدم أناكليتو قوالب التنفيذ لترجمة شيفرة P3L إلى بنية مستهدفة. بالتالي، يمكن أن يحتوي الهيكل على عدة قوالب، كل منها مُحسَّن لبنية مختلفة. يُنفذ القالب الهيكل على بنية محددة، ويُوفر رسمًا بيانيًا للعملية مع نموذج أداء. يُمكن استخدام نموذج الأداء لتحديد تحويلات البرنامج التي قد تُؤدي إلى تحسينات في الأداء. [ 66 ]
تُمثل وحدة P3L هيكلاً بنيوياً مُحدداً بدقة، يتضمن مسارات إدخال وإخراج، ووحدات فرعية أخرى أو شيفرة C متسلسلة. يمكن تداخل الوحدات باستخدام نموذج الطبقتين، حيث تتكون الطبقة الخارجية من هياكل متوازية للمهام، بينما يمكن استخدام هياكل متوازية للبيانات في الطبقة الداخلية [64]. يتم التحقق من النوع على مستوى تدفق البيانات، عندما يُحدد المبرمج نوع مسارات الإدخال والإخراج بشكل صريح، وذلك بتحديد تدفق البيانات بين الوحدات الفرعية.
تُشبه بيئة SkIE [ 67 ] (بيئة متكاملة قائمة على الهياكل) بيئة P3L إلى حد كبير ، إذ تعتمد هي الأخرى على لغة تنسيق، ولكنها توفر ميزات متقدمة مثل أدوات تصحيح الأخطاء، وتحليل الأداء، والتصور، وواجهة المستخدم الرسومية. وبدلاً من استخدام لغة التنسيق مباشرةً، يتفاعل المبرمجون مع أداة رسومية، حيث يمكن تركيب وحدات متوازية قائمة على الهياكل.
تعتمد مكتبة SKELib [ 68 ] على إسهامات P3L و SkIE من خلال وراثة نظام القوالب، من بين أمور أخرى. وتختلف عنهما في أنها لم تعد تستخدم لغة تنسيق، بل توفر الهياكل كمكتبة بلغة C، بأداء مماثل لما تم تحقيقه في P3L . وعلى عكس Skil ، وهو إطار عمل هيكلي آخر شبيه بلغة C، فإن سلامة الأنواع غير مُعالجة في SKELib .
PAS و EPAS
PAS (الهياكل المعمارية المتوازية) هو إطار عمل لبرمجة الهياكل، تم تطويره بلغة C++ وMPI. [ 69 ] [ 70 ] يستخدم المبرمجون امتدادًا للغة C++ لكتابة تطبيقات الهياكل الخاصة بهم. [1] ثم يُمرر الكود عبر برنامج نصي مكتوب بلغة Perl، والذي يقوم بدوره بتحويل الكود إلى لغة C++ خالصة، حيث يتم تخصيص الهياكل من خلال الوراثة.
في نظام PAS ، يمتلك كل هيكل كائنًا ممثلًا (Rep) يجب على المبرمج توفيره، وهو المسؤول عن تنسيق تنفيذ الهيكل. يمكن تداخل الهياكل بشكل هرمي عبر كائنات Rep. بالإضافة إلى تنفيذ الهيكل، يدير Rep أيضًا استقبال البيانات من الهيكل ذي المستوى الأعلى، وإرسالها إلى الهياكل الفرعية. يُستخدم بروتوكول اتصال/مزامنة مُعَلم لإرسال واستقبال البيانات بين الهيكل الرئيسي والهياكل الفرعية.
يُعالج امتدادٌ لـ PAS، يُعرف باسم SuperPas [ 71 ] ثم لاحقًا باسم EPAS [ 72 ] ، مخاوف قابلية توسيع الهيكل. باستخدام أداة EPAS ، يُمكن إضافة هياكل جديدة إلى PAS . تُستخدم لغة وصف الهيكل (SDL) لوصف نمط الهيكل من خلال تحديد البنية الطوبولوجية بالنسبة لشبكة معالج افتراضية. بعد ذلك، يُمكن ترجمة SDL إلى كود C++ أصلي، والذي يُمكن استخدامه كأي هيكل آخر.
إسباسكو
SBASCO ( المكونات العلمية القائمة على الهياكل ) هي بيئة برمجة موجهة نحو التطوير الفعال للتطبيقات العددية المتوازية والموزعة. [ 73 ] تهدف SBASCO إلى دمج نموذجين برمجيين: الهياكل والمكونات، مع لغة تركيب مخصصة. يوفر عرض التطبيق للمكون وصفًا لواجهاته (نوع الإدخال والإخراج)؛ بينما يوفر عرض التكوين، بالإضافة إلى ذلك، وصفًا للبنية الداخلية للمكون وتخطيط المعالج. يمكن تعريف البنية الداخلية للمكون باستخدام ثلاثة هياكل: المزرعة، والأنبوب، والكتلة المتعددة.
تُعالج خوارزمية SBASCO التطبيقات القابلة للتجزئة إلى نطاقات من خلال هيكلها متعدد الكتل. تُحدد النطاقات عبر مصفوفات (ثنائية الأبعاد في الغالب)، تُجزأ إلى مصفوفات فرعية ذات حدود متداخلة محتملة. ثم تُجرى الحسابات بطريقة تكرارية شبيهة بخوارزمية تقسيم الفضاء الثنائي (BSP). تتكون المرحلة الأولى من حسابات محلية، بينما تُجري المرحلة الثانية عمليات تبادل الحدود. عُرضت حالة استخدام لمسألة تفاعل-انتشار في المرجع [ 74 ] .
يُقدَّم نوعان من المكونات في المرجع [ 75 ] : المكونات العلمية (SC) التي توفر الشفرة الوظيفية؛ ومكونات جانب الاتصال (CAC) التي تُغلِّف السلوكيات غير الوظيفية مثل الاتصال، وتوزيع تخطيط المعالج، والتكرار. على سبيل المثال، ترتبط مكونات SC بمكون CAC الذي يمكنه العمل كمدير أثناء التشغيل من خلال إعادة تعيين المعالجات المُخصَّصة لمكون SC ديناميكيًا. ويُعرض في المرجع [ 76 ] مثالٌ على تحسُّن الأداء عند استخدام مكونات CAC.
SCL
تُعدّ لغة التنسيق الهيكلي ( SCL ) [ 77 ] من أوائل لغات البرمجة الهيكلية. وهي توفر منهجية لغة التنسيق لبرمجة الهياكل على مكونات البرمجيات. تُعتبر SCL لغة أساسية، وقد صُممت لتُدمج مع لغة مضيفة، مثل Fortran أو C، تُستخدم لتطوير مكونات البرمجيات التسلسلية. في SCL ، تُصنف الهياكل إلى ثلاثة أنواع: التكوين ، والأساسي ، والحسابي . تُجرّد هياكل التكوين أنماطًا لهياكل البيانات شائعة الاستخدام، مثل المصفوفات الموزعة (ParArray). تتوافق الهياكل الأساسية مع هياكل البيانات المتوازية، مثل map وscan وfold. أما هياكل الحساب، فتُجرّد تدفق التحكم، وتتوافق بشكل أساسي مع هياكل المهام المتوازية، مثل farm و SPMD وiterateUntil. استُخدمت منهجية لغة التنسيق بالتزامن مع نماذج الأداء لبرمجة الآلات المتوازية التقليدية، بالإضافة إلى الآلات المتوازية غير المتجانسة التي تحتوي على نوى متعددة مختلفة على كل عقدة معالجة. [ 78 ]
SkePU
SkePU [ 79 ] هو إطار عمل برمجي هيكلي لأنظمة المعالجات متعددة النوى ووحدات معالجة الرسومات المتعددة. وهو مكتبة قوالب مكتوبة بلغة C++، تضم ستة هياكل متوازية للبيانات وهيكلًا واحدًا متوازيًا للمهام، ونوعين من الحاويات، ويدعم التنفيذ على أنظمة متعددة وحدات معالجة الرسومات باستخدام كلٍ من CUDA وOpenCL. وقد طُوِّر مؤخرًا في SkePU دعمٌ للتنفيذ الهجين، والجدولة الديناميكية المُراعية للأداء، وموازنة الأحمال، وذلك من خلال تطبيق واجهة خلفية لنظام التشغيل StarPU. ويجري حاليًا توسيع نطاق SkePU ليشمل مجموعات وحدات معالجة الرسومات.
سكيبر آند كواف
SKiPPER هي مكتبة هيكلية متخصصة في مجال تطبيقات الرؤية الحاسوبية [ 80 ] ، توفر هياكل برمجية بلغة CAML، وبالتالي تعتمد عليها لضمان سلامة أنواع البيانات. تُعرض الهياكل البرمجية بطريقتين: تصريحية وتشغيلية. يستخدم المبرمجون الهياكل التصريحية مباشرةً، بينما توفر نسخها التشغيلية تطبيقًا خاصًا ببنية النظام المستهدفة. انطلاقًا من بيئة التشغيل، ومواصفات الهيكل البرمجي بلغة CAML، ووظائف التطبيق المحددة (المُقدمة بلغة C من قِبل المبرمج)، يتم إنشاء كود C جديد وتجميعه لتشغيل التطبيق على بنية النظام المستهدفة. من الميزات المهمة في SKiPPER إمكانية تنفيذ البرنامج الهيكلي بشكل تسلسلي لأغراض تصحيح الأخطاء.
تم استكشاف مناهج مختلفة في SKiPPER لكتابة الهياكل التشغيلية: رسوم بيانية ثابتة لتدفق البيانات، وشبكات العمليات البارامترية، ورسوم بيانية هرمية للمهام، ورسوم بيانية لتدفق البيانات ذات الرموز المميزة. [ 81 ]
QUAFF [ 82 ] هي مكتبة هيكلية حديثة مكتوبة بلغة C++ وMPI. تعتمد QUAFF على تقنيات البرمجة الوصفية القائمة على القوالب لتقليل الحمل الزائد أثناء التشغيل وإجراء توسيعات وتحسينات للهيكل أثناء الترجمة. يمكن تداخل الهياكل، وتكون الدوال المتسلسلة ذات حالة. بالإضافة إلى التحقق من الأنواع، تستفيد QUAFF من قوالب C++ لإنشاء كود C/MPI جديد أثناء الترجمة. تستند QUAFF إلى نموذج CSP، حيث يُوصف البرنامج الهيكلي كشبكة عمليات وقواعد إنتاج (مفرد، متسلسل، متوازي، ضم). [ 83 ]
سكيتو
مشروع SkeTo [ 84 ] عبارة عن مكتبة C++ تُحقق التوازي باستخدام MPI. يختلف SkeTo عن مكتبات الهياكل الأخرى لأنه بدلاً من توفير أنماط توازي قابلة للتداخل، يُوفر SkeTo هياكل متوازية لبنى البيانات المتوازية مثل: القوائم، والأشجار [ 85 ] [ 86 ] ، والمصفوفات [ 87 ] . تُحدد أنواع بنى البيانات باستخدام قوالب، ويمكن استدعاء العديد من العمليات المتوازية عليها. على سبيل المثال، تُوفر بنية القائمة عمليات متوازية مثل: map، وreduce، وscan، وzip، وshift، إلخ...
ركزت أبحاث إضافية حول SkeTo أيضًا على استراتيجيات التحسين عن طريق التحويل، ومؤخرًا على التحسينات الخاصة بمجالات محددة. [ 88 ] على سبيل المثال، يوفر SkeTo تحويلًا دمجيًا [ 89 ] يدمج استدعاءين متتاليين للدالة في استدعاء واحد، مما يقلل من تكاليف استدعاء الدالة ويتجنب إنشاء هياكل بيانات وسيطة يتم تمريرها بين الدوال.
مهارة
Skil [ 90 ] هي لغة برمجة إجرائية لبرمجة الهياكل. لا تُعدّ الهياكل جزءًا أساسيًا من اللغة، بل تُنفّذ معها. تستخدم Skil مجموعة فرعية من لغة C تُوفّر ميزات شبيهة باللغات الوظيفية، مثل الدوال العليا، والتكرار، والأنواع متعددة الأشكال. عند تجميع Skil ، تُحذف هذه الميزات ويُنتج كود C عادي. بالتالي، تُحوّل Skil الدوال العليا متعددة الأشكال إلى دوال C أحادية الشكل من الدرجة الأولى. لا تدعم Skil التركيب المتداخل للهياكل. يُحقّق التوازي في البيانات باستخدام هياكل بيانات متوازية مُحدّدة، على سبيل المثال لتوزيع المصفوفات بين المعالجات المتاحة. يُمكن استخدام هياكل التصفية.
إطار عمل STAPL الهيكلي
في إطار عمل STAPL Skeleton [ 91 ] [ 92 ] ، تُعرَّف الهياكل على أنها رسوم بيانية لتدفق البيانات ذات معلمات، مما يسمح بتوسيع نطاقها ليشمل أكثر من 100,000 نواة. إضافةً إلى ذلك، يعالج هذا الإطار تركيب الهياكل كتركيب مباشر لرسوم تدفق البيانات المقابلة لها من خلال مفهوم المنافذ، مما يُسهِّل إضافة هياكل جديدة إلى الإطار. ونتيجةً لذلك، يُغني هذا الإطار عن الحاجة إلى إعادة التنفيذ والمزامنة الشاملة في الهياكل المركبة. يدعم إطار عمل STAPL Skeleton التركيب المتداخل، ويمكنه التبديل بين التنفيذ المتوازي والتسلسلي في كل مستوى من مستويات التداخل. يستفيد هذا الإطار من التنفيذ القابل للتوسع لحاويات STAPL المتوازية [ 93 ] ، ويمكنه تشغيل الهياكل على حاويات متنوعة، بما في ذلك المتجهات والمصفوفات متعددة الأبعاد والقوائم.
T4P
كان نظام T4P من أوائل الأنظمة التي طُرحت لبرمجة الهياكل. [ 94 ] اعتمد النظام بشكل كبير على خصائص البرمجة الوظيفية، وتم تعريف خمسة هياكل كدوال من الرتبة العليا: فرق تسد، المزرعة، الخريطة، الأنبوب، وRaMP. يمكن أن يكون للبرنامج أكثر من تطبيق، يستخدم كل منها مزيجًا من هياكل مختلفة. علاوة على ذلك، يمكن أن يكون لكل هيكل تطبيقات متوازية مختلفة. استُخدمت منهجية قائمة على تحويلات البرامج الوظيفية، والموجهة بنماذج أداء الهياكل، لاختيار الهيكل الأنسب للبرنامج، بالإضافة إلى التطبيق الأنسب لهذا الهيكل. [ 95 ]
مقارنة الأطر
- سنوات النشاط هي الفترة الزمنية المعروفة للنشاط. تشير التواريخ الموضحة في هذا العمود إلى تاريخي النشر الأول والأخير لمقالة ذات صلة في مجلة علمية أو وقائع مؤتمر. تجدر الإشارة إلى أن المشروع قد يستمر نشاطه بعد انقضاء فترة النشاط المحددة، وأننا لم نتمكن من العثور على أي منشور له بعد التاريخ المذكور.
- لغة البرمجة هي الواجهة التي يتفاعل معها المبرمجون لكتابة تطبيقاتهم الأساسية. تتنوع هذه اللغات، وتشمل نماذج برمجية مثل: اللغات الوظيفية، ولغات التنسيق، ولغات الترميز، واللغات الإجرائية، واللغات كائنية التوجه، وحتى واجهات المستخدم الرسومية. داخل لغة البرمجة، تُقدم الهياكل البرمجية إما كبنى لغوية أو كمكتبات. توفير الهياكل البرمجية كبنى لغوية يستلزم تطوير لغة مخصصة خاصة بالمجال ومترجمها. كان هذا هو الاتجاه السائد في بداية أبحاث الهياكل البرمجية. أما الاتجاه الأحدث فهو توفير الهياكل البرمجية كمكتبات، لا سيما مع اللغات كائنية التوجه مثل C++ وجافا.
- لغة التنفيذ هي اللغة التي تُشغَّل أو تُجمَّع بها التطبيقات الهيكلية. وقد تبيّن مبكراً أن لغات البرمجة (خاصةً في الحالات الوظيفية) لم تكن فعّالة بما يكفي لتنفيذ البرامج الهيكلية. لذلك، جرى تبسيط لغات برمجة الهياكل عن طريق تنفيذ التطبيقات الهيكلية بلغات أخرى. وقد طُرحت عمليات تحويل لتحويل التطبيقات الهيكلية (المُعرَّفة بلغة البرمجة) إلى تطبيق مُكافئ لها في لغة التنفيذ المستهدفة. وشملت هذه العمليات توليد الشفرة أو إنشاء هياكل دنيا (تُسمى أحياناً هياكل تشغيلية) قادرة على التفاعل مع مكتبة في لغة التنفيذ. كما أتاح التطبيق المُحوَّل إمكانية إدخال شفرة معمارية مُخصصة للأداء في التطبيق المُحوَّل. ويُبيّن الجدول 1 أن لغة C كانت اللغة المُفضَّلة للتنفيذ.
- توفر مكتبة التوزيع وظائف لتحقيق الحسابات المتوازية/الموزعة. وقد حظيت MPI بشعبية واسعة في هذا المجال، وهو أمر غير مفاجئ نظرًا لتكاملها الممتاز مع لغة C، وكونها على الأرجح الأداة الأكثر استخدامًا للتوازي في الحوسبة العنقودية. وبطبيعة الحال، تبقى مخاطر البرمجة المباشرة باستخدام مكتبة التوزيع بعيدة عن أنظار المبرمجين الذين لا يتعاملون معها. ومؤخرًا، اتجهت الجهود نحو تطوير أطر عمل هيكلية قادرة على التفاعل مع أكثر من مكتبة توزيع. فعلى سبيل المثال، يمكن لـ CO2 P3 S استخدام Threads أو RMI أو Sockets؛ ويمكن لـ Mallba استخدام Netstream أو MPI؛ بينما يستخدم JaSkel مكتبة AspectJ لتنفيذ التطبيقات الهيكلية على أطر عمل هيكلية مختلفة.
- يشير أمان النوع إلى القدرة على اكتشاف أخطاء عدم توافق الأنواع في البرامج الهيكلية. بما أن أطر العمل الهيكلية الأولى بُنيت على لغات وظيفية مثل هاسكل، فقد ورثت أمان النوع ببساطة من اللغة المضيفة. مع ذلك، ومع تطوير لغات مخصصة للبرمجة الهيكلية، كان لا بد من كتابة مُترجمات تأخذ فحص النوع في الحسبان؛ وهو أمر لم يكن صعبًا نظرًا لعدم دعم تداخل الهياكل بشكل كامل. ولكن مؤخرًا، مع بدء استضافة أطر العمل الهيكلية على لغات كائنية التوجه مع تداخل كامل، عادت مشكلة أمان النوع إلى الظهور. لسوء الحظ، تم إهمال فحص النوع في الغالب (باستثناء QUAFF)، وخاصة في أطر العمل الهيكلية المبنية على جافا.
- تُعرف خاصية تداخل الهياكل بأنها القدرة على التركيب الهرمي لأنماط الهياكل. وقد اعتُبرت هذه الخاصية ميزةً أساسيةً في برمجة الهياكل منذ بدايتها، لأنها تسمح بتركيب أنماط أكثر تعقيدًا انطلاقًا من مجموعة أساسية من الأنماط الأبسط. ومع ذلك، استغرق الأمر وقتًا طويلًا حتى يدعم مجتمع البرمجة التداخل الكامل للهياكل، ويعود ذلك أساسًا إلى صعوبات الجدولة والتحقق من الأنواع. ومن الواضح أن أطر عمل الهياكل الحديثة تدعم التداخل الكامل للهياكل.
- يُقصد بالوصول إلى الملفات القدرة على الوصول إلى الملفات ومعالجتها من داخل التطبيق. في الماضي، أثبتت البرمجة الهيكلية جدواها بشكل أساسي للتطبيقات كثيفة الحساب، حيث تتطلب كميات صغيرة من البيانات وقتًا حسابيًا كبيرًا. مع ذلك، تتطلب العديد من التطبيقات الموزعة أو تُنتج كميات كبيرة من البيانات أثناء عملياتها الحسابية. هذا هو الحال في الفيزياء الفلكية، وفيزياء الجسيمات، والمعلوماتية الحيوية، وغيرها. لذا، يُعد توفير دعم لنقل الملفات يتكامل مع البرمجة الهيكلية أمرًا بالغ الأهمية، ولكنه غالبًا ما يُغفل عنه.
- مجموعة الهياكل هي قائمة بأنماط الهياكل المدعومة. تختلف مجموعات الهياكل اختلافًا كبيرًا من إطار عمل لآخر، والأكثر إثارة للدهشة أن بعض الهياكل التي تحمل الاسم نفسه لها دلالات مختلفة في أطر العمل المختلفة. ولعلّ أكثر أنماط الهياكل شيوعًا في الأدبيات هي: farm و pipe و map.
| سنوات النشاط | لغة البرمجة | لغة التنفيذ | مكتبة التوزيع | آمن من نوع الكتابة | أعشاش الهياكل العظمية | الوصول إلى الملفات | مجموعة هياكل عظمية | |
|---|---|---|---|---|---|---|---|---|
| يساعد | 2004–2007 | لغة التحكم المخصصة | لغة سي++ | TCP/IP + ssh/scp | نعم | لا | صريح | التسلسل، تعديل المعلمات |
| SBSACO | 2004–2006 | لغة التأليف المخصصة | لغة سي++ | معهد ماكس بلانك | نعم | نعم | لا | مزرعة، أنبوب، متعدد الكتل |
| إسكل | 2004–2005 | ج | ج | معهد ماكس بلانك | لا | ؟ | لا | خط أنابيب، مزرعة، صفقة، فراشة، تبادل مقدس |
| HDC | 2004–2005 | مجموعة فرعية من لغة هاسكل | ج | معهد ماكس بلانك | نعم | ؟ | لا | dcA، dcB، dcD، dcE، dcF، خريطة، أحمر، مسح ضوئي، مرشح |
| SKELib | 2000-2000 | ج | ج | معهد ماكس بلانك | لا | لا | لا | مزرعة، أنبوب |
| سكيبر | 1999–2002 | منظمة مكافحة غسل الأموال وتمويل الإرهاب | ج | SynDex | نعم | محدود | لا | scm، df، tf، intermem |
| سكي | 1999-1999 | لغة تحكم مخصصة/واجهة مستخدم رسومية | لغة سي++ | معهد ماكس بلانك | نعم | محدود | لا | أنبوب، مزرعة، خريطة، تقليل، حلقة |
| عدن | 1997–2011 | امتداد هاسكل | هاسكل | PVM/MPI | نعم | نعم | لا | Map، Farm، Workpool، Nr، DC، Pipe، IterUntil، Torus، Ring |
| P3L | 1995–1998 | لغة التحكم المخصصة | ج | معهد ماكس بلانك | نعم | محدود | لا | خريطة، تقليل، مسح ضوئي، تجميع، أنبوب، مزرعة، تسلسل، حلقة |
| مهارة | 1995–1998 | مجموعة فرعية من C | ج | ؟ | نعم | لا | لا | بيانات نقطة، خريطة، طي |
| SCL | 1994–1999 | لغة التحكم المخصصة | فورتران/سي | معهد ماكس بلانك | نعم | محدود | لا | خريطة، مسح ضوئي، طي، مزرعة، SPMD، تكرار حتى |
| T4P | 1990–1994 | الأمل+ | الأمل+ | أدوات CS | نعم | محدود | لا | D&C (فرق تسد)، خريطة، أنبوب، RaMP |
| سنوات النشاط | لغة البرمجة | لغة التنفيذ | مكتبة التوزيع | آمن من نوع الكتابة | أعشاش الهياكل العظمية | الوصول إلى الملفات | مجموعة هياكل عظمية | |
|---|---|---|---|---|---|---|---|---|
| سكانديوم | 2009–2012 | جافا | جافا | الخيوط | نعم | نعم | لا | التسلسل، الأنبوب، المزرعة، من أجل، بينما، الخريطة، القطع والقص، التفرع |
| التدفق السريع | 2009– | لغة سي++ | C++11 / CUDA / OpenCL | خيوط C++11 / خيوط Posix / TCP-IP / OFED-IB / CUDA / OpenCL | نعم | نعم | نعم | خط الأنابيب، المزرعة، المعالجة المتوازية، المعالجة المتوازية مع التخفيض، المعالجة التكرارية، المعالجة التكرارية مع التخفيض، المعالجة التكرارية مع التخفيض، المعالجة التكرارية مع التخفيض، تطور التجميع، تدفق البيانات الكلي |
| الكالسيوم | 2006–2008 | جافا | جافا | استباقي | نعم | نعم | نعم | التسلسل، الأنبوب، المزرعة، من أجل، بينما، الخريطة، القطع والقص، التفرع |
| كواف | 2006–2007 | لغة سي++ | ج | معهد ماكس بلانك | نعم | نعم | لا | التسلسل، الأنابيب، المزرعة، إدارة سلسلة التوريد، باردو |
| جاسكل | 2006–2007 | جافا | جافا/أسبكت جيه | MPP / RMI | لا | نعم | لا | مزرعة، خط أنابيب، نبض القلب |
| عضلي | 2005–2008 | جافا | جافا | معهد إدارة المخاطر | لا | نعم | لا | مزرعة، أنبوب، تسلسل، + رسوم بيانية مخصصة من MDF |
| HOC-SA | 2004–2008 | جافا | جافا | غلوبوس، كوالا | لا | لا | لا | مزرعة، خط أنابيب، جبهة الموجة |
| سكيتو | 2003–2013 | لغة سي++ | لغة سي++ | معهد ماكس بلانك | نعم | لا | لا | قائمة، مصفوفة، شجرة |
| مالبا | 2002–2007 | لغة سي++ | لغة سي++ | نت ستريم / إم بي آي | نعم | لا | لا | دقيق، استدلالي، هجين |
| نخاع العظم | 2013– | لغة سي++ | لغة C++ بالإضافة إلى OpenCL | (لا أحد) | لا | نعم | لا | التوازي في البيانات: الخريطة، وتقنية الخريطة والاختزال. التوازي في المهام: خط الأنابيب، والحلقة، وحلقات التكرار. |
| موسلي | 2002–2013 | لغة سي++ | لغة سي++ | MPI / OpenMP | نعم | نعم | لا | المعالجة المتوازية للبيانات: الطي، والرسم، والتبديل، والمسح، والضغط، والمتغيرات. المعالجة المتوازية للمهام: التفرع والتقييد، والتقسيم والتغلب، والزراعة، والأنابيب. المعالجة المساعدة: التصفية، والنهائية، والابتدائية. |
| Alt | 2002–2003 | Java/GworkflowDL | جافا | جافا آر إم آي | نعم | لا | لا | خريطة، رمز بريدي، اختزال، مسح ضوئي، تحويل رقمي، تكرار، تطبيق، فرز |
| (E)PAS | 1999–2005 | امتداد C++ | لغة سي++ | معهد ماكس بلانك | لا | نعم | لا | النمط الفردي، النسخ المتماثل، التركيبي، خط الأنابيب، فرق تسد، التوازي في البيانات |
| الليثيوم | 1999–2004 | جافا | جافا | معهد إدارة المخاطر | لا | نعم | لا | أنبوب، خريطة، مزرعة، تقليل |
| CO2P3S | 1999–2003 | واجهة المستخدم الرسومية/جافا | جافا (مولدة) | الخيوط / RMI / المقابس | جزئي | لا | لا | تسلسل الأساليب، الموزع، الشبكة، الجبهة الموجية |
| STAPL | 2010– | لغة سي++ | C++11 | مكتبة وقت تشغيل STAPL (MPI، OpenMP، PThreads) | نعم | نعم | نعم | خريطة، ضغط <الرتبة>، تقليل، مسح ضوئي، مزرعة، فراشة (عكسية)، شجرة (عكسية) <الرتبة k>، مضاعفة متكررة، تسلسلي، تبديل، استنسل <البعد n>، جبهة الموجة <البعد n>، تقليل الكل، تجميع الكل، تجميع، تشتيت، بث العمليات: التأليف، التكرار، التكرار المستمر، التكرار الشامل، التكرار المتقاطع |
انظر أيضاً
مراجع
- ↑ ك. هاموند وج. ميكلسون، محرران. "اتجاهات البحث في البرمجة الوظيفية المتوازية". سبرينغر-فيرلاغ، لندن، المملكة المتحدة، 1999.
- ↑ فانشي، م. (2002). "نموذج برمجة ASSIST، بيئة للتطبيقات المحمولة المتوازية والموزعة". الحوسبة المتوازية . 28 (12): 1709-1732 . CiteSeerX 10.1.1.59.5543 . doi : 10.1016/S0167-8191(02)00188-6 .
- ↑ م. ألدينوتشي، م. كوبولا، م. دانيلوتو، ن. تونيلوتو، م. فانيشي، و س. زوكولو. "برمجة الشبكة عالية المستوى باستخدام ASSIST." الأساليب الحسابية في العلوم والتكنولوجيا، 12(1):21–32، 2006.
- ↑ م. ألدينوتشي وم. توركواتي. تسريع مزارع أباتشي من خلال مستودع كائنات قابل للتوسع وموزع مخصص. في وقائع المؤتمر الدولي العاشر للمعالجة المتوازية Euro-Par 2004، المجلد 3149 من سلسلة محاضرات علوم الحاسوب، الصفحات 596-605. سبرينغر، 2004.
- ↑ ألدينوتشي، م.؛ دانيلوتو، م.؛ أنطونيو، ج.؛ جان، م. (2008). "مشاركة البيانات المقاومة للأعطال لشبكة عالية المستوى: بنية تخزين هرمية". إنجازات في البحوث الأوروبية حول أنظمة الشبكات . ص 67. doi : 10.1007/978-0-387-72812-4_6 . ISBN 978-0-387-72811-7.
- ↑ 'S. MacDonald, J. Anvik, S. Bromling, J. Schaeffer, D. Szafron, and K. Tan.' "From patterns to frameworks to parallel programs." Parallel Comput., 28(12):1663–1683, 2002.
- ↑ ك. تان، د. سزافرون، ج. شيفر، ج. أنفيك، و س. ماكدونالد. "استخدام أنماط التصميم التوليدية لإنشاء كود متوازي لبيئة ذاكرة موزعة." في PPoPP '03: وقائع ندوة ACM SIGPLAN التاسعة حول مبادئ وممارسات البرمجة المتوازية، الصفحات 203-215، نيويورك، نيويورك، الولايات المتحدة الأمريكية، 2003. ACM.
- ↑ د. كاروميل وم. ليتون. "ضبط الهياكل الخوارزمية بدقة". في المؤتمر الدولي الثالث عشر للمعالجة المتوازية: المعالجة المتوازية، المجلد 4641 من سلسلة محاضرات في علوم الحاسوب، الصفحات 72-81. سبرينغر-فيرلاغ، 2007.
- ↑ د. كاروميل، ل. هنريو، و م. ليتون. "هياكل خوارزمية آمنة من حيث النوع". في وقائع المؤتمر السادس عشر لـ Euromicro حول المعالجة المتوازية والموزعة والقائمة على الشبكة، الصفحات 45-53، تولوز، فرنسا، فبراير 2008. مطبعة IEEE CS.
- ↑ د. كاروميل وم. ليتون. "نموذج بيانات ملفات شفاف وغير تدخلي للهياكل الخوارزمية." في المؤتمر الدولي الثاني والعشرين للمعالجة المتوازية والموزعة (IPDPS)، الصفحات 1-8، ميامي، الولايات المتحدة الأمريكية، مارس 2008. جمعية IEEE للحاسبات.
- ↑ ماريو ليتون، خوسيه إم. بيكر. "سكانديوم: برمجة متعددة النوى باستخدام الهياكل الخوارزمية"، IEEE Euro-micro PDP 2010.
- ^ ريتا لوجن ويولاندا أورتيجا مالين وريكاردو بينيا ماري. "البرمجة الوظيفية المتوازية في عدن"، مجلة البرمجة الوظيفية، العدد 15(2005)،3، الصفحات 431-475
- ↑ موراي كول. "إخراج الأسرار من الخزانة: بيان عملي للبرمجة المتوازية الهيكلية." الحوسبة المتوازية، 30(3):389–406، 2004.
- ↑ أ. بينوا، م. كول، س. جيلمور، و ج. هيلستون. "البرمجة الهيكلية المرنة باستخدام eskel". في: ج. س. كونها و ب. د. ميديروس (محرران)، يورو-بار، المجلد 3648 من سلسلة محاضرات في علوم الحاسوب، الصفحات 761-770. سبرينغر، 2005.
- ↑ أ. بينوا وم. كول. "مفهومان أساسيان في البرمجة المتوازية الهيكلية". في: ف. سوندرام، د. فان ألبادا، ب. سلوت، وج. دونغارا (محررون)، المؤتمر الدولي لعلوم الحوسبة (ICCS 2005)، الجزء الثاني، سلسلة محاضرات في علوم الحاسوب 3515، الصفحات 764-771. دار نشر سبرينغر، 2005.
- ↑ أ. بينوا، م. كول، س. جيلمور، و ج. هيلستون. تقييم أداء البرامج المتوازية عالية المستوى القائمة على الهياكل. في م. بوباك، د. فان ألبادا، ب. سلوت، و ج. دونغارا، المحررين، المؤتمر الدولي لعلوم الحوسبة (ICCS 2004)، الجزء الثالث، LNCS 3038، الصفحات 289-296. سبرينغر فيرلاغ، 2004.
- ↑ أ. بينوا، م. كول، س. جيلمور، و ج. هيلستون. "تقييم أداء البرامج المتوازية ذات البنية الأنبوبية باستخدام الهياكل العظمية وجبر العمليات." الحوسبة القابلة للتوسع: الممارسة والخبرة، 6(4):1–16، ديسمبر 2005.
- ↑ أ. بينوا، م. كول، س. جيلمور، و ج. هيلستون. "جدولة تطبيقات الشبكة القائمة على الهيكل باستخدام pepa و nws." مجلة الكمبيوتر، عدد خاص حول نمذجة وقياس أداء الشبكة، 48(3):369–378، 2005.
- ↑ أ. بينوا وي. روبرت. "رسم هياكل خطوط الأنابيب على منصات غير متجانسة". في المؤتمر الدولي السابع لعلوم الحوسبة ICCS 2007، سلسلة محاضرات علوم الحاسوب 4487، الصفحات 591-598. دار نشر سبرينغر، 2007.
- ↑ جي. يايكوم، إم. كول، إس. جيلمور، وجيه. هيلستون. "نهج هيكلي لنمذجة أداء الأنظمة باستخدام الهياكل العظمية." ملاحظات إلكترونية في علوم الحاسوب النظرية، 190(3):167–183، 2007.
- ↑ هـ. غونزاليس-فيليز وم. كول . "نحو توازي خط الأنابيب التكيفي بالكامل للبيئات الموزعة غير المتجانسة." في المعالجة المتوازية والموزعة وتطبيقاتها، الندوة الدولية الرابعة (ISPA)، سلسلة محاضرات في علوم الحاسوب، الصفحات 916-926. سبرينغر-فيرلاغ، 2006.
- ↑ هـ. غونزاليس-فيليز وم. كول. "التوازي الهيكلي التكيفي للشبكات الحاسوبية." في PPoPP '07: وقائع الندوة الثانية عشرة لـ ACM SIGPLAN حول مبادئ وممارسات البرمجة المتوازية، الصفحات 140-141، نيويورك، نيويورك، الولايات المتحدة الأمريكية، 2007. ACM.
- ↑ ألدينوتشي، م.؛ كامبا، س.؛ دانيلوتو، م.؛ كيلباتريك، ب.؛ توركواتي، م. (2013). "استهداف الأنظمة الموزعة في FastFlow" (ملف PDF) . ورش عمل المعالجة المتوازية Euro-Par 2012. سلسلة محاضرات في علوم الحاسوب. المجلد 7640. الصفحات 47-56 . doi : 10.1007/978-3-642-36949-0_7 . ISBN 978-3-642-36948-3.
- ↑ ألدينوتشي، م.؛ سبامبيناتو، س.؛ دروكو، م.؛ توركواتي، م.؛ بالازو، س. (2012). "خوارزمية متوازية للحفاظ على الحواف لإزالة التشويش من صور الملح والفلفل". المؤتمر الدولي الثالث لمعالجة الصور، 2012، حول نظرية وأدوات وتطبيقات معالجة الصور (IPTA). الصفحات 97-104 . doi : 10.1109/IPTA.2012.6469567 . hdl : 2318/154520 .
- ↑ ألدينوتشي، م.؛ دانيلوتو، م.؛ كيلباتريك، ب.؛ مينغين، م.؛ توركواتي، م. (2012). "طابور فعال غير محدود وخالٍ من الأقفال لأنظمة متعددة النوى". المعالجة المتوازية Euro-Par 2012. سلسلة محاضرات في علوم الحاسوب. المجلد 7484. الصفحات 662-673 . doi : 10.1007/978-3-642-32820-6_65 . hdl : 2318/121343 . ISBN 978-3-642-32819-0.
- ↑ ألدينوتشي، م.؛ مينغين، م.؛ توركواتي، م. (2010). "خوارزمية سميث-واترمان الفعّالة على المعالجات متعددة النوى مع التدفق السريع ". المؤتمر الثامن عشر لـ Euromicro حول المعالجة المتوازية والموزعة والقائمة على الشبكة . IEEE. ص 195. CiteSeerX 10.1.1.163.9092 . doi : 10.1109/PDP.2010.93 . ISBN 978-1-4244-5672-7. S2CID 1925361 .
- ↑ سي إيه هيرمان وسي لينغاور. "HDC: لغة من الدرجة العليا لتقسيم وغزو." رسائل المعالجة المتوازية، 10(2-3):239-250، 2000.
- ↑ سي. أ. هيرمان. التوازي القائم على الهيكل العظمي للتكرارات القائمة على أسلوب فرق تسد. أطروحة دكتوراه، 2000. ISBN 3-89722-556-5".
- ↑ ج. دونويبر، س. غورلاتش. "المكونات ذات الرتبة العليا لبرمجة الشبكات: جعل الشبكات أكثر قابلية للاستخدام". سبرينغر-فيرلاغ، 2009. ISBN 978-3-642-00840-5
- ↑ جيه إف فيريرا، جيه إل سوبرال، وإيه جيه بروينكا. "جاسكل: إطار عمل قائم على هيكل جافا للحوسبة العنقودية والشبكية المنظمة". في وقائع ندوة IEEE الدولية السادسة حول الحوسبة العنقودية والشبكية (CCGRID '06)، الصفحات 301-304، واشنطن العاصمة، الولايات المتحدة الأمريكية، 2006. جمعية IEEE للحاسبات.
- ↑ ج. سوبرال وأ. بروينسا. "تمكين هياكل جاسكل للمجموعات والشبكات الحاسوبية." في مؤتمر IEEE Cluster. مطبعة IEEE، 9 2007.
- ↑ م. ألدينوتشي وم. دانيلوتو. "تحسين الهيكل المتوازي للتدفق." في وقائع مؤتمر PDCS: المؤتمر الدولي للحوسبة المتوازية والموزعة والأنظمة، الصفحات 955-962، كامبريدج، ماساتشوستس، الولايات المتحدة الأمريكية، نوفمبر 1999. IASTED، مطبعة ACTA.
- ↑ ألدينوتشي، م.؛ دانيلوتو، م.؛ تيتي، ب. (2003). "بيئة متقدمة تدعم البرمجة المتوازية المهيكلة في جافا". أنظمة حاسوب الجيل القادم . 19 (5): 611. CiteSeerX 10.1.1.59.3748 . doi : 10.1016/S0167-739X(02)00172-3 .
- ↑ م. دانيلوتو وب. تيتي. "ليثيوم: بيئة برمجة متوازية منظمة في جافا." في وقائع المؤتمر الدولي لعلوم الحوسبة (ICCS)، المجلد 2330 من سلسلة محاضرات علوم الحاسوب (LNCS)، الصفحات 844-853. دار نشر سبرينغر، أبريل 2002.
- ↑ م. ألدينوتشي وم. دانيلوتو. "دلالات تشغيلية للهياكل العظمية". في جي آر جوبير، دبليو إي ناجل، إف جيه بيترز، و دبليو في والتر، المحررين، الحوسبة المتوازية: تكنولوجيا البرمجيات، والخوارزميات، والهياكل، والتطبيقات، باركو 2003، المجلد 13 من التقدم في الحوسبة المتوازية، الصفحات 63-70، دريسدن، ألمانيا، 2004. إلسيفير.
- ↑ ألدينوتشي، م.؛ دانيلوتو، م. (2007). "البرمجة المتوازية القائمة على الهيكل: الدلالات الوظيفية والمتوازية في خطوة واحدة☆". لغات الحاسوب، والأنظمة، والهياكل . 33 ( 3-4 ): 179. CiteSeerX 10.1.1.164.368 . doi : 10.1016/j.cl.2006.07.004 .
- ↑ م. ألدينوتشي، م. دانيلوتو، و ج. دونويبر. "تقنيات التحسين لتنفيذ الهياكل المتوازية في بيئات الشبكة." في س. غورلاتش، محرر، وقائع ورشة العمل الدولية حول الأساليب البنائية للبرمجة المتوازية (CMPP)، الصفحات 35-47، ستيرلنغ، اسكتلندا، المملكة المتحدة، يوليو 2004. جامعة مونستر، ألمانيا.
- ↑ م. دانيلوتو . دعم فعال للهياكل على مجموعات محطات العمل. رسائل المعالجة المتوازية، 11(1):41–56، 2001.
- ↑ م. دانيلوتو. "دعم وقت التشغيل الديناميكي للهياكل العظمية." تقرير فني، 1999.
- ↑ م. دانيلوتو. "جودة الخدمة في البرمجة المتوازية من خلال مديري التطبيقات." في PDP '05: وقائع المؤتمر الثالث عشر لـ Euromicro حول المعالجة المتوازية والموزعة والقائمة على الشبكة (PDP'05)، الصفحات 282-289، واشنطن العاصمة، الولايات المتحدة الأمريكية، 2005. جمعية IEEE للحاسبات.
- ↑ م. ألدينوتشي وم. دانيلوتو. "تكلفة الأمن في الأنظمة الهيكلية". في: ب. دامبرا وم. ر. غواراسينو، محرران، وقائع المؤتمر الدولي Euromicro PDP 2007: المعالجة المتوازية والموزعة والقائمة على الشبكة، الصفحات 213-220، نابولي، إيطاليا، فبراير 2007. IEEE.
- ↑ م. ألدينوتشي وم. دانيلوتو. "تأمين الأنظمة الهيكلية مع تقليل تأثير الأداء: تجربة muskel." مجلة هندسة النظم، 2008.
- ^ م. دانيلوتو و ب. دازي. "إطار عمل Java/Jini يدعم العمليات الحسابية المتوازية." في بروك. الدولية. باركو 2005: الحوسبة المتوازية، سبتمبر 2005.
- ↑ م. دانيلوتو وب. داتزي. "الاستغلال المشترك للتوازي المنظم/غير المنظم من خلال تدفق البيانات." في: ف. ألكسندروف، د. فان ألبادا، ب. سلوت، وج. دونغارا، المحررون، وقائع المؤتمر الدولي لعلوم الحوسبة (ICCS)، ورشة عمل حول الجوانب العملية للبرمجة المتوازية عالية المستوى، سلسلة محاضرات في علوم الحاسوب (LNCS)، ريدينغ، المملكة المتحدة، مايو 2006. دار نشر سبرينغر.
- ↑ م. ألدينوتشي، م. دانيلوتو، و ب. داتزي. "موسكل: بيئة هيكلية قابلة للتوسيع." الحوسبة القابلة للتوسع: الممارسة والخبرة، 8(4):325–341، ديسمبر 2007.
- ↑ إي. ألبا، ف. ألميدا، إم جي بليسا، جي. كابيزا، سي. كوتا، إم. دياز، آي. دورتا، جي. غابارو، سي. ليون، جي. لونا، إل إم مورينو، سي. بابلوس، جيه بيتي، أ. روخاس، وإف. " مالبا: مكتبة من الهياكل العظمية للتحسين التوافقي (مذكرة بحثية) ". في Euro-Par '02: وقائع المؤتمر الأوروبي الثامن الدولي حول المعالجة المتوازية، الصفحات 927-932، لندن، المملكة المتحدة، 2002. Springer-Verlag.
- ↑ إي. ألبا، ف. ألميدا، إم. بليسا، سي. كوتا، إم. دياز، آي. دورتا، جي. غابارو، سي. ليون، جي. لوك، جيه بيتي، سي. رودريغيز، أ. روخاس، و. خوارزميات lan/wan الموازية الفعالة للتحسين: مشروع mallba. الحوسبة المتوازية، 32(5):415-440، 2006.
- ↑ إي. ألبا، جي. لوكي، جيه. غارسيا-نييتو، جي. أوردونيز، وجي. ليغويزامون. "مالبا: مكتبة برمجية لتصميم خوارزميات تحسين فعالة." المجلة الدولية للحوسبة والتطبيقات المبتكرة، 1(1):74-85، 2007.
- ↑ "ريكاردو ماركيز، هيرفيه باولينو، فرناندو ألكسندر، بيدرو د. ميديروس." "إطار هيكلي خوارزمي لتنسيق حسابات وحدة معالجة الرسومات." يورو-بار 2013: 874-885
- ↑ "فرناندو ألكسندر، ريكاردو ماركيز، هيرفيه باولينو." "حول دعم الهياكل الخوارزمية المتوازية للمهام للحوسبة متعددة وحدات معالجة الرسومات." ACM SAC 2014: 880–885
- ↑ هـ. كوشن وج. ستريغنيتز. "ميزات من البرمجة الوظيفية لمكتبة هيكلية بلغة C++". التزامن - الممارسة والخبرة، 17(7-8):739-756، 2005.
- ↑ فيليب سيتشانوفيتش، ومايكل بولدنر، وهيربرت كوشن. "موسلي مكتبة مونستر للهياكل العظمية - نظرة عامة شاملة". ورقة عمل ERCIS رقم 7، 2009
- ↑ H. Kuchen and M. Cole . “The integration of task and data parallel skeletons.” Parallel Processing Letters, 12(2):141–155, 2002.
- ↑ أ. ألكسندريسكو. "التصميم الحديث للغة سي++: البرمجة العامة وتطبيقات أنماط التصميم". أديسون-ويسلي، 2001.
- ↑ مايكل بولدنر. "الهياكل الخوارزمية المتوازية للمهام". أطروحة دكتوراه، جامعة مونستر، 2008.
- ↑ مايكل بولدنر وهربرت كوشن. "الهياكل الخوارزمية للتفرع والتقييد". وقائع المؤتمر الدولي الأول حول تكنولوجيا البرمجيات والبيانات (ICSOFT)، 1:291-300، 2006.
- ↑ مايكل بولدنر وهربرت كوشن. "تحسين معالجة تدفق البيانات الهيكلية لأسلوب فرق تسد". وقائع المؤتمر الدولي الثالث حول تقنيات البرمجيات والبيانات (ICSOFT)، 181-189، 2008.
- ↑ مايكل بولدنر وهربرت كوشن. "هياكل لتقسيم وغزو." وقائع المؤتمر الدولي IASTED حول الحوسبة المتوازية والموزعة والشبكات (PDCN)، 181-188، 2008.
- ↑ مايكل بولدنر وهربرت كوشن. "المزارع القابلة للتوسع". وقائع المؤتمر الدولي للمعالجة المتوازية (ParCo) 33:795–802، 2006.
- ↑ مايكل بولدنر وهربرت كوشن. "حول تنفيذ هيكل المزرعة." رسائل المعالجة المتوازية، 18(1):117–131، 2008.
- ↑ فيليب سيشانوفيتش. "الهياكل الخوارزمية للمصفوفات المتفرقة العامة." وقائع المؤتمر الدولي العشرين لـ IASTED حول الحوسبة المتوازية والموزعة والأنظمة (PDCS)، 188-197، 2008.
- ↑ فيليب سيتشانوفيتش، فيليب كيجل، مارايك شيلمان، سيرجي جورلاتش، وهيربرت كوشن. "موازاة إعادة بناء صور LM OSEM على مجموعات متعددة النوى." الحوسبة المتوازية: من النوى المتعددة ووحدات معالجة الرسومات إلى بيتا سكيل، 19: 169-176، 2010.
- ↑ فيليب سيتشانوفيتش وهربرت كوشن. "تحسين الهياكل الهيكلية المتوازية للبيانات في Muesli لبنى الحواسيب متعددة النوى". المؤتمر الدولي للحوسبة عالية الأداء والاتصالات (HPCC)، 108-113، 2010.
- ↑ باتشي، ب.؛ دانيلوتو، م.؛ أورلاندو، س.؛ بيلاغاتي، س.؛ فانيسكي، م. (1995). "P3L: لغة متوازية عالية المستوى ذات بنية محددة، ودعمها البنيوي". التزامن: الممارسة والتجربة . 7 (3): 225. CiteSeerX 10.1.1.215.6425 . doi : 10.1002/cpe.4330070305 .
- ↑ إس. سيارباغليني، إم. دانيلوتو، إل. فولشي، سي. مانكوني، وإس. بيلاغاتي. "أناكليتو: مُصرّف p3l قائم على القوالب." في وقائع ورشة العمل السابعة للحوسبة المتوازية (PCW '97)، الجامعة الوطنية الأسترالية، كانبرا، أغسطس 1997.
- ↑ م. ألدينوتشي، م. كوبولا، وم. دانيلوتو. إعادة كتابة البرامج الهيكلية: كيفية تقييم المفاضلة بين معالجة البيانات المتوازية ومعالجة التدفق المتوازية. في: س. غورلاتش (محرر)، وقائع ورشة العمل الدولية حول الأساليب البنائية للبرمجة المتوازية (CMPP)، الصفحات 44-58. جامعة باساو، ألمانيا، مايو 1998.
- ↑ ب. باتشي، م. دانيلوتو، س. بيلاغاتي، وم. فانيسكي. "سكاي: بيئة غير متجانسة لتطبيقات الحوسبة عالية الأداء." الحوسبة المتوازية، 25(13-14):1827-1852، 1999.
- ↑ م. دانيلوتو وم. ستيجلياني. "سكيليب: البرمجة المتوازية باستخدام الهياكل في لغة سي." في يورو-بار '00: وقائع المؤتمر الدولي السادس ليورو-بار حول المعالجة المتوازية، الصفحات 1175-1184، لندن، المملكة المتحدة، 2000. سبرينغر-فيرلاغ.
- ↑ د. غوسوامي، أ. سينغ، و ب. ر. بريس. "من أنماط التصميم إلى الهياكل المعمارية المتوازية." مجلة الحوسبة المتوازية والموزعة، 62(4): 669-695، 2002. doi:10.1006/jpdc.2001.1809
- ↑ د. غوسوامي، أ. سينغ، و ب. ر. بريس. "استخدام تقنيات البرمجة الكائنية لتحقيق الهياكل المعمارية المتوازية." في ISCOPE '99: وقائع الندوة الدولية الثالثة حول الحوسبة في بيئات متوازية كائنية التوجه، سلسلة محاضرات في علوم الحاسوب، الصفحات 130-141، لندن، المملكة المتحدة، 1999. سبرينغر-فيرلاغ.
- ↑ إم إم أكون، دي غوسوامي، وإتش إف لي. "سوبرباس: نموذج هيكلي معماري متوازٍ يدعم قابلية التوسع وتكوين الهيكل." في المعالجة المتوازية والموزعة وتطبيقاتها، الندوة الدولية الثانية، ISPA، سلسلة محاضرات في علوم الحاسوب، الصفحات 985-996. سبرينغر-فيرلاغ، 2004.
- ↑ إم إم أكون، أ. سينغ، د. غوسوامي، وإتش إف لي. "هياكل معمارية متوازية قابلة للتوسيع". في الحوسبة عالية الأداء HiPC 2005، المؤتمر الدولي الثاني عشر، المجلد 3769 من سلسلة محاضرات في علوم الحاسوب، الصفحات 290-301، غوا، الهند، ديسمبر 2005. سبرينغر-فيرلاغ.
- ↑ م. دياز، ب. روبيو، إ. سولير، و ج.م. ترويا. "SBASCO: مكونات علمية قائمة على الهيكل العظمي." في PDP، الصفحات 318–. جمعية IEEE للحاسبات، 2004.
- ↑ م. دياز، س. روميرو، ب. روبيو، إ. سولير، و ج.م. ترويا. "استخدام SBASCO لحل معادلات التفاعل والانتشار في مجالات ثنائية الأبعاد غير منتظمة." في الجوانب العملية للبرمجة المتوازية عالية المستوى (PAPP)، التابعة للمؤتمر الدولي للعلوم الحاسوبية (ICCS)، المجلد 3992 من سلسلة محاضرات في علوم الحاسوب، الصفحات 912-919. سبرينغر، 2006.
- ↑ م. دياز، س. روميرو، ب. روبيو، إ. سولير، و ج.م. ترويا. "إطار عمل موجه نحو الجوانب لتطوير المكونات العلمية." في PDP '05: وقائع المؤتمر الثالث عشر لـ Euromicro حول المعالجة المتوازية والموزعة والقائمة على الشبكة، الصفحات 290-296، واشنطن العاصمة، الولايات المتحدة الأمريكية، 2005. جمعية IEEE للحاسبات.
- ↑ م. دياز، س. روميرو، ب. روبيو، إ. سولير، و ج. م. ترويا. "إعادة تشكيل ديناميكية للمكونات العلمية باستخدام البرمجة الموجهة نحو الجوانب: دراسة حالة." في ر. ميرسمان و ز. طاري (محرران)، نحو أنظمة إنترنت ذات معنى 2006: CoopIS، DOA، GADA، و ODBASE، المجلد 4276 من سلسلة محاضرات في علوم الحاسوب، الصفحات 1351-1360. سبرينغر-فيرلاغ، 2006.
- ↑ ج. دارلينجتون، ي. كي غو، هـ. و. تو، وج. يانغ. "هياكل متوازية للتركيب المنظم." في PPOPP '95: وقائع الندوة الخامسة لـ ACM SIGPLAN حول مبادئ وممارسة البرمجة المتوازية، الصفحات 19-28، نيويورك، نيويورك، الولايات المتحدة الأمريكية، 1995. ACM.
- ↑ جون دارلينتون؛ مصطفى غانم؛ ييك غو؛ هينغ وينغ تو (1996)، "تنظيم الموارد الموجه في الحوسبة المتوازية غير المتجانسة"، مجلة الحوسبة عالية الأداء ، 4 (1): 13-23 ، CiteSeerX 10.1.1.37.4309
- ↑ "SkePU" .
- ↑ ج. سيروت، د. جينهاك، وج. ديروتين. "SKiPPER: بيئة برمجة متوازية قائمة على الهيكل لتطبيقات معالجة الصور في الوقت الحقيقي." في ف. مالشكين، محرر، المؤتمر الدولي الخامس حول تقنيات الحوسبة المتوازية (PaCT-99)، المجلد 1662 من سلسلة محاضرات علوم الحاسوب، الصفحات 296-305. سبرينغر، 6-10 سبتمبر 1999.
- ↑ ج. سيروت ود. جينهاك. "هياكل لمعالجة الصور المتوازية : نظرة عامة على مشروع SKiPPER". الحوسبة المتوازية، 28(12):1785–1808، ديسمبر 2002.
- ↑ ج. فالكو، ج. سيروت، ت. شاتو، و ج. ت. لابريست. "Quaff: تصميم C++ فعال للهياكل المتوازية." الحوسبة المتوازية، 32(7):604–615، 2006.
- ↑ ج. فالكو وج. سيروت. "الدلالات الرسمية المطبقة على تنفيذ مكتبة برمجة متوازية قائمة على الهيكل العظمي." في: ج. ر. جوبير، س. بيشوف، ف. ج. بيترز، ت. ليبرت، م. بكر، ب. جيبون، وب. موهر، المحررون، الحوسبة المتوازية: البنى والخوارزميات والتطبيقات (وقائع مؤتمر PARCO 2007، يوليش، ألمانيا)، المجلد 38 من NIC، الصفحات 243-252، ألمانيا، سبتمبر 2007. معهد جون فون نيومان للحوسبة.
- ↑ ك. ماتسوزاكي، هـ. إيواساكي، ك. إيموتو، و ز. هو. "مكتبة من الهياكل البنائية لنمط البرمجة المتوازية التسلسلية." في InfoScale '06: وقائع المؤتمر الدولي الأول حول أنظمة المعلومات القابلة للتوسع، صفحة 13، نيويورك، نيويورك، الولايات المتحدة الأمريكية، 2006. ACM.
- ↑ ك. ماتسوزاكي، ز. هو، و م. تاكيشي. "التوازي باستخدام هياكل الأشجار". في يورو-بار، المجلد 2790 من سلسلة محاضرات في علوم الحاسوب، الصفحات 789-798. سبرينغر، 2003.
- ↑ ك. ماتسوزاكي، ز. هو، و م. تاكيشي. "هياكل متوازية لمعالجة الأشجار العامة." الحوسبة المتوازية، 32(7):590–603، 2006.
- ↑ ك. إيموتو، ز. هو، ك. كاكهي، و م. تاكيشي. "إطار عمل تركيبي لتطوير برامج متوازية على مصفوفات ثنائية الأبعاد." تقرير فني، قسم المعلوماتية الرياضية، جامعة طوكيو، 2005.
- ↑ ك. إيموتو، ك. ماتسوزاكي، ز. هو، و م. تاكيشي. "استراتيجية تحسين خاصة بالمجال لبرامج الهيكل العظمي." في يورو-بار، المجلد 4641 من سلسلة محاضرات في علوم الحاسوب، الصفحات 705-714. سبرينغر، 2007.
- ^ ك. ماتسوزاكي، ك. كاكيهي، ه. إيواساكي، زد هو، وي. أكاشي. "مكتبة هيكلية مدمجة بالاندماج." في M. Danelutto، M. Vanneschi، و D. Laforenza، المحررون، Euro-Par، المجلد 3149 من ملاحظات المحاضرات في علوم الكمبيوتر، الصفحات 644-653. سبرينغر، 2004.
- ↑ GH Botorog و H. Kuchen. "البرمجة المتوازية عالية المستوى الفعالة." Theor. Comput. Sci.، 196(1–2):71–107، 1998.
- ↑ زانديفار، ماني؛ عبد الجبار، مصطفى؛ مجيدي، علي رضا؛ كيز، ديفيد؛ أماتو، نانسي؛ راوخويرجر، لورانس (2015). "تركيب الهياكل الخوارزمية للتعبير عن التطبيقات العلمية عالية الأداء". وقائع المؤتمر الدولي التاسع والعشرين لجمعية آلات الحوسبة (ACM) حول الحوسبة الفائقة . الصفحات 415-424 . doi : 10.1145/2751205.2751241 . ISBN 9781450335591. S2CID 13764901 .
- ↑ زانديفار، ماني؛ توماس، ناثان؛ أماتو، نانسي م.؛ راوخويرجر، لورانس (15 سبتمبر 2014). برودمان، جيمس؛ تو، بينغ (محررون). اللغات والمترجمات للحوسبة المتوازية . سلسلة محاضرات في علوم الحاسوب. دار نشر سبرينغر الدولية. الصفحات 176-190 . doi : 10.1007/978-3-319-17473-0_12 . ISBN 9783319174723.
- ↑ "G. Tanase, et.al." "STAPL Parallel Container Framework" Proceeding PPoPP '11 Proceedings of the 16th ACM symposium on Principles and practice of parallel programming Pages 235–246
- ↑ ج. دارلينجتون، أ. ج. فيلد، ب. ج. هاريسون، ب. هـ. ج. كيلي، د. و. ن. شارب، و ك. وو. "البرمجة المتوازية باستخدام الدوال الهيكلية". في PARLE '93: وقائع المؤتمر الدولي الخامس لـ PARLE حول البنى واللغات المتوازية في أوروبا، الصفحات 146-160، لندن، المملكة المتحدة، 1993. سبرينغر-فيرلاغ.
- ↑ ج. دارلينتون؛ م. غانم؛ هـ. و. تو (1993)، "البرمجة المتوازية المهيكلة"، في نماذج البرمجة للحواسيب المتوازية الضخمة. مطبعة جمعية مهندسي الكهرباء والإلكترونيات. 1993 : 160-169 ، CiteSeerX 10.1.1.37.4610
- لغات البرمجة المتزامنة
- الحوسبة المتوازية
- مكتبات C++
