تفرعية محاضرة 3-1

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 10

‫اعداد‪ :‬م‪.

‬ربا أسعد‬ ‫المحاضرة الثالثة الخوارزميات التسلسلية و التفرعية ومقاييس االداء‬ ‫برمجة تفرعية – سنة رابعة‬

‫الحاسوب التقليدي‪ :‬يتألف الحاسب التقليدي من معالج واحد ينفذ البرامج المخزنة في الذاكرة‬
‫الرئيسة حيث يتم الوصول إلى مواقع الذاكرة حيث تعنون ابتداء من ‪ 0‬حتى ‪ 2n‬إذا كان لدينا ‪n‬‬
‫خانة للعنونة‪.‬‬
‫الحواسيب التفرعية‪ :‬تصنف هذه الحواسيب تبعا لطريقة برمجتها إلى‬
‫‪-1‬الذاكرة المشتركة‪ :‬أنظمة متعددة المعالجات (‪ )multiprocessor‬وأنظمة متعددة النوى‬
‫(‪.)multicore‬‬
‫‪ -2‬األنظمة متعددة الحاسبات المتجانسة مثل )‪ : (cluster‬التي تتميز بعدة حواسيب لها نفس‬
‫نظام التشغيل وحاسوب يدير هذه العقد (الحواسيب)‬
‫‪ -3‬األنظمة متعددة الحاسبات غير المتجانسة (‪ :)grid‬تتميز بعقد مختلفة من حيث نظام‬
‫التشغيل والعتاد تربط بعقدة تحكم مثال محطات التلفزة وبرنامج ‪city at home‬‬
‫البرمجة التسلسلية‪:‬‬
‫تعتبر البرمجة التسلسلية التي تنفذ على حاسب ذو معالج واحد (نواة واحدة) سواء أكانت‬
‫إجرائية أو كائنية هي السائدة ألكثر من خمسين عاما ويستخدمها الجميع ومعظم البرمجيات‬
‫صممت لتنفذ البرامج التسلسلية وبالتالي‪:‬‬
‫الخوارزمية تسلسلية‪ :‬هي خوارزمية يتم فيها تنفيذ خطوات متتالية للتعليمات بترتيب زمني‬
‫لحل المشكلة وتتم على معالج واحد وهنا نحتاج لعداد البرنامج (تذكر أن دورة حياة التعليمة هي‬
‫جلب ثم فك شيفرة ثم تنفيذ ثم تخزين نتائج) بعدها يزداد عداد البرنامج بمقدار ليكن مقدار بت‬
‫واحد‪.‬‬

‫البرمجة التفرعية (المتوازية)‪:‬‬


‫تتم على أحد أنواع الحواسيب المتوازية السابقة‬
‫• الخوارزمية المتوازية‪ :‬يتم تقسيم المسألة إلى مسائل فرعية ويتم تنفيذها بالتوازي للحصول‬
‫على مخرجات فردية‪ .‬في وقت الحق‪ ،‬يتم دمج هذه المخرجات الفردية معا للحصول على‬
‫اإلخراج النهائي المطلوب‪.‬‬

‫‪1‬‬
‫وهنا يظهر لدينا مصطلح الحبوبي ‪:GRANULA‬‬
‫يطلق على حجم وعدد المهام في المسألة المجزأة بالتقـسيم الحبوبي‬
‫والتقسيم إلى عدد كبير من المهام الصغيرة يطلق عليه الحبوبية الناعمة‪ .‬أما التقـسيم إلى عدد‬
‫صغير من المهام الكبيرة فيطلق عليه الحبوبية الخشنة‪.‬‬
‫‪ -‬يتعلق مفهوم التقسيم الحبوبي بدرجة التزامن‪ .‬فالحد األقصى لعدد المهام الـتي يمكـن تنفيذها‬
‫بشكل آني في برنامج متوازي في أي وقت معطى يطلق عليه "الدرجـة العظمـى للتزامن‪".‬‬
‫هناك مؤشر هام للداللة على أداء البرامج المتوازية‪ ،‬هذا المؤشر هو "متوسـط درجـة‬
‫التزامن"‪ ،‬والذي يمكن حسابه بأخذ المتوسط لعدد المهام التي يمكن تنفيذها تزامنيا خـالل كامل‬
‫مدة تشغيل البرنامج‪ .‬ويمكن أن يزداد كل من المعدل والحد األقصى لدر جة التـوازي كلما كان‬
‫التقسيم الحبوبي للمهام أصغر (أنعم)‪.‬‬
‫‪-‬ليس من السهل تقسيم المسألة الكبيرة إلى مسائل فرعية‪ .‬قد يكون للمسائل الفرعية تبعية‬
‫البيانات فيما بينها‪ .‬لذلك‪ ،‬يجب على المعالجات التواصل مع بعضها البعض لحل المشكلة‪.‬‬
‫وقد وجد أن الوقت الذي تحتاجه المعالجات في التواصل مع بعضها البعض هو أحيانا أكثر من‬
‫وقت المعالجة الفعلي‪ .‬لذلك أثناء تصميم الخوارزمية التفرعية يجب مراعاة االستخدام السليم‬
‫لوحدة المعالجة المركزية للحصول على خوارزمية فعالة كما يتعلق زمن التنفيذ ببنية شبكات‬
‫الربط كما رأينا في المحاضرة السابقة‬
‫‪-‬هناك مستويات للبرمجة التفرعية‬
‫• برمجة تفرعية على مستوى البيانات‪ :‬حيث يتم تقسيم البيانات وتوزيعها‬
‫• برمجة تفرعية على مستوى المهام‪ :‬حيث يتم تقسيم المسألة إلى مهام تنفذ كل منها على‬
‫معالج ‪/‬نواة‬
‫نماذج عمل المعالج‪:‬‬
‫قبل الخوض بالخوارزميات التفرعية البد لنا من توضيح نماذج لعمل المعالج‬

‫‪-1‬النموذج التسلسلي فون نيومان‪:‬‬

‫‪2‬‬
‫يتم جلب التعليمة بحسب تدفق التحكم ويتم اختيار التعليمة بناء على قيمة عداد البرنامج ويكون تنفيذ‬
‫التعليمات بشكل تسلسلي إال إذا كانت التعليمة تغير التحكم مثل االنتقال إلى سطر محدد من الكود‬
‫‪-2‬نموذج البيانات التدفقية ‪:data flow‬‬
‫في هذا النموذج يتم التعامل مع التعليمات حسب تدفق المعطيات حيث يتم جلب التعليمة بحسب‬
‫تدفق البيانات ويتم اطالقها عندما يتم استقبال كل المدخالت بحيث كل تعليمة تحدد من يستلم‬
‫النتيجة واليوجد عداد برنامج وبالتالي ترتيب العمليات ينفذ حسب االعتمادية‬
‫وبالتالي ‪:‬‬
‫يتم التعامل مع البرنامج كأنه مجموعة من العقد (التعليمات) وتحدد الوصالت اتجاه تدفق البيانات‬
‫وتحدد النقاط العالمة البيانات‬

‫• توافر البيانات هي التي تحدد ترتيب تنفيذ العمليات‬


‫• يتم تنفيذ العملية فقط عندما تكون البيانات متوفرة‬
‫مثال‪ :‬ليكن لدينا العملية الحسابية )‪)a+b) * )cod‬‬
‫فإنها تمثل بالشكل‪:‬‬

‫بفرض أننا نريد حساب العالقة))‪z= ))a+b) -(b*2)) *((a+b) +(b*2‬‬


‫فإننا نحتاج إلى متحوالت مؤقتة مثل ‪V,W,Y,Z‬‬

‫‪3‬‬
‫ويمكن رسم مخطط تبعيات المهام مما يوفر للمبرمج تحديد األجزاء التسلسلية واألجزاء التي‬
‫يمكن تفريعها للمسألة مما يضع تصور واضح للعمل‬

‫تقييم الخوارزميات التسلسلية والتفرعية‬

‫▪ تقييم الخوارزميات التسلسلية‪:‬‬


‫لقد تم تصنيف الخوارزميات التسلسلية وتقييم أدائها عن طريق دراسة التعقيد الزمني لها‬
‫والمكاني واهتم المحللون بالتعقيد الزمني كون التعقيد المكاني لم يعد مهما مع تطور البنى‪.‬‬
‫تصنيف المسائل التسلسلية‪NP hard , NP complete , non-polynomial , polynomial:‬‬
‫‪: (Polynomial) P and (Non-Polynomial) NP‬‬
‫مسائل المسائل ‪-‬نقول عن خوارزمية أنها فعالة )‪ (polynomial = P‬إذا كانت درجة تعقيدها ذات درجة‬
‫كثير حدود ‪.‬ونقول عن خوارزمية أنها غير فعالة )‪ (polynomial non = NP‬إذا كانت درجة تعقيدها‬
‫ليست بدرجة كثير حدود‬
‫‪ .‬إن المسائل التي تنتمي إلى ‪ P‬هي مسائل سهلة وقابلة للمعالجة بينما المسائل التي تنتمي إلى ‪ NP‬هي‬
‫مسائل صعبة وغير قابلة للمعالجة إال في حالة معطيات ذات حجم محدود‬
‫هي مجموعة من المسائل التي النعرف تعقيدها الزمني ولكن بمعرفة مسالة واحدة يمكن معرفة‬ ‫مسائل ‪NPCOMPLETE‬‬
‫بقية المسائل‬

‫‪ .‬وهناك مسائل من النوع ‪NPHARD‬وهي مسائل ال يمكن حلها وتعقيدها انفجاري وتزايدها أسي‬

‫تحليل الخوارزمية التفرعية‪:‬‬


‫هناك مقاييس ألداء الخوارزمية التفرعية‬
‫▪ معامل التسريع (االستجابة)‪:Speedup factor‬‬

‫‪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‬‬

‫▪ الكلفة أو العمل )‪:)Work or Cost‬‬


‫‪Cost=Execution time × number of used processors‬‬
‫هو كمية العمل المنجز أو كلفة البرنامج التفرعي‪.‬‬
‫ومنه تكون‪:‬‬
‫كلفة البرنامج التسلسلي = ‪𝑡𝑠 ×1‬‬
‫كلفة البرنامج التفرعي =‪p × 𝑡p‬‬

‫وتحسب الكلفة الكلية‪:‬‬

‫تأخذ الكلفة قيمة أمثليه عندما تكون قيمتها باستخدام حاسب متعدد المعالجات مساوية لقيمتها‬
‫باستخدام حاسب وحيد المعالج أي عندما تكون ‪ 100%= E‬و ‪P=speedup‬وهذه حالة نادرة‬

‫أي هذه األمثلية تكون عنما يكون‪ p.tp=ts‬والفعالية تكون هنا تساوي ‪1‬‬

‫‪6‬‬
‫قانون االستجابة العظمى قانون امدال ‪:Amdal low‬‬
‫هذا العالم قام بوضع فكرة تقسيم البرنامج إلى أجزاء وهي تحديد األجزاء التفرعية واألجزاء‬
‫التسلسلية في البرنامج أو الخوارزمية‪.‬‬
‫حيث أن أي برنامج نريد تنفيذه تفرعيا ً لديه نسبة أو جزء منه سينفذ بشكل تسلسلي (الجزء‬
‫التسلسلي) وهذه النسبة سنرمز لها بالرمز ‪ f<1‬حيث ممكن أن نقول مثال إن ‪ f‬تشكل ‪50%‬‬
‫تقريبا من البرنامج الكلي وال ‪% 50‬الباقية تشكل الجزء القابل للتفريع من البرنامج ‪.‬إن ‪ f‬سيتم‬
‫تنفيذها على معالج واحد أما الباقي سيتم توزيعهم على بقية المعالجات حيث يمكن تفريعهم‪.‬‬

‫• الجزء التسلسلي يتم تنفيذه على‬


‫معالج واحد فيكون زمن تنفيذ‬
‫الجزء التسلسلي‪ :‬يساوي ‪ts× f‬‬
‫• أما زمن تنفيذ الجزء التفرعي‬
‫فهو يساوي ‪(1-f ( × ts‬‬
‫وفي حال ‪ p‬معالج الجزء‬ ‫✓‬
‫التسلسلي ال يمكن تقسيمه أما‬
‫الجزء التفرعي فهو‬

‫ليصبح معامل االستجابة‬

‫تسمى هذه المعادلة قانون امدال‬


‫حيث ‪ ts‬هي وقت تنفيذ بمعالج واحد تسلسليا والقيمة ‪ ts* (f-1) / p+ ts*f‬هي وقت‬
‫تنفيذ البرنامج أو الخوارزمية بشكل تفرعي‪.‬‬
‫نستنتج ما سبق‪:‬‬

‫‪7‬‬
‫✓ معامل التسريع ال يرتبط بشكل مباشر مع ‪ ts‬وإنما يرتبط بعدد المعالجات ونسبة الجزء التسلسلي‬
‫في البرنامج‬
‫✓ زيادة عدد المعالجات أو تقليل الجزء التسلسلي تزداد السرعة في تنفيذ البرنامج‬
‫✓ لو كان عدد المعالجات كبير جدا اي يسعى مثال إلى الالنهاية بإيجاد النهاية نجد‪:‬‬

‫العالقة بين االستجابة وعدد المعالجات‪:‬‬ ‫▪‬


‫يبقى معامل االستجابة محدودا بالقيمة ‪1/f‬حتى لو توفر لدينا عدد غير متناهي من المعالجات‪.‬‬
‫وجدنا سابقا أن حسب قانون امدال‪:‬‬
‫وبفرض أن ∞ → ‪ P‬أي زدنا عدد المعالجات إلى أقصى حد ممكن عندها ستكون ‪S(P) → 1/f‬‬
‫أي بعد حد معين من زيادة عدد المعالجات لن يكون هناك فائدة من هذه الزيادة فعند حد معين ستثبت‬
‫قيمة االستجابة ولن تزيد بزيادة عدد المعالجات‪.‬‬

‫ولكن لنفرض أن ‪ 𝑓 =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‬فيكون معامل االستجابة‬

‫• ولدينا أسوأ حالة هي الوصول الى الجزء قبل االخير أي ‪x=p-1‬‬

‫‪9‬‬
‫نهاية المحاضرة‬

‫‪10‬‬

You might also like