You are on page 1of 9

‫بسم هللا الرحمن الرحيم‬

‫‪4.5 An Overview of Pipelining‬‬

‫السالم عليكم ‪ ..‬النهاردة هنتكلم عن اكتشاف كبير جدا يعتبر اعظم اكتشاف بعد التليفزيون‬
‫والبالى ستيشن ‪ ... :D‬اال وهو ال ‪pipelining‬‬
‫طب يعنى ايه ال ‪ pipeline‬او يعنى ايه انى اقول ان ال ‪ cpu‬ده يعتبر ‪piplelined‬؟؟‬
‫طبعا احنا عارفين ان كل ‪ instruction‬بتاخدلها ‪ 5 phases‬وان كل ‪ clock tick‬بنفذ ‪1‬‬
‫‪ phase‬بس ل ‪ instruction‬واحدة‬
‫فالناس الفاضيين دول بتوع ال ‪ architecture‬قالو طب مابدل ان مثال ان فى اول ‪phase‬‬
‫بااخد االنستركشن بعد كده الجزء المسئول انى اخد االنستركشن يبقى جزء ملوش اى شغالنة ‪..‬‬
‫اخلى الجزء ده يبقى ليه الزمة او يبقى ‪active‬‬

‫فى الصورة دى انا مش بستخدم ال ‪pipelined approach‬‬

‫لكن فى الصورة دى‬

‫فى الصورة السابقة دى انا بخلى اكتر من جزء شغال فى نفس الوقت وده نفس اللى هنعمله ‪..‬‬

‫زى ماقولنا قبل كده ان فى ‪ 5 phases‬بتمر بيهم كل ‪ instruction‬وهى ‪-:‬‬


‫‪Instruction Fetch‬‬
‫‪Instruction Decode‬‬
‫‪Execute the Operation or Calculate the address‬‬
‫‪Memory Access or R-Type Completion Step‬‬
‫‪Memory Write Back‬‬
‫بدل ماكانو بيتنفذو االول كده‬

‫دلوقتى ال ‪ phases‬دى هتتنفذ زى الشكل ده‬

‫طبعا هنا انا بفترض ان البرنامج بتاعى عبارة عن ‪ 3 instruction‬والتالتة بيمرو على ال‬
‫‪ 5 phases‬فلو اخدنا بالنا ان فى تالت ‪ clock tick‬االنستركشن االولى بتعمل ‪execute‬‬
‫واالنستركشن التانية فى مرحلة ال ‪ Decode‬واالنستركشن التالتة لسة واصلة وفى مرحلة ال‬
‫‪Instruction Fetch‬‬
‫طبعا كده ال ‪ throughput‬بقى عالى جداااا جداااااا الن لو كده لو احنا كده حبينا نعرف كام‬
‫انستركشن بيخلصهم خاااالص ال ‪ cpu‬كل مثال ‪ 30 clock tick‬بافتراض ان كل‬
‫االنستركشن بتعدى على ال ‪( 5 phases‬طبعا ده افتراض مستحيل ‪ ):D‬هنالقى اننا لو‬
‫مستخدمناش ال ‪ pipelined‬ال ‪ cpu‬هيخلص فقط ‪ 6 instruction‬لكن باستخدام ال‬
‫‪ pipelined‬هنالقى ان ال ‪ cpu‬بيخلص ‪ 26 instruction‬يعنى تقريبا كل ‪ tick‬بينفذ‬
‫فيها ‪ instruction‬كاملة وطبعا ده يعتبر انجاز كبير جدا‬

‫طب لو حبينا نجيب بقى الوقت مابين كل ‪ instruction‬ب ‪ formula‬معينة هنعمل ايه ‪:‬‬
‫لو جينا فكرنا زى مالدكتور علمنا اننا نفهم ونحاول نترجم كالمنا لكتابة والكتابة دى هتكون‬
‫غالبا القانون ‪ ...‬فهنقول اننا فى ال ‪ ( ideal condition‬يعنى هنا بفترض ان مفيش‬
‫انستركشن معتمدة على انستركشن تانية سابقة وان كل ال ‪ instruction‬بتمر تقريبا بنفس عدد‬
‫ال ‪ phases‬والوقت بتاع كل ‪ phase‬تقريبا واحد ) هيكون الوقت مابين كل انستركشن‬
‫والتانية فى حالة ال ‪ non pipelined‬هو تقريبا الوقت اللى بتمر بيه ال ‪ phases‬الواحدة ‪..‬‬
‫لكن لو جينا نبص فى حالة ال ‪ pipelined‬هنالقى اننا تقريبا بنطلع فى كل ‪clock tick‬‬
‫انستركشن كاملة يعنى كده ممكن نترجم كالمنا لقانون بقى او ‪ formula‬هتبقى بالشكل ده ‪:‬‬

‫𝑑𝑒𝑛𝑖𝑙𝑒𝑝𝑖𝑝𝑛𝑜𝑖𝑡𝑐𝑢𝑟𝑡𝑠𝑛𝐼 𝑛𝑒𝑒𝑤𝑡𝑒𝐵 𝑒𝑚𝑖𝑇‬


‫𝑑𝑒𝑛𝑖𝑙𝑒𝑝𝑖𝑝‪𝑇𝑖𝑚𝑒 𝐵𝑒𝑡𝑤𝑒𝑒𝑛 𝐼𝑛𝑠𝑡𝑟𝑢𝑐𝑡𝑖𝑜𝑛𝑛𝑜𝑛−‬‬
‫=‬
‫𝑠𝑒𝑔𝑎𝑡𝑠 𝑒𝑝𝑖𝑝 𝑓𝑜 𝑟𝑒𝑏𝑚𝑢𝑁‬
‫بس لالسف الشديد الدنيا مش وردى كده واحنا فى االفتراض ده استطعبطنا جامد على رأى‬
‫الدكتور ‪ :D‬ليه بقى‬
‫احنا عندنا شوية مخاطر او ‪ hazard‬هتظهر لينا وبشكل واضح لو طبقنا ال ‪ pipelined‬ال‬
‫‪ hazard‬دى ليها تالت انواع‬
‫اول نوع حاجة اسمها ‪ structural hazard‬دى معناها ان الهارد وير بتاعنا او الميمورى ال‬
‫يسمح بحاجتين بتنفذو فى نفس الوقت زى‬
‫وعشان انا عندى ميمورى واحدة بس مش زى ال ‪ single cycle‬فمش مسموح غير بحاجة‬
‫واحدة بس اما ‪read or write‬‬
‫لو روحت للميمورى فى المرحلة الرابعة واالنستركشن السابقة فى المرحلة الثالثة كده دلوقتى‬
‫انا مش بعمل حاجة غير ‪ memory access‬ومفيش اى حاجة مسموحة غير كده وبس‬
‫بعد كده االنستركشن اللى انا واقف فيها راحت على المرحلة الخامسة اللى هى ‪write back‬‬
‫بس االنستركشن اللى قبليا دخلت الميمورى النها دخلت المرحلة الرابعة وعاوزة تعمل‬
‫‪ memory access‬هنا بقى هتحصل المشكلة انى عاوز حاجتين من الميمورى مختلفين وفى‬
‫نفس الوقت‬
‫تانى نوع حاجة اسمها ال ‪ data hazard‬دى معناها ان فى انستركشن مش هقدر ابدأ فى‬
‫تنفيذها النها تعتمد على انتهاء االنستركشن اللى قبليها‬
‫مثال لكده لو عندنا برنامج فيه ال ‪ instructions‬دى‬
‫‪Add $s0 , $t0 , $t1‬‬
‫‪Sub $t2 , $s0 , $t3‬‬
‫فى االنستركشن االولى دى ال ‪ $s0‬مش هتكون فيها النتيجة اللى انا متوقعها اال بعد مالمرحلة‬
‫الرابعة تخلص اللى هتكون ال ‪ R-Type Completion Step‬لكن فى االنستركشن التانية انا‬
‫محتاج ال ‪ $s0‬انها الزم تكون موجودة معايا وبقيمة صحيحة فى المرحلة التالتة فالزم اعمل‬
‫حاجة زى ‪ stall‬يعنى االنستركشن التانية دى تصبر شوية لحد ماالنستركشن االولى تحط‬
‫النتيجة الصح فى ‪$s0‬‬
‫الناس الفتايين بتوع ال ‪ architecture‬قالو اننا ممكن نحل المشكلة دى بحل بسيط اوى ان‬
‫بدل ماالنستركشن التانية دى بتاعة ال ‪ sub‬بدل ماتصبر لحد مالنتيجة تتكتب فى ال ‪$s0‬‬
‫تروح تاخد النتيجة علطول من االنستركشن اللى قبليها الحل ده اسمه ‪forwarding‬‬
‫يعنى السيناريو المتوقع باستخدام حل ال ‪ forward‬ده لالتنين انستركشن دول هيبقى كده‬
‫كده بالحل ده انا مش هحتاج اعمل ‪ stall‬الحمد هلل ‪:D‬‬
‫بس برضه الدنيا مش عسلية كده ‪ ......‬الن ال ‪ forwarding‬احد شروطه ان الزم يبقى ال‬
‫‪ destination stage‬تبقى وقت بعد ال ‪ source stage‬يعنى فى المثال السابق ده مينفعش‬
‫اللى خارج من ال ‪ EX‬يبقى انبوت لمرحلة ال ‪ID‬‬
‫كده بقى بعد ماعرفنا الشرط ده ولو عندنا ال ‪ instructions‬دى‬
‫)‪lw $s0 , 20($t1‬‬
‫‪sub $t2 , $s0 , $t3‬‬
‫كده بقى معلش متأسفين الزم نعمل ‪ Stall‬لالنستركشن التانية وهيبقى السيناريو بتاع االتنين‬
‫انستركشن دول هيبقى بالمنظر ده‬

‫ليه بقى ‪ ....‬لو تخيلنا ان ال ‪ IF‬لالنستركشن التانية بدأت فى وقتها كنا هنالقى فى مرحلة ال‬
‫‪ EX‬انا محتاج ال ‪ $s0‬فهكون عاوز اجيب اللى خارج من ال ‪ MEM‬يبقى انبوت لمرحلة‬
‫ال ‪ EX‬وكده احنا كسرنا الشرط بتاع ال ‪ forwarding‬عشان كده الزم الزم اعمل ‪stall‬‬
‫الحالة دى من ال ‪ data hazard‬بيسموها ال ‪load-use data hazard‬‬
‫ال ‪ Data hazard‬ليه اكتر من حل وفيه حل ‪ hardware‬فكرته ان بعد كل مرحلة احط‬
‫حاجة اسمها ‪ latch‬دى تعتبر ‪ state element‬بس الوقت اللى بتخزن فيها الداتا صغير ولما‬
‫احتاج الداتا ولسة مجهزتش هشوف ال ‪ latch‬ده وهاخد الداتا منه‬
‫فى حل تانى ‪ software‬ده بيبقى حاجة اسمها ‪ recording‬يعنى ترتيب االنستركشن نفسها‬
‫ممكن ارتبها بطريقة بحيث ان ميحصلش اى ‪ hazard‬من االساس يعنى مثال لو انا عندى‬
‫مجموعة االنستركشن دى (دى كده ‪)without recording‬‬
‫‪1.‬‬ ‫)‪lw $t0 , 0($t1‬‬
‫‪2.‬‬ ‫)‪lw $t2 , 4($t1‬‬
‫‪3.‬‬ ‫)‪sw $t2 , 0($t1‬‬
‫‪4.‬‬ ‫)‪sw $t0 , 4($t1‬‬
‫لو جينا نشوف كده السيناريو المتوقع للمجموعة دى بالترتيب ده لالنستركشن دى‬
‫‪1‬‬ ‫‪IF‬‬ ‫‪ID‬‬ ‫‪EX‬‬ ‫‪MEM WB‬‬
‫‪2‬‬ ‫‪IF‬‬ ‫‪ID‬‬ ‫‪EX‬‬ ‫‪MEM WB‬‬
‫‪3‬‬ ‫‪IF‬‬ ‫‪ID‬‬ ‫‪Stall‬‬ ‫‪EX‬‬ ‫‪MEM WB‬‬
‫‪4‬‬ ‫‪IF‬‬ ‫‪Stall‬‬ ‫‪ID‬‬ ‫‪EX‬‬ ‫‪MEM WB‬‬
‫لو جينا بقى نفس االنستركشن دى بس غيرنا الترتيب بتاعها يعنى خليناها كده (دى كده ‪with‬‬
‫‪)recording‬‬

‫‪1.‬‬ ‫)‪lw $t0 , 0($t1‬‬


‫‪2.‬‬ ‫)‪lw $t2 , 4($t1‬‬
‫‪3.‬‬ ‫)‪sw $t0 , 4($t1‬‬
‫‪4.‬‬ ‫)‪sw $t2 , 0($t1‬‬

‫‪1‬‬ ‫‪IF‬‬ ‫‪ID‬‬ ‫‪EX‬‬ ‫‪MEM‬‬ ‫‪WB‬‬


‫‪2‬‬ ‫‪IF‬‬ ‫‪ID‬‬ ‫‪EX‬‬ ‫‪MEM‬‬ ‫‪WB‬‬
‫‪3‬‬ ‫‪IF‬‬ ‫‪ID‬‬ ‫‪EX‬‬ ‫‪MEM WB‬‬
‫‪4‬‬ ‫‪IF‬‬ ‫‪ID‬‬ ‫‪EX‬‬ ‫‪MEM‬‬ ‫‪WB‬‬
‫طبعا هنا الفرق واضح ان فى المرة اللى احنا عملنا فيها ال ‪ recording‬محصلش اى ‪stalls‬‬
‫الن ببساطة بشوف االنستركشن اللى بتسبب ال ‪ stalls‬وبخليها فى االخر وبحط فى النص‬
‫باقى االنستركشن بتاعة البرنامج ‪ ..‬ده بقى اللى بيفرق كومبيلر عن كومبيلر الن اللى بيعمل‬
‫حاجة زى كده هو الكومبيلر وده يأكد ان مش الزم ال ‪ processor enhancement‬يبقى‬
‫يتمثل فقط فى ال ‪hardware‬‬
‫لو جيت افكر احط ‪ hardware‬الزم احط فى اعتبارى ان الموضوع ده هيحصل كام مرة‬
‫يعنى محتمل ال ‪ data hazard‬اتعرضلها كام مرة الن لو القيت ان البرنامج عندى مش‬
‫هيبقى فيه ‪ data hazard‬بعدد كبير يبقى خالص ال ‪ performance‬مش هيتأثر بشكل كبير‬
‫ولو حطيت الهاردوير مش هيتحسن ال ‪ performance‬اوى بل بالعكس ممكن ال‬
‫‪ performance‬يبقى اسوأ الن لو حطيت هاردوير ال ‪ processor‬نفسه بقى اكبر‬
‫والسيجنال هتاخد وقت اكتر عشان تنتقل من مكان الى مكان‬
‫فى مثال مهم جداا فى صفحة ‪ 338‬عن ال ‪ data hazard‬ياريت نشوفه هيفهمنا القصة دى‬
‫حلو اوى‬

‫تالت نوع حاجة اسمها ال ‪( Control hazard‬اللى حضر المحاضرة دى كان اكيد خارج منها‬
‫مهيس بعد المثال اللى قاله الدكتور عن لاير مدريد واالهلى ‪ ) :D‬المشكلة دى نتجت عن ال‬
‫‪ branch operation‬يعنى لو انا عندى انستركشن عبارة عن ‪ beq‬الزم مدخلش‬
‫االنستركشن اللى بعدها اال بعد ماشوف هل الكونديشن اللى فى االنستركشن دى ‪taken or‬‬
‫‪not taken‬‬
‫نفس الناس الفتايين بتوع ال ‪ architecture‬قالو احنا ممكن ناخد حل االحتماالت يعنى انا‬
‫هتوقع مثال ان الكونديشن ‪ not taken‬وهاخد االنستركشن اللى بعديا علطول وفى نفس الوقت‬
‫هحسب برضه نتيجة الكونديشن وهيحصل حاجتين اما ان الكونديشن يطلع فعال ‪not taken‬‬
‫وكده اشطة اوى مش هيكون فى اى ‪ stall‬او اسوأ حاجة ان يطلع فعال الكونديشن ‪taken‬‬
‫يعنى توقعى كان غلط فى الحالة دى هعمل ‪ flush‬يعنى همسح كل الشغل اللى عملته اثناء‬
‫حساب نتيجة الكونديشن وهبدأ اشتغل على اساس النتيجة الصحيحة للكونديشن‬
‫لو الحظنا ان اسوأ حالة دى تقابل برضه الحالة انى استنى لحد ماعرف نتيجة الكونديشن هل‬
‫‪ taken‬وال ‪ not taken‬يعنى يعتبر مخسرتش اى حاجة بل بالعكس كده كمان يعتبر كسبت‬
‫ان لو طلع توقعى صح يبقى مش هيحصل اى ‪ stall‬عندى‬
‫لو البرنامج فيه ال ‪ instructions‬دى‬
‫‪Add $4 , $5 , $6‬‬
‫‪Beq $1 , $2 , 40‬‬
‫)‪Lw $3 , 300($0‬‬
‫‪40: or $7 , $8 , $9‬‬
‫السيناريو بتاع البرنامج ده هيبقى حاجة من اتنين‬
‫اما انه هيبقى السيناريو ده ان هيبقى توقعى صحيح ومش هيحصل اى اى ‪ stall‬وده افضل‬
‫حالة اتمنى الوصول اليها‬

‫او هيبقى السيناريو ده وده اسوأ سيناريو او السيناريو اللى كان هيحصل لو اصال مطبقتش ال‬
‫‪ branch prediction‬والسيناريو ده زى ماحنا شايفين هيكون فيه ‪ stall‬عشان اعمل‬
‫‪ jump‬على ال ‪ new address‬واعمل ‪ flush‬بحيث انى ابدأ من جديد خالص‬
‫طب دلوقتى واضح جدا ان فى حالة ال ‪ prediction‬اللى انا حطيته لو طلع صح مش هيكون‬
‫فى اى ‪ stall‬يبقى السؤال المنطقى جدااااا على اى اساس هعمل بريديكشن‬
‫الدكتور الصراحة شرح الحتة دى بطريقة حلوة جدااااا وقال مثال ان لو جيت قولت ان مصر‬
‫هتالعب البرازيل ‪ 100‬مرة فاى حد عاقل يقلك ان البرازيل تكسب مصر ال ‪ 100‬مرة وممكن‬
‫مرة او مرتين يتعادلو او تحصل المعجزة ومصر تكسب ‪ :D‬ده نفس اللى هنعمله بالظبطططط‬
‫انا لما بكون فى ‪ for loop‬الكونديشن بتاع الخروج ده هيبقى غالبا ‪ true‬عشان ابدأ اخش‬
‫الفور لوب واكمل شغلى هيبقى مرة واحدة بس ب ‪ false‬عشان اخرج من اللوب فلو استطعت‬
‫بطريقة ما انى اعرف ان الكونديشن ده بتاع لوب يبقى المنطفى جداااا انى اعمل ‪predict‬‬
‫‪ true‬علطول الن كده التوقع بتاعى هيبقى صح دايمااااااا مش هيبقى غلط غير مرة واحدة بس‬
‫برضه وانا بعمل ‪ loop‬فى االسيمبلى بيكون فى كونديشن كده عشان اخرج من اللوب‬
‫والكونديشن ده بيبقى غالبا ب ‪ false‬عشان ابدأ اشتغل فى اللوب فلو عملت توقع انه ‪not‬‬
‫‪ taken‬هيبقى التوقع ده صح اال مرة واحدة بس هيبقى ده توقع غلط‬
‫النوع ده من ال ‪ prediction‬يندرج تحت مسمى ال ‪ static prediction‬فى نوع تانى من‬
‫ال ‪ prediction‬اسمه ال ‪dynamic prediction‬‬
‫فى ال ‪ dynamic prediction‬بتفادى خطأ ال ‪ static prediction‬اللى بيتمثل انى دايما‬
‫بتوقع حاجة واحدة على امل انى اكون غالبا صح بس مش فى كل الحاالت بيبقى التوقع بتاعى‬
‫صح وممكن يطلع التوقع بتاعى غلط دايما ف فى ال ‪ dynamic prediction‬بتوقع على‬
‫اساس ال ‪ prediction‬اللى عملته قبل كده‬
‫فى نوعين من ال ‪ dynamic prediction‬اول نوع حاجة اسمها ‪ 1 bit pred.‬ودى بتبقى‬
‫‪ one bit‬بيبقى الكونترول بتاعها سهل اوى والفكرة حاجة بسيطة اوى ‪ ..‬انا مثال فى االول‬
‫هبدأ اخلى ال ‪ one bit‬دى بزيرو يعنى مثال ‪ predict not taken‬لو طلع توقعى صح‬
‫خالص مغيرش حاجة فى ال ‪ bit‬دى واسيبها زى ماهى لو طلع توقعى غلط اقلب ال ‪bit‬‬
‫دى من ‪ 0‬الى ‪ 1‬يعنى اكنى بتوقع انى اكون ‪ predict taken‬وامشى بنفس االسلوب لو طلع‬
‫توقعى المرة القادمة صح بخلى ال ‪ bit‬ب ‪ 1‬لو طلع غلط بقلب ال ‪ bit‬دى من ‪ 1‬الى زيرو‬
‫الشكل ده يمثل ال ‪ Finite State‬ل ‪( 1 bit predictor‬اسف على الرسمة الحقيرة دى ‪):DD‬‬

‫بس الحل ده فى مشكلتين ان فى بعض البروجرامر بتبقى اللوب بتاعتهم مش دايما بتبقى ‪for‬‬
‫‪ loop‬او ‪ while loop‬بتبقى حاجة مختلطة يعنى ممكن يكون فى ‪ loop‬الكونديشن بتاعها‬
‫‪ positive condition‬وجواها لوب تانية الكونديشن بتاعها ‪ negative condition‬كده‬
‫طبعا هيكون فى توقعات كتير شوية غلط تانى حاجة ان الزم فى كل لوب هعمل على االقل ‪2‬‬
‫‪ stall cycle‬ليه بقى ؟؟ انا لما هخش جوه لوب لو افترضت انها جت معايا كده وتوقعت اول‬
‫كونديشن فى اللوب خالص صح لما هاجى هخرج من اللوب هعمل توقع غلط عشان اخرج‬
‫فهقلب ال ‪ predictor‬بتاعى للحالة المضادة (يعنى لو كنت بتوقع ‪ taken‬هتوقع ‪not‬‬
‫‪ taken‬والعكس صحيح ) ولما هبدأ لوب تانية هعمل كمان توقع غلط الن ال ‪predictor‬‬
‫بتاعى انا قلبته عشان يناسب كونديشن الخروج من اللوب مش الدخول ‪ ..‬يعنى كان المفروض‬
‫مقلبش ال ‪ predictor‬بتاعى الن كونديشن الخروج ده بييجى مرة واحدة بس‬
‫عشان كده عملنا حاجة تانية اسمها ‪ 2 bit predictor‬ودى ال ‪ finite state‬بتاعتها بالشكل‬
‫ده‬

‫هنا ايه اللى بيحصل ‪ ..‬انا هبدأ من االول خالص وهقول ان ال ‪ predict‬مثال ‪ taken‬لو طلع‬
‫توقعى صح خالص يبقى كويس هكمل على ‪ taken‬لو طلع توقعى غلط هروح على ‪state‬‬
‫تانية بس برضه هيفضل توقعى ‪ taken‬عشان لو طلعت انى غلط تانى يبقى معنى كده ان‬
‫احتمال كبير اوى اكون خرجت من البرنامج ودخلت فى برنامج تانى وهروح فى الحالة دى ل‬
‫‪ not taken‬لو طلع انى صح يبقى احتمال كبير اوى ان ال ‪ not taken‬اللى ظهرتلى االول‬
‫دى تبقى بتاعة خروج من اللوب ودلوقتى انا دخلت لوب جديدة ‪ ...‬نفس التفكير هيبقى مع ال‬
‫‪ not taken‬وفى االخر هوصل لل ‪finite state‬‬
‫يمكن ده يكون ملخص حلو اوى لحكاية ال ‪ hazards‬دى‬
‫كده نكون خلصنا شابتر ‪ 4‬لو فى اى سؤال او اى نقد او اى حتة مش مفهومة اسألو علطول‬
‫وبدون تردد على استاذ اونالين‬
‫‪OSTAZ ONLINE‬‬

You might also like