هذه محاولة بسيطة مني لشرح مفهوم التوازي في الدوت نت على مستوى المهام ارجو ان تنال اعجابكم :
م.وسيم أبوزينة
مقدمة
الحوسبة التفرعية هي شكل من اشكال الحوسبة التقليدية ولكن بفارق انه يتم القيام بعدة مُعالجات خلال واحدة الزمن " دورة معالج , ثانية , ...الخ" . يعتمد مفهوم الحوسبة التفرعية على ان مشكلة معينة يمكن ان يتم تقسيمها الى مشاكل جزئية اصغر ويتم معالجة المشاكل الجزئية على التفرع "التوازي " وتتميز المشاكل الجزئية بالاستقلال فيما بينها . يوجد العديد من انماط الحوسبة التفرعية : التفرع على مستوى البت bit , على مستوى التعليمات ,على مستوى المعطيات وعلى مستوى المهام .ان مفهوم التوازي في عملية المعاجلة تم توظيفه لسنين عديدة في مجال الحواسيب عالية الاداء HPC ولكن الاهتمام بالتفرع اخذ يتزايد في الحواسيب العادية الاداء وذلك بسبب كسر حواجز ترددات عمل المعالج وغيرها من العوامل . فلقد امسى نموذج الحوسبة التفرعية النموذج المسيطر في معماريات الحواسيب بشكل معالجات متعددة النوى وذلك بالنسبة للحواسيب العادية وامسى نمط البرمجة التفرعي Concurrent Programming Methodology حاجة اساسية للتعلم.
يمكن تصنيف الحوسبة التفرعية استنادا الى المستوى الذي نتعامل معه على التفرع كما اننا نجد ان للحوسبة التفرعية اشكال عديدة فيمكن ان نجد تفرع مدعوم بشكل عتادي كالمعالجات متعددة النوى او عدة معالجات ضمن جهاز واحد او على مستوى المعالج الواحد فنحن نتكلم عن مفهوم ال Threads الذي يعطي الإيهام بان المعالج الواحد يعالج عدة امور بنفس الوقت كما نجد مفهوم الحوسبة على مستوى الاجهزة فنجد عدة حواسب تشكل مايسمى بال Grid او الشبكة ومايتضمنه ذلك من تبادل للرسائل بين المعالجات .او التفرع المدعوم برمجيا ومايقابله من ادارة النياسب.
ان برامج الحاسب التي تعتمد على مفهوم الحوسبة التفرعية تتميز بصعوبة الكتابة اكثر من مثيلتها المكتوبة بكود تسلسلي , لان التوازي بمعالجة المهام يقدم اصناف جديدة من الاخطاء البرمجية bugs .كما انه توجد مشاكل عديدة كمشكلة الاتصال بين المعالجات والمزامنة بينها كل هذا يعتبر من الصعوبات التي تواجه المبرمج عندما يريد كتابة برنامج بشكل تفرعي .كما يجدر الذكر بان السرعة المثلى لقياس زمن تنفيذ برنامج في حالة حوسبة تفرعية يمكن معرفته من قانون امبدال التالي :
S(p) = p/((p-1)f+1)
حيث p عدد المعالجات و f الجزء اللازم من المسالة المراد حلها والذي لايحل الا تسلسلياً .
التفرع او التوازي على مستوى المهام :
يعرف ايضا بالتفرع على مستوى التوابع والتحكم , وهو شكل من اشكال التفرع للكود البرمجي بواسطة عدة معالجات في بيئة حوسبة تفرعية .ان التوازي على مستوى المهام يركز على المهام process او النياسيب المنفذة والموزعة على الحواسيب او المعالجات المختلفة .
في نظام يحوي عدة معالجات فان توازي المهام يمكن تحقيقه عندما يقوم كل معالج بتنفيذ مهمة (process thread or) بناء على معطيات واحدة او مختلفة .كما ان المهام المنفذة تتصل فيما بينها من اجل ضمان عدم تعارض المعطيات .
كمثال بسيط اذا كنا نشغل رماز مصدري على نظام يحوي معالجين ا وب في بيئة تفرعية ونحن نريد ان ننفذ المهام ا وب فمن الممكن ان نخبر المعالج ا بان يقوم بتخديم المهمة ا والمعالج ب بان يقوم بتخديم المهمة ب على التوازي , وبالتالي ننقص من زمن تنفيذ البرنامج تقريبا الى النصف .
يركز التوازي على مستوى المهام طبيعة المعالج التفرعية على عكس التوازي على مستوى المعطيات .
التوازي على مستوى المعطيات :
ان التوازي على مستوى المعطيات يعرف ايضا بالتوازي على مستوى الحلقات هو شكل من اشكال التفرع في المعالجة في بيئة تحوي عدة معالجات .يركز التوازي على مستوى المعطيات على المعطيات الموزعة مابين عقد المعالجة في البيئة التفرعية . في نظام يحوي عدة معالجات ينفذ مجموعة واحدة من التعليمات SIMD ,فان التوازي على مستوى المعطيات يمكن تحقيقه عندما يقوم كل معالج بالقيام بنفس المهمة على عدة كتل من المعطيات الوزعة .في بعض الحالات فان مهمة او نيسب واحد يتحكم بجميع مسار والعمليات المتعلقة بالمعطيات .
كمثال توضيحي : لنتعبر ان لدينا نظام يحوي معالجين المعالج ا والمعالج ب في بيئة تفرعية ونريد ان نقوم بمهمة محددة على بعض المعطيات د . من الممكن ان نخبر المعالج ا بان يقوم بمعالجة جزء من المعطيات د وان نخبر المعالج ب بان يقوم بمعالجة جزء من المعطيات الاخر من د على التوازي .وبالتالي ننقص من زمن التنفيذ . وكمثال آخر اعتبر انك تريد جمع مصفوفتين في تطبيق التوازي على مستوى المعطيات المعالج ا يمكن ان يجمع العناصر المتقابلة من المصفوفتين من الاعلى الى النصف بينما يقوم المعالج ب بالقيام بعملية الجمع من النصف الى اخر المصفوفة بين المصفوفتين بشكل متقابل . يؤكد التوازي على مستوى المعطيات على الطبيعة الموزعة للمعطيات كعملية معاكسة للتفرع على مستوى المهام .
مكتبات امتدادية في الدوت نت :
ان مكتبة التفرعية المضافة Parallel Extensions المعروفة سابقا باسم Parallel Framework Extensions او PFXهي مكتبة منظمة لامور التوازي في العمل بهدف تسريع البرنامج. تم تطوير هذه المكتبة بالتعاون من قبل مركز مايكروسوفت للابحاث وبين فريق CLR في الشركة.ان هذه المكتبة تتالف من جزئين اساسيين الجزء الاول يدعى Parallel LINQ (PLINQ) والقسم الآخر يدعى Task Parallel Library (TPL).
كما ان المكتبة تضم مجموعة من بنى المعطيات المنسقة coordination data structures (CDS) وهي مجموعة من بنى المعطيات تستعمل لعمليات المزامنة واعادة ترتيب التعليمات المنفذة وذلك من اجل المهام التي تعمل على التوازي .تم اطلاق هذه المكتبة ك CTP في العام 2007.وتم اعادة تحديثها بشكل كبير بالعام 2008.كما يجدر الذكر ان هذه المكتبة متضمنة بشكل تلقائي في بيئة دوت نت 4.
حول مكتبة TPL :
ان مكتبة المهام المتوازية Task Parallel Library (TPL) هي جزء من مكتبة امتداد التوازي في الدوت نت ,وكما هو ظاهر من خلال الاسم فهي مبنية على مفهوم المهام .ان مصطلح توازي المهام يشير الى مهمة او اكثر مستقلة اي لايوجد ارتباط معطيات او الى ماذلك , بحيث يتم تنفيذ هذه المهام بشكل متوازي .ان المهمة تمثل عملية متزامنة وفي بعض الحالات هي تشبه انشاء نيسب جديد او عنصر من ساحة نياسب ThreadPool ,ولكن على مستوى اعلى من التجريد .توفر المكتبة بنى تفرعية كما في تعليمة parallel For و ForEach , باستعمال توابع معتادة و delegates.كما يمكن استعمال تلك البنى والتعليمات من خلال اي لغة برمجة تدعم الدوت نت .ان مهمة انشاء مهمات ابناء وانهاء المهام والنياسب كما ايضا مهمة اضافة عدد مهام اضافية بحسب عدد المعالجات المتوفرة كل ذلك يتم من خلال المكتبة نفسها .
ان مكتبة TPL ايضا تضم بنى اخرى كما في Task,Future .ان البنية Task تمثل حدث يمكن تنفيذه بشكل مستقل عن باقي اجزاء البرنامج .ويمكن القول بانه يكافي النيسب ماعدا انه اقل خفة من النيسب ويحول دون انشاء نظام التشغيل لنيسب مما يؤدي الى سرعة الحركة والعمل .المهام يتم وضعها في غرض من النمط مدير المهام ضمن رتل ويتم جدولة تلك المهام لتعمل على عدة نياسب في حوض اليانسب عندما يحين دورها في التنفيذ.
البنية Future هي task التي تعيد نتيجة . النتيجة يتم حسابها في نياسب الخلفية مكبسلة بغرض من النمط future , والنتيجة يتم وضعها في خازن مؤقت buffer لريثما يتم اعادة نتيجتها .اذا تم محاولة استرجاع النتيجة قبل ان يتم حسابها عندها فان النيسب الطالب سيتم حجبه مؤقتا ريثما تعاد النتيجة .البنية الاخرى في مكتبة TPL هي الصف Parallel توفر المكتبة TPL صيغة اساسية لبنية التفرع من خلال 3 توابع ستاتيكية في الصف Parallel.
Parallel.Invoke الذي ينفذ مصفوفة من Action delegates في التوازي , من ثم ينتظرهم لينهي نفسه
Parallel.For مكافئة لحلقة ال for المعروفة في C#
Parallel.ForEach مكافئة لحلقة ال foreach المعروفة في C#

المعمارية :
ان المفهوم العام في مكتبة الامتداد التفرعية في الدوت نت هي المهمة ,والتي هي قسم صغير من الرماز المصدري ,عادة مايتم تمثيله كتابع لامبدا{1}, الذي يمكن تنفيذه بشكل مستقل .كلا من PLINQ و TPL تقدم منهجيات وتوابع لانشاء المهام – PLINQ تقسم الطلب query الى عدة مهام اصغر,كما ان توابع Parallel.For, Parallel.ForEach Parallel.Invoke يقسمون الحلقة الى مهام .
تتضمن المكتبة الامتدادية التفرعية PFX غرض من نمط مدير مهام الذي يقوم بجدولة المهام للتنفيذ .ان مدير المهام يحتوي على رتل من المهام عام لكل البرنامج بحيث يتم وضع المهام ضمن هذا الرتل ومن ثم يتم التنفيذ .بالاضافة الى انه يقوم بكبسلة مجموعة من النياسيب الى ماتنفذه المهام .بشكل افتراضي يتم تشكيل عدد من النياسب بعدد المعالجات المتوفرة او النوى في النظام على الرغم من ان هذا الرقم يمكن تعديله بشكل يدوي .كل نيسب يرتبط برتل خاص للنياسب والمهام .كل نيسب عندما يصبح في حالة الخمول يقوم باخذ مجموعة من المهام ويضعها في الرتل المحلي الخاص بها,من ثم ينفذها الواحدة تلو الاخرى .اذا كان الرتل العام فارغاً فان النيسب سيبحث عن المهام التي في الارتال وسياخذ المهام التي كانت في الرتل لاطول فترة .عند التنفيذ فان المهام سيتم تنفيذها بشكل مستقل مع تغيير في الحالة لكل مهمة .كنتيجة لذلك اذا كانت المهام تستعمل مصدر مشترك فيجب ان يتم مزامنة فيما بين المهام بشكل يدوي باستعمال الاقفال او السيمافورات .
إن المهام تقدم فائدتين اساسيتين :
1-فعالية اكثر وامكانبة استعمال الموارد بشكل اكبر .
2-تحكم برمجي اكثر من التحكم المتوفر من النياسب او عناصر العمل :
تحوي مكتبة TPL على مجموعة غنية من التوابع والمنهجيات الداعمة لعمل المهام والنياسب كتوابع الغاء المهام او الانتظار او الاستمرار او معالجة اخطاء المهام ,جدولة محددة والعديد من امور التحكم .
من اجل هذين السببين فقد تم تضمين مكتبة للتعامل مع توازي المهام وادارة عملية البرمجة التفرعية في بيئة دوت نت 4 .بحيث تم توفير API لكتابة كود متعدد النياسب ,متزامن ويعمل على التفرع مستغلا تعدد الانوية والمعالجات في الاجهزة الحديثة .
ملاحظة :
النياسب = Threads حسب تعريب الجمعية المعلوماتية السورية .