Professional Documents
Culture Documents
تفرعية محاضرة 3-1
تفرعية محاضرة 3-1
تفرعية محاضرة 3-1
ربا أسعد المحاضرة الثالثة الخوارزميات التسلسلية و التفرعية ومقاييس االداء برمجة تفرعية – سنة رابعة
الحاسوب التقليدي :يتألف الحاسب التقليدي من معالج واحد ينفذ البرامج المخزنة في الذاكرة
الرئيسة حيث يتم الوصول إلى مواقع الذاكرة حيث تعنون ابتداء من 0حتى 2nإذا كان لدينا n
خانة للعنونة.
الحواسيب التفرعية :تصنف هذه الحواسيب تبعا لطريقة برمجتها إلى
-1الذاكرة المشتركة :أنظمة متعددة المعالجات ( )multiprocessorوأنظمة متعددة النوى
(.)multicore
-2األنظمة متعددة الحاسبات المتجانسة مثل ) : (clusterالتي تتميز بعدة حواسيب لها نفس
نظام التشغيل وحاسوب يدير هذه العقد (الحواسيب)
-3األنظمة متعددة الحاسبات غير المتجانسة ( :)gridتتميز بعقد مختلفة من حيث نظام
التشغيل والعتاد تربط بعقدة تحكم مثال محطات التلفزة وبرنامج city at home
البرمجة التسلسلية:
تعتبر البرمجة التسلسلية التي تنفذ على حاسب ذو معالج واحد (نواة واحدة) سواء أكانت
إجرائية أو كائنية هي السائدة ألكثر من خمسين عاما ويستخدمها الجميع ومعظم البرمجيات
صممت لتنفذ البرامج التسلسلية وبالتالي:
الخوارزمية تسلسلية :هي خوارزمية يتم فيها تنفيذ خطوات متتالية للتعليمات بترتيب زمني
لحل المشكلة وتتم على معالج واحد وهنا نحتاج لعداد البرنامج (تذكر أن دورة حياة التعليمة هي
جلب ثم فك شيفرة ثم تنفيذ ثم تخزين نتائج) بعدها يزداد عداد البرنامج بمقدار ليكن مقدار بت
واحد.
1
وهنا يظهر لدينا مصطلح الحبوبي :GRANULA
يطلق على حجم وعدد المهام في المسألة المجزأة بالتقـسيم الحبوبي
والتقسيم إلى عدد كبير من المهام الصغيرة يطلق عليه الحبوبية الناعمة .أما التقـسيم إلى عدد
صغير من المهام الكبيرة فيطلق عليه الحبوبية الخشنة.
-يتعلق مفهوم التقسيم الحبوبي بدرجة التزامن .فالحد األقصى لعدد المهام الـتي يمكـن تنفيذها
بشكل آني في برنامج متوازي في أي وقت معطى يطلق عليه "الدرجـة العظمـى للتزامن".
هناك مؤشر هام للداللة على أداء البرامج المتوازية ،هذا المؤشر هو "متوسـط درجـة
التزامن" ،والذي يمكن حسابه بأخذ المتوسط لعدد المهام التي يمكن تنفيذها تزامنيا خـالل كامل
مدة تشغيل البرنامج .ويمكن أن يزداد كل من المعدل والحد األقصى لدر جة التـوازي كلما كان
التقسيم الحبوبي للمهام أصغر (أنعم).
-ليس من السهل تقسيم المسألة الكبيرة إلى مسائل فرعية .قد يكون للمسائل الفرعية تبعية
البيانات فيما بينها .لذلك ،يجب على المعالجات التواصل مع بعضها البعض لحل المشكلة.
وقد وجد أن الوقت الذي تحتاجه المعالجات في التواصل مع بعضها البعض هو أحيانا أكثر من
وقت المعالجة الفعلي .لذلك أثناء تصميم الخوارزمية التفرعية يجب مراعاة االستخدام السليم
لوحدة المعالجة المركزية للحصول على خوارزمية فعالة كما يتعلق زمن التنفيذ ببنية شبكات
الربط كما رأينا في المحاضرة السابقة
-هناك مستويات للبرمجة التفرعية
• برمجة تفرعية على مستوى البيانات :حيث يتم تقسيم البيانات وتوزيعها
• برمجة تفرعية على مستوى المهام :حيث يتم تقسيم المسألة إلى مهام تنفذ كل منها على
معالج /نواة
نماذج عمل المعالج:
قبل الخوض بالخوارزميات التفرعية البد لنا من توضيح نماذج لعمل المعالج
2
يتم جلب التعليمة بحسب تدفق التحكم ويتم اختيار التعليمة بناء على قيمة عداد البرنامج ويكون تنفيذ
التعليمات بشكل تسلسلي إال إذا كانت التعليمة تغير التحكم مثل االنتقال إلى سطر محدد من الكود
-2نموذج البيانات التدفقية :data flow
في هذا النموذج يتم التعامل مع التعليمات حسب تدفق المعطيات حيث يتم جلب التعليمة بحسب
تدفق البيانات ويتم اطالقها عندما يتم استقبال كل المدخالت بحيث كل تعليمة تحدد من يستلم
النتيجة واليوجد عداد برنامج وبالتالي ترتيب العمليات ينفذ حسب االعتمادية
وبالتالي :
يتم التعامل مع البرنامج كأنه مجموعة من العقد (التعليمات) وتحدد الوصالت اتجاه تدفق البيانات
وتحدد النقاط العالمة البيانات
3
ويمكن رسم مخطط تبعيات المهام مما يوفر للمبرمج تحديد األجزاء التسلسلية واألجزاء التي
يمكن تفريعها للمسألة مما يضع تصور واضح للعمل
.وهناك مسائل من النوع NPHARDوهي مسائل ال يمكن حلها وتعقيدها انفجاري وتزايدها أسي
4
في البرامج التفرعية يجب أن نقارنها من خالل أداة تدعى Speedup factorحيث تعطي هذه األداة
معامل التسريع ،وبما أننا نلجأ للبرمجة التفرعية من أجل زيادة سرعة البرنامج حيث أننا عوضا ً عن
استخدام معالج واحد (برمجة تسلسلية) نستخدم pمعالج لذلك يجب معرفة كمية السرعة التي ازدادت،
حيث يخطر لنا أننا عند استخدام معالجين تزداد السرعة مرتين وعند استخدام ثالث معالجات تزداد
السرعة ثالث مرات هل هذا صحيح؟؟ بالطبع هذا ليس بالضرورة أن يكون صحيح ألنه يوجد بعض
البرامج ال تتجزأ ويجب أن تنفذ على معالج واحد ففي هذه االثناء تكون بقية المعالجات واقفة عن العمل
فهنا لم نستفد من زيادة عدد المعالجات!
أن أقصى سرعة ممكن أن نصل لها هي عدد المعالجات المضافة وهذه هي الحالة المثلى .إذا ً هذا
المعامل ،يمثل الربح الذي نحصل عليه إذا استخدمنا البرمجة التفرعية مقارنة بالتسلسلية ويحسب
بالعالقة:
المشكلة في هذه العالقة هي عملية حساب زمن التنفيذ باستخدام معالج واحد ،وقد تظهر مشكلة
وجود معالجات ذات سرعة مختلفة فأي منها سنختار لحساب زمن التنفيذ التسلسلي؟ يُعبر أيضا ً
عن معامل التسريع بالعالقة:
تزداد االستجابة عند استخدام حواسيب تفرعية كما ترتبط ببنية الخوارزمية المستخدمة وتعبر
القيمة pعن قيمة االستجابة العظمى في حال استخدام pمعالج وهذا ما يسمى باالستجابة العظمى
وذلك ألنه أصغر قيمة قد تصل لها 𝑡pوهي test/pعندئذ
• الحد األدنى لمعامل التسريع(االستجابة) هو 1والحد األعلى هو pعدد المعالجات المتوفرة لحل المسألة
مثال s (2) =2 :أي أننا نستخدم معالجين وحصلنا على سرعة ضعف السرعة التسلسلية وهذه الحالة نادرة ألننا
نادرا ما نصادف خوارزمية بدون جزء تسلسلي .وبالتالي ليس بالضرورة إذا استخدمنا pمعالج نحصل على
سرعة بضعف p
▪ الفعالية)(Efficiency
هو مقدار الفعالية التي استخدم بها الـ Machineالخاصة فمثال عند وجود جزء
تسلسلي ينفذ على معالج واحد وبقية المعالجات بحالة انتظار فإن ذلك يقلل من الفعالية كما يمكن
التعبير عن الفعالية بأنها االستثمار األمثل لكل المعالجات المتوفرة ،وعندها يكون معامل
التسريع أكبر ما يمكن أي قريب من عدد المعالجات ،فإذا كانت الـ speedupقليلة تكون
الفعالية قليلة أيضا ً .وموضوع الفعالية مرتبط بالكلفة وهي زمن التنفيذ أي
5
نسبة تكلفة معالج واحد إلى تكلفة pمعالج
وهي تبرعن نسبة الزمن الذي جرى ضمنه استخدام المعالجات المتوفرة بتنفيذ األعمال الحسابية
وتكون الفعالية هي % 100أي عظمى عندما تعمل كافة المعالجات لكامل الوقت وتحقق معامل
التسريع يساوي عدد المعالجات.
وبالتالي أعظم قيمة لها هو 1وأدنى قيمة هو 1/p
تأخذ الكلفة قيمة أمثليه عندما تكون قيمتها باستخدام حاسب متعدد المعالجات مساوية لقيمتها
باستخدام حاسب وحيد المعالج أي عندما تكون 100%= Eو P=speedupوهذه حالة نادرة
أي هذه األمثلية تكون عنما يكون p.tp=tsوالفعالية تكون هنا تساوي 1
6
قانون االستجابة العظمى قانون امدال :Amdal low
هذا العالم قام بوضع فكرة تقسيم البرنامج إلى أجزاء وهي تحديد األجزاء التفرعية واألجزاء
التسلسلية في البرنامج أو الخوارزمية.
حيث أن أي برنامج نريد تنفيذه تفرعيا ً لديه نسبة أو جزء منه سينفذ بشكل تسلسلي (الجزء
التسلسلي) وهذه النسبة سنرمز لها بالرمز f<1حيث ممكن أن نقول مثال إن fتشكل 50%
تقريبا من البرنامج الكلي وال % 50الباقية تشكل الجزء القابل للتفريع من البرنامج .إن fسيتم
تنفيذها على معالج واحد أما الباقي سيتم توزيعهم على بقية المعالجات حيث يمكن تفريعهم.
7
✓ معامل التسريع ال يرتبط بشكل مباشر مع tsوإنما يرتبط بعدد المعالجات ونسبة الجزء التسلسلي
في البرنامج
✓ زيادة عدد المعالجات أو تقليل الجزء التسلسلي تزداد السرعة في تنفيذ البرنامج
✓ لو كان عدد المعالجات كبير جدا اي يسعى مثال إلى الالنهاية بإيجاد النهاية نجد:
ولكن لنفرض أن 𝑓 =0 %أي ال يوجد أي جزء تسلسلي في البرنامج يحتاج أن ننفذه على
معالج واحد أي كل البرنامج يمكن تفريعه وبفرض ∞ → pعندها ∞ → ( s)pأي بهذه
الحالة كلما زدنا عدد المعالجات كلما زادت نسبة االستجابة والتسريع وتصبح زيادة التسريع
ممثلة بعالقة خطية
يكون لدينا التنفيذ بأفضل حاالته في المنتصف حيث تكون نسبة الجزء التسلسلي مساوية للصفر 𝑓= 0 %
وعندها بزيادة عدد المعالجات يزداد معامل االستجابة حتى يساوي عدد المعالجات p.ومنه
8
نستنتج أن قيمة الجزء التسلسلي في البرنامج تشكل عائقا ألنه ال يمكن تفريعها على عدة
معالجات.
مثال :إذا كان الجزء التسلسلي من البرنامج التفرعي يشكل 5 %أي )𝑓 =% (5فعندها تكون االستجابة
العظمى ال تتجاوز الـ 20أي s(p)=1/f=20
يمكن أن نحصل على معامل استجابة ال خطي في خوارزميات البحث أو مسائل بحوث
العمليات أو المسائل التي يكون فيها كمية كبيرة من الحساب والمعالجة
ضخمة
• لو كان لدينا هنا pمعالج ينفذ pجزء من خوارزمية البحث فقد يجد النتيجة قبل انتهائه
الكامل ولنفرض أنه عند xجزء لتنفيذ لك وصل لنتيجة البحث (الحل األمثل) مضافا
اليها زمن قدره ∆ t
• لدينا هنا الزمن الكلي هو tsأما زمن معالج واحد هو ts / pفيكون لدينا زمن xجزء
هو) x.(ts/pويوجد فترة اضافية ∆ tمن الجزء الي هو بعد الجزءx
اي يصبح لدينا زمن البرنامج الكلي التسلسلي للتنفيذ هو ts1جديدة تعطى بالعالقة
ts1= x.(ts/p) + ∆t
أما زمن التنفيذ التفرعي هو TP= ∆ tفيكون معامل االستجابة
9
نهاية المحاضرة
10