You are on page 1of 115

Chapter 4

pipelining
‫‪Performance Issues‬‬
‫◼ اعرفنا انو ال ‪ full path‬بتضمن نعمل ‪:‬‬
‫‪◼ fetch & decoding & read/write register &load/store‬‬

‫◼ كل هاي العمليات بتتم ب ‪one cycle‬‬


‫◼ النو بكل ‪ cycle‬بنغير قيمة ال ‪pc‬‬
‫◼ يعني كل ‪ instruction‬بحتاج ‪ cycle‬لتنفيذه‬
‫◼ بالتالي مدة ال ‪ cycle‬الزم تعتمد ع مدة ابطء ‪« instruction‬الي بياخد‬
‫اكتر وقت ليتنفذ» وهو «‪»lw‬‬
‫◼ اسرع ‪ instruction‬هو ال ‪jump‬‬
‫◼ لهيك ركزنا ع انو تصميم ال ‪ hardware‬يكون ابسط ما يمكن النو كل ما‬
‫زاد تعقيده زادت مدة ال ‪ cycle‬لكل ال ‪instruction‬‬

‫‪Lilas qawasmeh‬‬
‫‪Performance Issues‬‬
‫بضل عنا مشكله انو لما بدي اعمل ‪ jump‬مثال رح انجبر استنى وقت‬ ‫◼‬

‫طويل لحتى تنتهي ال ‪ cycle‬بالرغم من انو تنفيذ ال ‪ instruction‬انتهى‬

‫وانو بالوقت الي انا بعمل في ‪ fetch‬مثال بكون شغاله ع ال ‪memory‬‬ ‫◼‬

‫‪ instruction‬وباقي ال ‪ devices‬ما بشتغله اي شي‬


‫ولما تخلص ال‪ fetch‬بنتقل تنقيذ ال ‪ instruction‬لل ‪register file‬‬ ‫◼‬

‫وبكون يقراء قيم ال ‪ register‬بس ال & ‪memory instruction‬‬


‫‪ execution & memory‬ما بقدر اعمل عليهم اي اشي‬
‫يعني باختصار باي وقت ح يكون بس اشي واحد شغال والباقي ما بعمل شي‬ ‫◼‬

‫لهيك ح نبلش ندور ع حلول او ‪ design‬افضل‬ ‫◼‬

‫رح نتعلم ال ‪Pipelining‬‬ ‫◼‬

‫‪Lilas qawasmeh‬‬
‫‪§4.5 An Overview of Pipelining‬‬
‫‪Pipelining Analogy‬‬
‫خلينا ناخد مثال من شي عملي بحياتنا لنفهم‬ ‫◼‬

‫الفكره‬
‫ح نحكي عن الغسيل وهو بتضمن اربع عمليات‬ ‫◼‬

‫وهي الغسل والتنشيف والكوي و ضب الغسيل ‪,‬‬


‫كل عمليه منهم بتحتاج نص ساعه‬
‫لو كانت عملية الغسيل ع مبداء ال ‪fullpath‬‬ ‫◼‬

‫يعني بتبداء كل عمليه من الغسله وبتخلص‬ ‫◼‬

‫بالخزانه و ما بقدر اشتغل اي شغلتين مع بعض‬


‫ف اول عمليه غسيل رح تحتاج ساعتين <نص‬
‫ساعه * عددالعمليات(‪)4‬‬
‫لو بدي اكرر العمليه كمان مره بدي كمان‬ ‫◼‬

‫ساعتين ولو كررتها اربع مرات رح تاخد معي‬


‫‪ 8‬ساعات‬
‫وانا عم اضيع وقت وفي اجهزه ما عم تعمل شي‬ ‫◼‬

‫يعني وانا بغسل النشافه و المكوه و الخزانه ما‬


‫عم استغلهم باشي وعم اضيع وقت كبير‬
‫‪Lilas qawasmeh‬‬
‫‪§4.5 An Overview of Pipelining‬‬
‫‪Pipelining Analogy‬‬
‫طيب لو جينا بدنا نزيد السرعه شو فينا نعمل ؟‬ ‫◼‬

‫رح نقسم العمليه ل ‪ 4‬عمليات منفصله بحيث‬ ‫◼‬

‫الجهاز الي خلص شغله بقدر استخدمه بدون ما‬


‫استنى العمليه تخلص بالكامل‬
‫يعني مثال خلصت غسيل وبلشت تنشيف ممكن‬ ‫◼‬

‫ابلش غسيل لشي تاني بنفس الوقت (يعني ابلش‬


‫عملية غسيل تانيه)‬
‫ولو بدي اعرف الوقت الي بحتاجه ف فعلين اول‬ ‫◼‬

‫عملية غسيل رح تحتاج ‪ 4‬ساعات اما لو بدي‬


‫اعمل عمليتين بحتاج ‪ 4‬ساعات ونص‬
‫النو بالوقت الي العمليه االوله بمرحلة التنشيف‬ ‫◼‬

‫العمليه التانيه بتكون بلشت غسيل ف الفرق بينهم‬


‫عمليه وحده‬
‫وهاد زي مبداء ال ‪Pipelining‬‬ ‫◼‬

‫‪Lilas qawasmeh‬‬
§4.5 An Overview of Pipelining
Pipelining Analogy
◼ Pipelined laundry: overlapping execution
◼ Parallelism improves performance
◼ Four loads:
◼ Speedup
= 8/3.5 = 2.3
‫ لما كررنا العمليه‬2.3 ‫السرعه زادة تقريبا‬ ◼

‫ مرات‬4

◼ Non-stop:
‫ رقم‬n ‫ من المرات بحيث‬n ‫طيب لو كررناها‬ ◼

‫كبير ف تاثير اول عمليه ما بكون كبير‬


stage ‫ورح تزيد السرعه بعدد ال‬ ◼

◼ Speedup
= 2n/0.5n + 1.5 ≈ 4
= number of stages

Lilas qawasmeh
MIPS Pipeline
5 stages ‫ رح نقسمه ل‬fullpath ‫• طيب لنحل مشكلة ال‬
: ‫كالتالي‬
1. IF: Instruction fetch from memory
2. ID: Instruction decode & register read
3. EX: Execute operation or calculate address
4. MEM: Access memory operand
5. WB: Write result back to register

Lilas qawasmeh
Pipeline Performance
‫ بتحتاج الوقت التالي‬stage ‫رح نفرض كل‬ ◼

◼ 100ps for register read or write


◼ 200ps for other stages

‫ الي‬stages ‫ كم رح يحتاج وقت حسب ال‬instruction ‫طيب خلينا نشوف كل نوع من ال‬ ◼

‫بحتاجها‬
lw ‫اكتر اشي بحتاج وقت هو ال‬ ◼

Instr Instr fetch Register ALU op Memory Register Total time


read access write
lw 200ps 100 ps 200ps 200ps 100 ps 800ps
sw 200ps 100 ps 200ps 200ps 700ps
R-format 200ps 100 ps 200ps 100 ps 600ps
beq 200ps 100 ps 200ps 500ps

Lilas qawasmeh
Pipeline Performance
800ps ‫ رح تحتاج‬cycle ‫ كل‬fullpath ‫ كان ع ال‬design ‫لو حكينا ال‬ ◼

lw ‫ وهو ال‬instruction ‫ع حسب مدة اطول‬


3*800= 2400 ps ‫ رح نحتاج‬3 instruction ‫طيب لو بدي انفذ‬ ◼

n*800 ‫ رح نحتاج‬n instruction ‫يعني لو بدنا‬ ◼

Single-cycle (Tc= 800ps)

Lilas qawasmeh
‫‪Pipeline Performance‬‬
‫طيب لو عدلنا ليصير ع ال‪ Pipeline‬مدة كل ال ‪ stage‬الزم يكونو‬ ‫◼‬

‫متساويات ف اطول ‪ stage‬بدها ‪ 200ps‬ف ح نثبت عليها مدة كل ال‬


‫‪stage‬‬
‫طيب اول ‪ instruction‬رح ياخد ‪1000ps=5*200‬‬ ‫◼‬

‫وال ‪ instruction‬التاني بدو ‪ 200ps‬والثالث والرابع نفس الشي‬ ‫◼‬

‫بالتالي لو بدنا ‪ n instruction‬رح نحتاج ‪1000+200*n‬‬ ‫◼‬

‫)‪Pipelined (Tc= 200ps‬‬

‫‪Lilas qawasmeh‬‬
‫‪Pipeline Performance‬‬
‫طيب لو بدنا نحسب ال ‪speedup‬‬ ‫◼‬

‫◼‬ ‫‪Speedup = n*800/1000+n*200‬‬

‫ع فرض ‪ n=10^6‬من ال ‪ instruction‬يعني فينا نهمل ال ‪ 1000‬النو‬ ‫◼‬

‫تأثيرها قليل‬
‫ح يطلع تقريبا ال ‪Speedup =4‬‬ ‫◼‬

‫ما طلع ‪ 5‬ع عدد ال ‪ stages‬النو زدنا وقت ‪ stage‬من ‪ 100‬ل ‪200‬‬ ‫◼‬

‫‪Lilas qawasmeh‬‬
Pipeline Speedup
◼ If all stages are balanced
◼ i.e., all take the same time
◼ Time between instructionspipelined
= Time between instructionsnonpipelined
Number of stages
◼ If not balanced, speedup is less
◼ Speedup due to increased throughput
◼ Latency (time for each instruction) does not
decrease
Pipelining and ISA Design
◼ MIPS ISA designed for pipelining
◼ All instructions are 32-bits
◼ Easier to fetch and decode in one cycle
◼ c.f. x86: 1- to 17-byte instructions
◼ Few and regular instruction formats
◼ Can decode and read registers in one step
◼ Load/store addressing
◼ Can calculate address in 3rd stage, access memory
in 4th stage
◼ Alignment of memory operands
◼ Memory access takes only one cycle
‫‪Hazards‬‬
‫المشاكل الي رح تواجهنا بال ‪pipeline‬‬ ‫◼‬

‫◼‬ ‫‪Data hazard‬‬


‫بكون عنا ‪ instruction‬بعتمد ع قيمة ‪ data‬بتنتج من ال ‪ instruction‬الي قبله وبتكون‬ ‫◼‬
‫القيمه لسا ما نعمللها ‪ write‬على ال ‪register‬‬
‫◼‬ ‫‪Control hazard‬‬
‫بكون عنا ‪ branch‬ف ما بقدر اعرف قيمة ال ‪ instruction‬التالي لحتى تخلص عملية‬ ‫◼‬
‫المقارنه و نحدد ال ‪target address‬‬
‫◼‬ ‫‪Structure hazards‬‬
‫الفكره انو ال ‪ advice‬الي عنا ما بقدر استخدمه اال مره وحده بكل ‪instruction‬‬ ‫◼‬

‫مثال ال ‪ memory‬رح احتاج تنتين االولى ‪ instruction memory‬والتانيه ‪data‬‬ ‫◼‬


‫‪Memory‬‬
‫وهاد الحكي لكل ال ‪ devices‬الموجودين‬ ‫◼‬

‫رح نحكي عن هاي المشاكل بتفصيل اكتر ونالقي حلول بالساليد الجاي ‪ ,‬ف اذا مش كتير‬
‫واضحه مش مشكله‬
‫‪Lilas qawasmeh‬‬
Structure Hazards
◼ Conflict for use of a resource
◼ In MIPS pipeline with a single memory
◼ Load/store requires data access
◼ Instruction fetch would have to stall for that
cycle
◼ Would cause a pipeline “bubble”
◼ Hence, pipelined datapaths require
separate instruction/data memories
◼ Or separate instruction/data caches
‫‪Data Hazards‬‬
‫حكينا انو ال ‪ data hazards‬انو بكون عنا ‪ instruction‬بعتمد ع قيمة ‪ data‬بتنتج‬ ‫◼‬

‫من ال ‪ instruction‬الي قبله وبتكون القيمه لسا ما نعمللها ‪ write‬على ال ‪register‬‬

‫زي هاد المثال ال ‪ sub‬بتحتاج قيمة ال ‪ s0‬وبنالحظ انو ال ‪ add‬بتغير ع قيمة ال ‪s0‬‬ ‫◼‬

‫‪◼ add‬‬ ‫‪$s0, $t0, $t1‬‬


‫‪sub‬‬ ‫‪$t2, $s0, $t3‬‬
‫بخزن ناتج‬
‫بجمع‬
‫الجمع ب‬
‫‪t0+t1‬‬
‫‪s0‬‬

‫بنالحظ انو‪ sub‬رح يقراء‬ ‫◼‬

‫قيمه غلط لل ‪ s0‬كونو بعتمد‬


‫ع ‪ instruction‬ال‬
‫‪ add‬الي نتيجته لسا ما‬
‫جهزت‬
‫بقراء قيم ال‬
‫وهاد الي بنسمي ‪data‬‬ ‫◼‬

‫‪resist s0,t3‬‬ ‫‪hazard‬‬


‫‪Lilas qawasmeh‬‬
‫‪Data Hazards‬‬
‫هالء بدنا نحاول نجد حل لهاي المشكله ‪:‬‬ ‫◼‬

‫قبل ما نبلش بالحل ولحتى نفهمه في شغله مهمه الزم نعرفها‬ ‫◼‬

‫عملية ال ‪ read‬او ال ‪ write‬حكينا بحتاجه ‪ 100ps‬بس مدة كل ‪cycle‬‬ ‫◼‬

‫‪ 200ps‬لحتى يكونو متساويات‬


‫بالتالي الي بدنا نعرفه انو ال ‪ design‬لل ‪ file register‬مصمم انو يعمل‬ ‫◼‬

‫‪ write‬بالنص االول من ال ‪ cycle‬يعني باول ‪ 100‬من ال ‪ 200‬ويعمل ‪read‬‬


‫بالنص التاني من ال ‪ cycle‬بال ‪ 100‬الي ضلت‬

‫‪Lilas qawasmeh‬‬
‫‪Data Hazards‬‬
‫اول حل عنا وهو انو نستنى فتره بين ال ‪ instruction‬لحتى تجهز قيمة ‪ s0‬وتتخزن‬ ‫◼‬

‫ونقدر نقرئها صح‬


‫بنحتاج شي اسمه ‪ bubble‬بين ال ‪instruction‬‬ ‫◼‬

‫ال ‪ bubble‬بتاخرلي ال ‪ instruction‬الي بدي ياه لحتى اكون جاهز استخدمه‬ ‫◼‬

‫وهي بتعمل ع انو كل ال ‪ control signal‬يكونو صفر بحيث ما تاثر اي شي ع‬ ‫◼‬

‫ال ‪ code‬الي بدي انفذه يعني عم اضيع وقت بلى ما اعمل شي ليجهز الي بدي ياه‬
‫ال ‪ data‬الي بدي ياها من ال ‪ add‬بتكون جاهزه بال ‪ WB Stage‬بحيث انو بالنص‬ ‫◼‬

‫االول بعمللها ‪ write‬وبالنص التاني بتكون جاهزه وبقدر اعمللها ‪ read‬بشكل صحيح‬
‫بالتالي الزم ال ‪ ID stage‬لل ‪ sub‬ما تبداء قبل ما اصل ال ‪ WB Stage‬بال ‪add‬‬ ‫◼‬

‫بالتالي بلزمني استنى ‪two cycle‬‬ ‫◼‬

‫‪Lilas‬‬
‫‪Data Hazards‬‬
‫بعمل‪rea‬‬ ‫ما بعمل‬ ‫بعمل ‪ write‬ل ناتج الجمع ع‬
‫بعمل ‪fetch‬‬ ‫بجمع‬
‫‪ d‬لل‬ ‫شي بال‬ ‫‪ s0‬بالنص االول من ال‬
‫لل ‪add‬‬ ‫‪t0+t1‬‬
‫‪t0,t1‬‬ ‫‪mem‬‬ ‫‪cycle‬‬

‫ال ‪bubble‬‬
‫الحظ بلش يعمل‬ ‫بعملو على تاخير‬
‫‪ fetch‬لل ‪ sub‬لما‬ ‫‪ instruction‬ال ‪sub‬‬
‫كان ال ‪ add‬بال‬ ‫‪Two cycle‬‬
‫‪ MEM stage‬بدل‬
‫من وهو بال ‪ID‬‬
‫‪stage‬‬

‫بعمل‪ read‬لل ‪s0‬‬


‫بعمل ‪fetch‬‬
‫بالنص التاني من‬
‫لل ‪sub‬‬
‫ال‪cycle‬‬
‫‪Lilas qawasmeh‬‬
‫)‪Forwarding (aka Bypassing‬‬
‫الحل االول كنا نستنى نضيع وقت ‪ two cycle‬ونحنا نستنى ‪ ,‬ف بدنا ندور ع حل تاني‬ ‫◼‬

‫ما تضيع وقت‬

‫الفكره الي عنا انو قيمة ال ‪ s0‬بتجهز بنهاية ال ‪ EX stage‬و انا بستنى ‪two‬‬ ‫◼‬

‫‪ cycle‬لحتى يخزنها وارجع اقرئها ‪ ,‬بالوقت الي انا بهمني قيمة ناتج الجمع بس‬
‫الستخدمها بال ‪sub‬‬
‫فالحل التاني انو اعمل ‪ forwarding‬وهو اني استخدم قيمة ‪ s0‬الي هي ناتج الجمع‬ ‫◼‬

‫اول ما تجهز بلى ما استنى تتخزن‬

‫‪Lilas qawasmeh‬‬
‫)‪Forwarding (aka Bypassing‬‬
‫ناتج الجمع‬ ‫بعمل ‪ write‬ل ناتج الجمع ع‬
‫بعمل ‪read‬‬ ‫بجمع‬
‫هون بكون‬ ‫‪ s0‬بالنص االول من ال‬
‫بعمل ‪fetch‬‬ ‫لل ‪t0,t1‬‬ ‫‪t0+t1‬‬
‫جهز‬ ‫‪cycle‬‬
‫لل ‪add‬‬

‫بعمل ‪fetch‬‬
‫لل ‪sub‬‬ ‫هون رح يصيرعنا خيارين‬
‫الحظ ما‬ ‫بعمل‪ read‬لل ‪s0‬‬ ‫ورح احتاج احط‬
‫رح ناخد ناتج الجمع‬
‫ضيعت وال اي‬ ‫ورح يقراء قيمه غلط‬ ‫‪ multiplexer‬يختارلي‬
‫والي هو بمثل القيمه‬
‫‪cycle‬‬ ‫النو ال ‪ s0‬لسا ما‬ ‫الصح‬
‫الصح الي بدي ياها‬
‫تخزنة‬

‫‪Lilas qawasmeh‬‬
‫‪Load-Use Data Hazard‬‬
‫بس الزم نعرف انو ال ‪ forwarding‬مش دايما بقدر استغني في عن ال ‪bubble‬‬ ‫◼‬

‫مثال بال ‪ lw‬قيمة ال ‪ register‬بتتحدد بنهاية ال ‪MEM stage‬‬ ‫◼‬

‫مثال ‪:‬‬ ‫◼‬

‫◼‬ ‫)‪Lw $s0 , 20($t1‬‬


‫◼‬ ‫‪Add $t2,$s0,$t3‬‬
‫لو بدي اطبق عليه نفس الحكي السابق ‪:‬‬ ‫◼‬

‫بجمع قيم ال‬


‫قيمه ‪ s0‬بتجهز هون بعد ما‬
‫‪ address‬الحصل‬
‫اقراء قيمتها من ال ‪memory‬‬
‫على ال ‪target‬‬

‫رح يكونو القيمتين غلط ‪ ,‬قيمه ‪ s0‬النو لسا ما‬


‫خزنها ‪ ,‬والقيمه الي جاي من ال ‪ forward‬ال‬
‫‪target address‬‬ ‫‪Lilas qawasmeh‬‬
‫‪Load-Use Data Hazard‬‬
‫الحظنا انو الحل السابق ما بزبط‬ ‫◼‬

‫بالتالي الحل الي ضل عنا انو نستنى ‪ cycle‬لحتى يكون قراء القيمه من ال ‪memory‬‬ ‫◼‬

‫من خالل انو نستخدم ال ‪bubble‬‬ ‫◼‬

‫بجمع قيم ال‬


‫‪ address‬الحصل‬ ‫قيمه ‪ s0‬بتجهز هون بعد ما‬
‫على ال ‪target‬‬ ‫اقراء قيمتها من ال ‪memory‬‬

‫رح يخلوني استنى‬


‫‪one cycle‬‬

‫رح يصير عند قيمتين ‪ ,‬قيمة ‪ s0‬الي بقرائها من ال‬


‫‪ file reg‬وهي قيمه خطاء ‪ ,‬وقيمة ‪ s0‬الي بتنتج من‬
‫قراءت قيمة ال ‪ target‬من ال ‪memory‬‬ ‫‪Lilas qawasmeh‬‬
‫‪Code Scheduling to Avoid Stalls‬‬
‫عنا كمان طريقه لنتخلص من ال ‪ data hazard‬وهاي الطريقه ‪software‬‬ ‫❑‬

‫‪solution‬‬
‫طريقة ال ‪ recoding‬وهي انو اعيد ترتيب ال ‪ code‬اذا بقدر بطريقه انو ااخر ال‬ ‫❑‬

‫‪ instruction‬الي بعتمد ع قيمة ال ‪ instruction‬الي قبلو‬


‫بس بشرط ما ااثر على وضيفة ال ‪code‬‬ ‫❑‬

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


‫‪lw‬‬ ‫‪$t2,‬‬ ‫)‪4($t0‬‬ ‫‪lw‬‬ ‫‪$t2,‬‬ ‫)‪4($t0‬‬
‫بعتمد ع‬ ‫‪add‬‬ ‫‪$t3,‬‬ ‫‪$t1, $t2‬‬ ‫‪lw‬‬ ‫‪$t4,‬‬ ‫)‪8($t0‬‬
‫الي قبله‬ ‫‪sw‬‬ ‫‪$t3,‬‬ ‫)‪12($t0‬‬ ‫‪add‬‬ ‫‪$t3,‬‬ ‫‪$t1, $t2‬‬
‫‪lw‬‬ ‫‪$t4,‬‬ ‫)‪8($t0‬‬ ‫‪sw‬‬ ‫‪$t3,‬‬ ‫)‪12($t0‬‬
‫بعتمد ع‬ ‫‪add‬‬ ‫‪$t5,‬‬ ‫‪$t1, $t4‬‬ ‫‪add‬‬ ‫‪$t5,‬‬ ‫‪$t1, $t4‬‬
‫الي قبله‬ ‫‪sw‬‬ ‫‪$t5,‬‬ ‫)‪16($t0‬‬ ‫‪sw‬‬ ‫‪$t5,‬‬ ‫)‪16($t0‬‬
‫عدد ال ‪ cycle‬الي بنحتاجهم =‬ ‫هون ما رح نحتاج نعمل ‪bubble‬‬
‫عدد ال‪ cycle‬الول ‪ * 1 + inst‬عدد ال ‪ inst‬الي ضلو ‪+‬‬ ‫بالتالي رح نوفر ‪ two cycle‬ويصير‬
‫عدد ال ‪ bubble‬الي بحتاجهم =‪13 cycle=2+6+5‬‬ ‫بدنا ‪11 cycle‬‬
‫‪Lilas qawasmeh‬‬
Control Hazards
‫ وهاد النوع بتعلق بال‬control hazards ‫ وهو ال‬hazards ‫تاني نوع من ال‬ ◼
branch
‫ الي‬instruction ‫ ما بكون عارف شو ال‬branch instruction ‫لما يكون عنا‬ ◼
‫ و‬register ‫ يعني لحتى يقارن بين ال‬branch ‫رح يتنفذ بعده لحتى اكمل ال‬
not ‫ ) وال‬label ‫ (رح نروح ع ال‬taken ‫ رح تكون‬branch ‫يعرف اذا ال‬
) pc+4 ‫ )رح نروح ع ال‬taken
‫ رح‬branch ‫ لل‬next instruction ‫ يعني ال‬EX stage ‫والمقارنه بتصير بال‬ ◼
EX stage ‫ ال‬branch ‫يبلش بعد ما يكمل ال‬

Beq $1,$2,label

two ‫رح نستنى‬


cycle

Any instruction
Lilas qawasmeh
‫‪Stall on Branch‬‬
‫اول حل هو انو نبكر عملية ال ‪ branch‬بحيث انو بال ‪ ID stage‬رح نعمل ال‬ ‫◼‬
‫مقارنه بين ال ‪ register‬ونحسب ال ‪ target address‬بالتالي بنكسب ‪cycle‬‬

‫الي ح يصير انو عملية المقارنه فينا نحسبها ب ‪ extra get‬وهي ال ‪xnor +‬‬ ‫◼‬
‫‪and‬‬
‫رح تتوضح اكتر كيف بتخلص ال ‪ branch‬بال ‪ ID stage‬بس هالء المهم نعرف‬ ‫◼‬
‫انو فينها نخلصها ابكر‬
‫هون ال‬ ‫معناتو ال ‪ next instruction‬رح يستنى ‪one cycle‬‬ ‫◼‬
‫‪ branch‬رح‬
‫تخلص‬

‫‪Lilas qawasmeh‬‬
‫‪Branch Prediction‬‬
‫تاني حل هو ال ‪ < branch prediction‬بنحاول نحزر وين ال ‪ branch‬رح‬ ‫◼‬
‫توديني اذا حزرت صح بكمل وبكون حققت ال ‪ full speed‬واذا حزرت غلط‬
‫بحذف الي عملته وببلش بالصح‬

‫غالبا بس اجي احزر بفكر كالتالي ‪:‬‬ ‫◼‬

‫لو كان الي عنا ‪ while‬بنكون رح نكررها ‪ n‬من المرات ف بنفرض انو ال‬ ‫◼‬
‫‪ branch‬دائما ‪ taken‬النو رح تزبط ‪ n‬من المرات ومره وحده ما رح تزبط‬

‫اما بأي كود عادي ف غالبا ال ‪ branch‬رح تكون ‪ not taken‬النو ما في معنى‬ ‫◼‬
‫من انو اكتب كود ودائما اقفز عنو ‪ ,‬هي بتصير ‪ taken‬بحاالت معينه مثل ال‬
‫‪ error‬او ال ‪special case‬‬

‫هاد الحكي مش دايما صح النو نحنا عم نتحزر‬ ‫◼‬

‫‪Lilas qawasmeh‬‬
‫‪MIPS with Predict Not Taken‬‬
‫‪Prediction‬‬
‫‪correct‬‬

‫اذا كان الفرض‬


‫صحيح بنكمل عليه‬
‫و بنكون حققنا‬
‫ال ‪full speed‬‬

‫‪Prediction‬‬
‫‪incorrect‬‬
‫اذا كان الفرض غلط‬
‫رح نعمل الي فرضنا‬
‫‪ bubble‬يعني ح نصفر كل‬
‫ال ‪ control‬الو بحيث ما‬
‫يأثر ع ال ‪ code‬وبعدين رح‬
‫نبداء بالصح‬
‫ف رح نضيع بس ‪one‬‬
‫‪cycle‬‬
‫‪Lilas qawasmeh‬‬
‫‪More-Realistic Branch Prediction‬‬
‫عنا نوعين من ال ‪: predication‬‬ ‫◼‬

‫◼‬ ‫‪Static branch prediction‬‬


‫هون بحط فرض لل ‪ branch‬اما ‪ taken‬او ‪ not taken‬ع حسب االشي الي غالبا ح‬ ‫◼‬

‫يصير متل ما حكينا بالساليد السابق‬


‫و ح نضل نمشي ع الفرض الي حكينا لكل الحاالت « يعني الفرض ما بتغير »‬ ‫◼‬

‫◼‬ ‫‪Dynamic branch prediction‬‬


‫هون اذا حزرت صح بكمل واذا حزرت غلط رح نعدل الغلط ورح نعدل الفرض للمرات‬ ‫◼‬

‫القادمه‬
‫يعني اذا الفرض ‪ taken‬والكود طلع ‪ not taken‬رح نخلي الفرض للمره الجاي ‪not taken‬‬ ‫◼‬

‫‪Lilas qawasmeh‬‬
‫‪Branch Prediction‬‬
‫بس رح يضل عنا مشكلتين‬ ‫◼‬

‫االولى ‪ :‬اذا كنت بدي احزر انها ‪ taken‬وانا بال ‪ ID stage‬ما بعرف شو ال ‪target‬‬ ‫◼‬
‫‪ address‬اال لتخلص ال ‪stage‬‬

‫التانيه ‪ :‬كيف بدي اعرف انو ال ‪ instruction‬الي عندي ‪ branch‬وانا ب ‪ stage‬ال‬ ‫◼‬
‫‪ fetch‬؟‬
‫لحتى اتحزر الزم اكون متاكد انو انا عندي ‪ branch‬وانا بال ‪fetch stage‬‬ ‫◼‬

‫ونوع ال ‪ instruction‬بعرفه بعد نهاية هاي ال ‪stage‬‬ ‫◼‬

‫رح نعرف كيف ممكن نحلهم باخر ال ‪chapter‬‬ ‫◼‬

‫‪Lilas qawasmeh‬‬
Pipeline Summary
The BIG Picture

◼ Pipelining improves performance by


increasing instruction throughput
◼ Executes multiple instructions in parallel
◼ Each instruction has the same latency
◼ Subject to hazards
◼ Structure, data, control
◼ Instruction set design affects complexity of
pipeline implementation
§4.6 Pipelined Datapath and Control
MIPS Pipelined Datapath
datapath ‫ ع ال‬stages ‫هون بس بوضحلنا كيف قسم ال‬ ◼

MEM

Right-to-left
flow leads to WB
hazards

Lilas qawasmeh
Pipeline registers
◼ Need registers between stages
‫ مشان نخزن في المعلومات اللي بتلزم ال‬stages ‫ بين ال‬register ‫بنحتاج يكون عنا‬ ◼

stage ‫ الي بال‬instruction

Pipeline
registers Lilas qawasmeh
Pipeline Operation

◼ “Single-clock-cycle” pipeline diagram


‫ لل‬stage ‫ الي بصير بكل‬instruction ‫هون بوضحلي شو ال‬ ◼

‫ وحده‬cycle ‫ خالل‬datapath

◼ “multi-clock-cycle” diagram
cycle ‫ خالل مجموعه من ال‬instruction ‫توضيح شو ح يصير لل‬ ◼

Lilas qawasmeh
We’ll look at “single-clock-cycle”
diagrams for load & store

“single- ‫ الي عنا ع ال‬instruction ‫هالء رح نبلش نطبق انواع ال‬ ◼

‫ ونحلها‬design ‫ ونشوف شو عنا مشاكل بال‬clock-cycle”

load&store ‫رح نبلش بال‬ ◼

Lilas qawasmeh
IF for Load, Store, …
instruction ‫ لل‬fetch ‫ » رح نعمل‬IF “fetch” stage ‫بال‬ ◼

pipeline ‫بهاد الجزء من ال‬


‫ رح يخزن ناتج عملية‬register
‫ اي رح يخزن ال‬fetch ‫ال‬
instruction
Lilas qawasmeh
ID for Load, Store, …
‫ لل‬sign-extend ‫ و‬register ‫ لقيم ال‬read ‫ » رح نعمل‬ID “decode” stage ‫بال‬ ◼
control signal ‫ ونحدد ال‬offset

ID ‫ لل‬inst ‫بس ينتقل ال‬


‫ رح ينقل المعلومات‬stage
‫الخاصه في للنص التاني من ال‬ pipeline ‫بهاد الجزء من ال‬
pipeline register ‫ رح يخزن ناتج عملية‬register
‫ اي قيم ال‬decode‫ال‬
Lilas qawasmeh
offset ‫ وال‬register
EX for Load
‫ من خالل انو نجمع‬target address ‫ » رح نوجد ال‬EX “execution” stage ‫بال‬ ◼
base ‫ مع ال‬offset ‫ال‬

Target address
offset ‫ وال‬register ‫قيم ال‬
Lilas qawasmeh
MEM for Load
target ‫ قيمة ال‬memory ‫ » رح نقراء من ال‬MEM “memory” stage ‫بال‬ ◼
address

Target address Read data

Lilas qawasmeh
WB for Load
register ‫ع ال‬read data ‫ » رح نخزن قيمة ال‬WB “write bake” stage ‫بال‬ ◼

instr ‫ رح يكون صار في‬WB stage ‫ بال‬load ‫هون ح يصير عنا مشكله انو لما ال‬ ◼
write ‫ مختلف الو رقم‬instr ‫ رح يكون عنا‬ID stage ‫ ف بال‬stage ‫مختلفين بباقي ال‬
‫ غلط‬reg ‫ ع‬write ‫ بالتالي رح يعمل‬load ‫ غير الي لل‬reg

Wrong
register
number
Read data Lilas
qawasmeh
Corrected Datapath for Load
wb ‫ لحتى اصل لل‬stage ‫ معنا عبر كل ال‬write reg ‫لنحل المشكله رح ناخد رقم ال‬ ◼
‫ الصح‬reg ‫واكتب ع ال‬

write Read data


Lilas
register + write reg
qawasmeh
EX for Store
lw ‫ الها رح يصير زي الي بصير‬two stage ‫ اول‬store ‫ال‬ ◼

reg ‫ الموجوده بال‬write data ‫ وياخد ال‬address ‫ رح يحسب ال‬EX stage ‫بال‬ ◼
‫معو‬
next stage ‫ لهيك باخدها معي ع ال‬write data ‫ف بنالحظ هون انو الي بهمني هو‬ ◼

Offset + base + Target address


write data + write data Lilas qawasmeh
MEM for Store
memory ‫ بال‬target addresss ‫ ع ال‬data ‫ رح نخزن ال‬MEM stage ‫بال‬ ◼

Target address
+ write data
Lilas qawasmeh
WB for Store
‫ ما رح نعمل شي‬WB stage‫بال‬ ◼

Lilas qawasmeh
‫مالحظه ‪ :‬بالمثالين السابقات كنا عم نتتبع تنفيذ ال ‪ lw/sw‬ع ال ‪single-‬‬ ‫◼‬
‫‪ clock-cycle‬و كنا نشوف كيف بنتقل عبر ال ‪stage‬‬
‫بدي تعرفو انو باقي ال ‪ stages‬ما رح يكونو فاضين ‪ ,‬يعني رح يكون فيهم‬ ‫◼‬
‫‪ instruction‬مختلفين بس نحنا كان بهمنا نشوف ال ‪lw/sw‬‬

‫هالء خلونا نشوف كيف بنرسم ال ‪ , Multi-Cycle‬الي حكينا انها رح تعبر‬ ‫◼‬
‫عن مجموعة ‪ inst‬خالل اكتر من ‪cycle‬‬

‫‪Lilas qawasmeh‬‬
Multi-Cycle Pipeline Diagram
◼ Form showing resource usage

Lilas qawasmeh
Multi-Cycle Pipeline Diagram
◼ Traditional form

Lilas qawasmeh
Single-Cycle Pipeline Diagram
◼ State of pipeline in a given cycle

Lilas qawasmeh
Pipelined Control (Simplified)

write ‫ الي ح تعمل عليه‬register ‫بتختار رقم ال‬


‫ و ح‬instruction ‫ حسب نوع ال‬rd ‫ وال‬rt ‫هل هو‬
stage ‫ معها عبر ال‬register ‫تنقل رقم ال‬ Lilas qawasmeh
‫‪Pipelined Control‬‬
‫اما بالنسبه لل ‪ control signal‬ف كل ‪ instr‬الو ‪ control‬خاصين في لهيك كل ‪ instr‬ح‬ ‫◼‬

‫ياخد ال ‪ control‬الي الو معو عبر ال ‪stage‬‬


‫بس في شغله انو مش كل ال ‪ control‬رح يضلو يلزموني بكل ال ‪ stage‬لهيك رح اخد‬ ‫◼‬

‫الشي الي لسا ممكن احتاجه والباقي بتركه‬

‫ف مثال هون رح اكون خلصت من ال‬


‫‪ control‬الخاصين بال ‪ex stage‬‬
‫ف ما باخدهم معي باخد بس الي‬
‫بلزموني بال ‪WB&MEM stage‬‬ ‫‪Lilas qawasmeh‬‬
Pipelined Control

‫بس رح نضيف ال‬


‫ الي‬control signal
‫ح ننقلهم ع ال‬
pipeline reg
Lilas qawasmeh
§4.7 Data Hazards: Forwarding vs. Stalling
Data Hazards in ALU Instructions
◼ Consider this sequence:
sub $2, $1,$3
and $12,$2,$5
or $13,$6,$2
add $14,$2,$2
sw $15,100($2)
◼ We can resolve hazards with forwarding
◼ How do we detect when to forward?

‫ الي حكينا عنها وحكينا انو فينا‬data hazard ‫هالء بدنا نحل مشكلة ال‬ ◼

forwarding ‫نحلها من خالل ال‬


ALU ‫ ع ال‬forwarding ‫ف رح نطبق ال‬ ◼

Lilas qawasmeh
‫‪Dependencies & Forwarding‬‬

‫هون بذكرنا بمبداء ال‬


‫‪ forwarding‬الي‬
‫بحكيلنا انو رح ناخد‬
‫ال ‪ data‬اول ما‬
‫تجهز لباقي ال‪instr‬‬
‫الي بحتاجوها‬

‫‪Lilas qawasmeh‬‬
‫مثال ‪:‬‬ ‫◼‬

‫◼‬ ‫‪Add $1,$2,$3‬‬


‫◼‬ ‫‪Sub $4,$1,$5‬‬
‫◼‬ ‫‪And $6,$7,$1‬‬
‫◼‬ ‫‪Or $5,$2,$5‬‬

‫هون عنا ‪ » data hazard‬حيث انو ال ‪ sub‬وال ‪ and‬بعتمده ع قيمة‬ ‫◼‬


‫‪ $1‬الي رح نحسبها بال ‪add‬‬
‫ف ح نطبق ال ‪ forward‬بس قبل خلينا نشوف كيف رح يصير تنفيذهم‬ ‫◼‬
‫لنعرف كيف نضيف ال ‪Forward‬‬

‫‪Lilas qawasmeh‬‬
Cycle 1 :

‫ ما عنا اي مشاكل لهالء‬, add ‫ لل‬fetch ‫بنعمل‬ ◼

Fetch add $1,$2,$3

Lilas qawasmeh
Cycle 2 :
‫ ما عنا اي مشاكل لهالء‬,sub ‫ لل‬fetch ‫ بنعمل‬, next stage “ID” ‫ ح تنتقل لل‬add ‫ال‬ ◼

Fetch sub $4,$1,$5 Decode add $1,$2,$3

Lilas qawasmeh
Cycle 3 :

‫ و ح بنعمل‬ID stage ‫ ح تنتقل لل‬sub ‫ و ال‬, next stage “EX” ‫ ح تنتقل لل‬add ‫ال‬ ◼

and ‫ لل‬fetch
$1 ‫ رح تقراء قيمه غلط لل‬sub ‫هون ال‬ ◼

Fetch and $6,$7,$1 Decode sub $4,$1,$5 EX add $1,$2,$3

Lilas qawasmeh
‫‪Cycle 4 :‬‬
‫ال ‪ add‬ح تنتقل ل”‪ , ”MEM‬و ال ‪ sub‬ح تنتقل لل ”‪ “EX‬وال ‪ and‬ح تنتقل لل ”‪ “ID‬و‬ ‫◼‬

‫ح بنعمل ‪ fetch‬لل ‪or‬‬


‫هون ال ‪ sub‬رح تنفذ عملية الطرح غلط النو قيمة ‪ $1‬الي عندها غلط « ف هون الزم‬ ‫◼‬

‫نعمللها ‪ forward‬النو القيمه الصح الي بال ‪ add‬صارت جاهزه‬


‫و برضو ال ‪ and‬ح يقراء قيمه غلط لل ‪$1‬‬ ‫◼‬

‫‪Or $5,$2,$5‬‬ ‫‪ID and $6,$7,$1‬‬ ‫‪EX sub $4,$1,$5‬‬ ‫‪MEM add $1,$2,$3‬‬

‫‪Lilas qawasmeh‬‬
‫‪Cycle 5 :‬‬

‫ال ‪ add‬ح تنتقل ل”‪ , WB‬و ال ‪ sub‬ح تنتقل لل ”‪ “MEM‬وال ‪ and‬ح تنتقل لل ”‪“EX‬‬ ‫◼‬

‫وال ‪ or‬ح تنتقل لل ”‪ “ID‬و ح بنعمل ‪ fetch‬لل ‪ inst‬جديد‬


‫هون ال ‪ and‬رح تنفذ العملية غلط النو قيمة ‪ $1‬الي عندها غلط « ف هون برضو الزم‬ ‫◼‬

‫نعمللها ‪ forward‬النو القيمه الصح الي بال ‪ add‬جاهزه‬

‫‪fetch‬‬ ‫‪or‬‬ ‫‪EX and $6,$7,$1‬‬ ‫‪MEM sub $4,$1,$5‬‬ ‫‪WB add‬‬
‫‪$1,$2,$3‬‬

‫‪Lilas qawasmeh‬‬
‫هالء عرفنا وين ال ‪ data hazard‬صارت تعو نحلها‬ ‫◼‬

‫نرجع ل ال ‪ cycle 4‬الي صار فيها اول تنفيذ غلط‬ ‫◼‬

‫بعدين ال ‪cycle 5‬‬ ‫◼‬

‫‪Lilas qawasmeh‬‬
‫‪Cycle 4 :‬‬

‫‪EX sub $4,$1,$5‬‬ ‫‪MEM add $1,$2,$3‬‬

‫كونو رح يصير في‬


‫قيمتين يدخلو ع الجزء‬
‫االول من ال ‪ ALU‬ف‬
‫قيمه ‪$1‬‬ ‫قيمه ‪$1‬‬
‫رح نحط ‪multiplex‬‬
‫هون غلط‬ ‫الصح هون‬
‫يختار بينهم حسب اذا‬
‫في ‪ forward‬او الء‬
‫رح ناخد القيمه‬
‫الصح ونوديها‬
‫‪EX stage‬‬ ‫‪Lilas qawasmeh‬‬
‫‪Cycle 5 :‬‬

‫‪EX and $6,$7,$1‬‬ ‫‪sub $4,$1,$5‬‬ ‫‪add $1,$2,$3‬‬

‫برضو هون رح يصير في‬


‫قيمتين يدخلو ع الجزء‬
‫التاني من ال ‪ ALU‬ف‬
‫رح نحط ‪ mux‬تاني يختار‬
‫بينهم قبل ال ‪ mux‬الي‬ ‫قيمه ‪$1‬‬
‫عنا من قبل‬ ‫الصح هون‬
‫انتبه ال ‪ mux‬الي موجود‬ ‫قيمه ‪$1‬‬ ‫رح ناخد القيمه‬
‫هون غلط‬ ‫الصح ونوديها‬
‫كان يحدد اذا ح ناخد من‬
‫‪EX stage‬‬
‫ال ‪ reg file‬او من ال‬
‫‪sing-extend‬‬ ‫‪Lilas qawasmeh‬‬
‫هالء فينا نستنتج انو القيمه الي ح ينعمللها ‪ forward‬رح ترجع لل ‪EX stage‬‬ ‫◼‬

‫اما مكان القيمه الي ح ينعمللها ‪ forward‬ح تكون اما بال ‪ EX/MEM reg‬او بال‬ ‫◼‬
‫‪MEM/WB reg‬‬

‫ف رح نضيف ‪ two mux‬عند كل ‪ input‬لل ‪ ALU‬وكل ‪ mux‬رح يختار بين ‪ 3‬قيم ‪:‬‬

‫‪ )1‬من ال ‪ file reg‬اذا ما عنا ‪forward‬‬


‫‪ )2‬من ‪EX/MEM reg‬‬
‫‪ )3‬من ‪MEM/WB reg‬‬

‫‪ 2,3‬اذا عنا ‪forward‬‬

‫ف بعد ما نضيف ال ‪ forward‬رح تصير الرسمه كالتالي ‪:‬‬

‫‪Lilas qawasmeh‬‬
Forwarding Paths

Lilas qawasmeh
‫‪Forwarding Paths‬‬
‫ال ‪ forward‬رح يصير ل‬
‫‪ rs‬بالتالي رح نشغل‬
‫خلينا نشوف كيف ح ينفذ عليها لل ‪: cycle 4‬‬ ‫◼‬

‫‪forwardA‬‬
‫وكونو ال ‪ add‬بال ‪ ex‬ف‬
‫رح ناخد القيمه الي جاي‬
‫‪EX sub $4,$1,$5‬‬ ‫‪MEM add $1,$2,$3‬‬
‫من ‪EX/MEM reg‬‬

‫‪Lilas qawasmeh‬‬
Forwarding Conditions
‫ ؟‬active ‫ متى رح يكون‬forward ‫طيب ال‬ ◼

destination ‫ بغير ع قيمة ال‬instruction ‫ بصير لما يكون عنا‬forward ‫هالء ال‬ ◼

‫ ح يتوضح اكتر لقدام خلينا نركز‬lw ‫ (ال‬lw ‫ او‬R-type instruction ‫ يعني‬register


) R-type ‫ع ال‬
destination register ‫ بعتمد ع قيمة ال‬instruction ‫و انو يجي بعديه‬ ◼

‫ رح يعدل ع قيمة ال‬instruction ‫ الي بخلينا نميز انو ال‬control signal ‫طيب شو‬ ◼

‫ ؟؟‬destination register
‫ اال لما بدنا نعدل ع قيمة‬active ‫ الي ما بكون‬control signal ‫ هي ال‬Regwrite ‫ال‬ ◼

destination register ‫ال‬


‫ ما يكون صفر‬destination register ‫طبعا والزم ال‬ ◼

Lilas qawasmeh
Detecting the Need to Forward
: ‫تلخيص للحكي السابق‬

◼ But only if forwarding instruction will write


to a register!
◼ EX/MEM.RegWrite, MEM/WB.RegWrite
◼ And only if Rd for that instruction is not
$zero
◼ EX/MEM.RegisterRd ≠ 0,
MEM/WB.RegisterRd ≠ 0

Lilas qawasmeh
‫‪Forwarding Conditions‬‬
‫طيب تاني شي هو انو يكون ال ‪ instruction‬الي بعده بعتمد ع قيمة ‪destination‬‬ ‫◼‬

‫‪register‬‬
‫وهاد الشي بنعرفه اذا تساوى رقم ال ‪ destination register‬مع رقم ال ‪ rs‬او ‪ rt‬لل‬ ‫◼‬

‫‪ instruction‬التاني‬

‫طيب عرفنا انو ال ‪ forward‬بتصير بين ‪ two instruction‬و انو ال ‪instruction‬‬ ‫◼‬

‫التاني دايما رح يكون بال ‪EX stage‬‬


‫اما ال ‪ instruction‬االول ممكن يكون بال ‪ MEM stage‬او بال ‪WB stage‬‬ ‫◼‬

‫ف ل نعرف ال ‪ forward‬من اي ‪ stage‬جاي رح نقارن قيمة ‪ rs‬و ‪ rt‬الموجودين بال‬ ‫◼‬

‫‪ EX‬مع قيمة ‪ rd‬مره الي بال ‪ MEM‬ومره الي بال ‪WB‬‬


‫وال ‪ Stage‬الي بتساوى فيها بنرجع منها‬ ‫◼‬

‫رح يوضح اكتر بالساليد الجاي‬ ‫◼‬

‫‪Lilas qawasmeh‬‬
Detecting the Need to Forward
: ‫تلخيص للحكي السابق‬

◼ Pass register numbers along pipeline


◼ e.g., ID/EX.RegisterRs = register number for Rs
sitting in ID/EX pipeline register
◼ ALU operand register numbers in EX stage
are given by
◼ ID/EX.RegisterRs, ID/EX.RegisterRt
◼ Data hazards when
Fwd from
1a. EX/MEM.RegisterRd = ID/EX.RegisterRs EX/MEM
pipeline reg
1b. EX/MEM.RegisterRd = ID/EX.RegisterRt
2a. MEM/WB.RegisterRd = ID/EX.RegisterRs Fwd from
MEM/WB
2b. MEM/WB.RegisterRd = ID/EX.RegisterRt pipeline reg
Lilas qawasmeh
‫‪Forwarding Paths‬‬
‫منالحظ من خالل الرسمه انو ال ‪mux‬‬ ‫◼‬

‫رح يختار بين‬


‫‪00‬‬

‫‪01‬‬
‫‪ »m« 00‬في حال ما عنا ‪forward‬‬ ‫◼‬

‫‪10‬‬
‫‪ »u« 01‬في حال كان ال ‪ forward‬من‬ ‫◼‬

‫ال ‪WB stage‬‬


‫‪00‬‬ ‫‪ »x« 10‬في حال كان ال ‪ forward‬من‬ ‫◼‬

‫‪01‬‬
‫ال ‪MEM stage‬‬
‫‪10‬‬

‫و ‪ forwardA‬بتحكم بقيمة ال‬ ‫◼‬

‫‪ forward‬عال ‪rs‬‬
‫او ‪ forwardB‬بتحكم بقيمة ال‬ ‫◼‬

‫‪ forward‬عال ‪rt‬‬

‫يعني ح نكتب شرط ال ‪ forward‬كالتالي‬ ‫◼‬

‫‪Lilas qawasmeh‬‬
‫‪Forwarding Paths‬‬
‫هالء صرنا نعرف انو اذا قيمة ال‬ ‫◼‬

‫‪ Regwrite‬الموجوده بال ‪EX/MEM‬‬


‫‪00‬‬

‫‪01‬‬
‫‪ reg‬يعني ال ‪ instr‬بال ‪ MEM‬بتساوي‬
‫واحد «ما بتساوي صفر» معناتو الي‬
‫‪10‬‬
‫برجع ع ال ‪ forward‬من ال ‪MEM‬‬
‫يعني ح نختار ‪ »10« x‬من ال ‪mux‬‬
‫‪00‬‬

‫‪01‬‬
‫اما اذا كانت ‪ Regwrite‬الموجوده بال‬ ‫◼‬
‫‪10‬‬
‫‪ MEM/WB‬هي الي قيمتها واحد يعني‬
‫ال ‪ instr‬بال ‪ WB‬بتساوي واحد «ما‬
‫بتساوي صفر» معناتو الي برجع ع ال‬
‫‪ forward‬من ال ‪ WB‬يعني ح نختار ‪u‬‬
‫«‪ »01‬من ال ‪mux‬‬

‫واذا كانت ال ‪ regwrite‬بال ‪two‬‬ ‫◼‬

‫‪ stage =0‬معناتو مافي ‪forward‬‬


‫وبنختار ال ‪00‬‬

‫‪Lilas qawasmeh‬‬
‫‪Forwarding Paths‬‬
‫بس بهمنا كمان مع قيمة ال ‪Regwrite‬‬ ‫◼‬

‫انو يكونو ارقام ال ‪ reg‬متساويه ونحدد‬


‫‪00‬‬

‫‪01‬‬
‫شو ال ‪ reg‬الي رح يصير الو ‪forward‬‬

‫‪10‬‬

‫ف اذا كانت قيمة ‪ rd‬الموجوده بال‬ ‫◼‬

‫‪00‬‬
‫‪ EX/MEM‬او بال ‪ MEM/WB‬بتساوي‬
‫قيمة ‪ rs‬بال ‪ID/EX‬‬
‫‪01‬‬

‫‪10‬‬
‫معناها انو ال ‪ ForwardA‬هو ال‬ ‫◼‬

‫‪active‬‬

‫اما اذا كان شي منهم بساوي ‪ rt‬معناتو ال‬ ‫◼‬

‫‪ ForwardB‬هو ال ‪active‬‬

‫بالساليد الجاي بفرجينا الشرط بشكل كامل‬ ‫◼‬

‫‪Lilas qawasmeh‬‬
Forwarding Conditions
: ‫تلخيص للحكي السابق‬
◼ EX hazard
◼ if (EX/MEM.RegWrite and (EX/MEM.RegisterRd ≠ 0)
and (EX/MEM.RegisterRd = ID/EX.RegisterRs))
ForwardA = 10
◼ if (EX/MEM.RegWrite and (EX/MEM.RegisterRd ≠ 0)
and (EX/MEM.RegisterRd = ID/EX.RegisterRt))
ForwardB = 10
◼ MEM hazard
◼ if (MEM/WB.RegWrite and (MEM/WB.RegisterRd ≠ 0)
and (MEM/WB.RegisterRd = ID/EX.RegisterRs))
ForwardA = 01
◼ if (MEM/WB.RegWrite and (MEM/WB.RegisterRd ≠ 0)
and (MEM/WB.RegisterRd = ID/EX.RegisterRt))
ForwardB = 01
Lilas qawasmeh
Forwarding Conditions
: ‫توضيح الشرط‬
◼ EX hazard
◼ if (EX/MEM.RegWrite and (EX/MEM.RegisterRd ≠ 0)
and (EX/MEM.RegisterRd = ID/EX.RegisterRs))
ForwardA = 10

‫ وكانت قيمة‬active ‫ يعني‬1 ‫ بساوي‬EX/MEM ‫ الموجود ب‬RegWrite ‫اذا كان ال‬ ◼

‫ بعدل على قيمة ال‬instr ‫ ال تساوي صفر «هيك يعني عنا‬stage‫ بنفس ال‬Rd
»destination register
‫ الي‬Rs register ‫ » بساوي رقم‬EX/MEM« stage ‫ بهاي ال‬Rd ‫واذا كان رقم ال‬ ◼

‫ بينهم والزم‬dependence ‫» معناتو في‬EX stage ‫ «يعني بال‬ID/EX ‫موجود بال‬


Rs ‫» ل‬10 ‫ «يعني ح اودي ع‬EX/MEM ‫ الموجوده بال‬Rd ‫ لقيمة‬forward ‫اعمل‬
forwardA ‫ يعني ح استخدم‬register

‫والباقين نفس المبداء‬ ◼

Lilas qawasmeh
‫‪Double Data Hazard‬‬
‫◼‬ ‫‪Consider the sequence:‬‬
‫‪add $1,$1,$2‬‬
‫‪add $1,$1,$3‬‬
‫‪add $1,$1,$4‬‬

‫حاله مثل هاي بنسميها ال ‪Double Data Hazard‬‬ ‫◼‬

‫لما تكون ال ‪ add‬الثالثه بال ‪ EX stage‬رح يكون الوضع كالتالي‬ ‫◼‬

‫‪EX stage‬‬ ‫‪MEM stage‬‬ ‫‪WB stage‬‬

‫‪Add$1,$1,$4‬‬ ‫‪add $1,$1,$3‬‬ ‫‪add $1,$1,$2‬‬

‫‪ Rs‬هو ‪$1‬‬ ‫‪ Rd‬هو ‪$1‬‬ ‫‪ Rd‬هو ‪$1‬‬

‫الحظ انو هون بقدر اعمل ‪ forward‬من ال‪ two stage‬النو الشرط الي حطينا بتحقق فيهم التنين‬ ‫◼‬

‫طيب القيمه الصح الي الزم اعمللها ‪ forward‬واوديها لل ‪ EX‬هي القيمه االحدث يعني القيمه‬ ‫◼‬

‫الموجوده بال ‪MEM‬‬


‫بالتالي رح اضيف شرط ع ال ‪ forward‬بال ‪ WB‬وهو انو ما يكون في ‪ forward‬بال ‪MEM‬‬ ‫◼‬
Revised Forwarding Condition
◼ MEM hazard
◼ if (MEM/WB.RegWrite and (MEM/WB.RegisterRd ≠ 0)
and not (EX/MEM.RegWrite and (EX/MEM.RegisterRd ≠ 0)
and (EX/MEM.RegisterRd = ID/EX.RegisterRs))
and (MEM/WB.RegisterRd = ID/EX.RegisterRs))
ForwardA = 01
◼ if (MEM/WB.RegWrite and (MEM/WB.RegisterRd ≠ 0)
and not (EX/MEM.RegWrite and (EX/MEM.RegisterRd ≠ 0)
and (EX/MEM.RegisterRd = ID/EX.RegisterRt))
and (MEM/WB.RegisterRd = ID/EX.RegisterRt))
ForwardB = 01

EX stage ‫ من‬forward ‫ الزم ما يكون في‬MEM stage ‫ من ال‬forward ‫لحتى يصير في‬ ◼

EX ‫ من‬forward ‫ ف ضفنا للشرط نفي حصول ال‬register ‫لنفس ال‬


Lilas qawasmeh
Datapath with Forwarding
‫ بعد التعديل‬datapath ‫شكل ال‬

Lilas qawasmeh
‫‪Load-Use Hazard Detection‬‬
‫خلينا نشوف شو كيف ح نتعامل مع ال ‪ data hazard‬بحالة ال ”‪load “lw‬‬ ‫◼‬

‫لو عنا المثال التالي‬ ‫◼‬

‫◼‬ ‫)‪Lw $1 , 8($2‬‬


‫◼‬ ‫‪Add $3 , $1 , $4‬‬

‫لو بدنا نطبق عليها نفس ‪ Forward‬الي عملنا قبل شوفو شو الي ح يصير‬ ‫◼‬

‫‪EX stage‬‬ ‫‪MEM stage‬‬

‫‪Add $3,$1,$4‬‬ ‫)‪Lw $1,8($2‬‬

‫رح تقراء قيمه‬ ‫ناتج ال ‪ lw‬لسا‬


‫غلط لل ‪$1‬‬ ‫ما جهز‬

‫بنعرف انو ناتج ال ‪ lw‬بجهز بعد نهاية ال ‪MEM stage‬‬ ‫◼‬

‫ف لما تكون ال ‪ add‬بال ‪ EX‬ال ‪ lw‬رح تكون بال ‪ MEM‬ف ما رح تكون قيمة ال ‪$1‬‬ ‫◼‬
‫جاهزه بالتالي الزم نستخدم ال ‪bubbles‬‬
‫‪Lilas qawasmeh‬‬ ‫خلينا نشوف شو ح يصير بكل ‪cycle‬‬ ‫◼‬
Cycle 1 :

lw ‫ لل‬fetch ‫بنعمل‬ ◼

Fetch Lw $1,8($2)

Lilas qawasmeh
Cycle 2 :
‫ ما عنا اي مشاكل لهالء‬,add ‫ لل‬fetch ‫ بنعمل‬, next stage “ID” ‫ ح تنتقل لل‬lw ‫ال‬ ◼

Fetch Add $3,$1,$4 Decode Lw $1,8($2)

Lilas qawasmeh
Cycle 3 :

‫ و ح بنعمل‬ID stage ‫ ح تنتقل لل‬add ‫ و ال‬, next stage “EX” ‫ ح تنتقل لل‬lw ‫ال‬ ◼

next instr ‫ لل‬fetch


$1 ‫ رح تقراء قيمه غلط لل‬add ‫هون ال‬ ◼

Fetch next inst Decode Add $3,$1,$4 EX Lw $1,8($2)

Lilas qawasmeh
‫‪Cycle 4 :‬‬
‫ال ‪ lw‬ح تنتقل ل ”‪ ”MEM‬بس ما بدي ال ‪ add‬تتحرك لل ”‪ next stage ”EX‬وبدي‬ ‫◼‬

‫احط مكانه ‪bubble‬‬


‫بالتالي بدي ال ‪ next inst‬يضل مكانه وما اعمل ‪ fetch‬لل ‪ inst‬الي بعده ف رح نضيف‬ ‫◼‬

‫‪ control‬لل ‪ pc‬واسمه ‪ pcwrite‬ف بحال ح يصير عنا ‪ bubble‬رح اعملو ‪ 0‬بحيث‬


‫يحافظ ع نفس قيمة ال ‪ pc‬وع ال ‪ inst‬الي في‬
‫شو يعني اضيف ‪ bubble‬يعني كل ال ‪ control‬رح يصيرو صفر‬ ‫◼‬

‫‪Fetch next inst‬‬ ‫‪Decode Add $3,$1,$4‬‬ ‫‪bubble‬‬ ‫)‪MEM Lw $1,8($2‬‬

‫‪Lilas qawasmeh‬‬
Cycle 4 :
‫ وهيك للباقي‬EX ‫ ح تنتقل لل‬add ‫” و ال‬WB” ‫ ح تنتقل ل‬lw ‫ال‬ ◼

‫ بنفس االليه السابقه‬add ‫ وال‬lw ‫ بين ال‬forward ‫بعدين ع يصير‬ ◼

bubble
fetch ID next inst EX Add $3,$1,$4 WB Lw $1,8($2)

Lilas
qawasmeh
Datapath with Hazard Detection
‫بتحدد اذا ح يصير‬ ‫ رح‬bubble ‫بحال عنا‬
‫او الء‬bubble ‫تعمل كل ال‬ ‫ بعد التعديل‬datapath ‫هيك ح يصير ال‬ ◼
control=0

Lilas qawasmeh
‫‪Load-Use Hazard Detection‬‬
‫طيب شو الشي الي بخليني اعرف انو عندي ‪lw‬؟‬ ‫◼‬

‫ال ‪ MemRead‬لما يكون ‪ , 1‬حيث انو ال ‪ MemRead‬ما بتكون واحد اال‬ ‫◼‬
‫بحالة ال ‪ lw‬النها الحاله الوحيده الي بقراء فيها من ال ‪memory‬‬

‫بالتالي في اعبر عن الشرط كالتالي ‪:‬‬ ‫◼‬

‫◼‬ ‫‪Load-use hazard when‬‬


‫‪◼ ID/EX.MemRead and‬‬
‫‪((ID/EX.RegisterRt = IF/ID.RegisterRs) or‬‬
‫))‪(ID/EX.RegisterRt = IF/ID.RegisterRt‬‬

‫بال ثلث ساليد التاليه عم يشرح نفس الفكره بس ع ال‪ Multi-Cycle‬بدل من ال‬ ‫◼‬
‫‪single-Cycle‬‬

‫‪Lilas qawasmeh‬‬
Load-Use Data Hazard

Need to stall
for one cycle

Lilas qawasmeh
Stall/Bubble in the Pipeline

Stall inserted
here

Lilas qawasmeh
Stall/Bubble in the Pipeline

Or, more
accurately…
Lilas qawasmeh
Datapath with Hazard Detection
‫ بحيث رح يسمح لل‬bubble ‫ اذا ما عنا‬active ‫ رح يكون‬IF/IDWrite Control
IF/ID register ‫ يخزن ع ال‬next instruction ‫ بعد التعديل‬datapath ‫شكل ال‬
‫ بحيث ما رح يسمح انو نغير على ال‬dicactive ‫ رح يكون‬bubble ‫اما اذا كان عنا‬
IF/ID register
next cycle ‫ الي معو لل‬instruction ‫ليحافظ على ال‬

PC/Write
‫ رح‬Control
‫ اذا‬active ‫يكون‬
bubble ‫ما عنا‬
‫بحيث رح يسمح‬
‫ يقراء قيمة‬pc ‫لل‬
next ‫ال‬
instruction
‫اما اذا كان عنا‬
‫ رح‬bubble
‫يكون‬
disactive
‫بحيث ما يقراء‬
instruction
‫جديد ويحافظ ع‬
‫قيمة ال‬
instruction
‫الي معو لل‬
next cycle Lilas qawasmeh
‫‪Branch Hazards‬‬
‫حكينا عن ال ‪Branch Hazards‬‬ ‫◼‬

‫وحكينا انو الحل من خالل انو نحدد قيمة ال‬ ‫◼‬

‫رح نضيف‬
‫رح نضيف‬ ‫‪ Branch‬بال ‪ID stage‬‬
‫‪ xnor‬و ‪and‬‬
‫‪ adder‬يحسبلنا‬
‫بعملو ك عملية‬
‫ال ‪target‬‬
‫مقارنه «هل‬
‫‪address‬‬
‫يساوي »‬
‫طيب كيف ح نعمل هاد الشي ؟‬ ‫◼‬

‫هيك بصفي عنا بس ‪ one cycle‬ضايعه بحيث‬ ‫◼‬

‫انو استنى ليخلص ال ‪ branch‬ما ال ‪ID stage‬‬


‫العرف شو ال ‪next instruction‬‬
‫ف رح نحتاج نحط ‪ bubble‬بعد ال ‪branch‬‬ ‫◼‬

‫‪Lilas qawasmeh‬‬
§4.8 Control Hazards
Branch Hazards
◼ If branch outcome determined in MEM

‫ بال‬beq ‫هون بحكيلنا انو لو ضل تحديد قيمة ال‬


‫ بقدر اعرف‬3cycle ‫ و ف بعد‬MEM stage
‫ او الء ع فرض كانت‬branch taken ‫اذا ال‬
‫ غلط رح‬3 instruction ‫ رح يكون عنا‬taken
‫يصفرهم ويبلش بالصح‬

Flush these
instructions
(Set control
values to 0)

PC

Lilas qawasmeh
Reducing Branch Delay
◼ Move hardware to determine outcome to ID
stage
◼ Target address adder
◼ Register comparator
◼ Example: branch taken
36: sub $10, $4, $8 branch ‫اما بعد التعديل ونقل عمليات ال‬
40: beq $1, $3, 7 ‫لل‬
44: and $12, $2, $5 bed ‫لو اجينا لهاد المثال ف لما اصل ال‬
48: or $13, $2, $6 ‫ وال‬and ‫الزم احدد شو الي ح يتنفذ «ال‬
» lw ‫ال‬
52: add $14, $4, $2
56: slt $15, $6, $7 ‫خلينا نشوف شو الي رح يصير‬
...
72: lw $4, 50($7)

Lilas qawasmeh
Reducing Branch Delay
◼ Move hardware to determine outcome to ID
stage
◼ Target address adder
◼ Register comparator
◼ Example: branch taken
36: sub $10, $4, $8 branch ‫اما بعد التعديل ونقل عمليات ال‬
40: beq $1, $3, 7 ID stage ‫لل‬
44: and $12, $2, $5 bed ‫لو اجينا لهاد المثال ف لما اصل ال‬
48: or $13, $2, $6 ‫ وال‬and ‫الزم احدد شو الي ح يتنفذ «ال‬
52: add $14, $4, $2 » lw ‫ال‬
56: slt $15, $6, $7
‫خلينا نشوف شو الي رح يصير‬
...
72: lw $4, 50($7)

Lilas qawasmeh
‫‪Example: Branch Taken‬‬
‫رح نعمل ‪ fetch‬لل ‪inst‬‬ ‫هون ح يحدد قيمة ال‬
‫الي بعده لحتى تعرف شو‬ ‫‪ target‬و قيمة ال‬
‫الصح بنقرر نكمل او نغير‬ ‫‪branch‬‬

‫‪Lilas qawasmeh‬‬
Example: Branch Taken
‫ لل‬fetch ‫رح يعمل‬
‫رح نحط هون‬ beq ‫رح تنتقل ال‬ ‫في حال كانت ال‬
‫ الي عند ال‬inst ‫ ورح‬next stage‫لل‬ taken» beq
bubble
lw ‫ وهو ال‬target ‫تكون قيمتها جاهزه‬

Lilas qawasmeh
‫‪Data Hazards for Branches‬‬
‫عنا مشكله تانيه وهي اذا صار عنا ‪ data hazards‬مع ال ‪branch‬‬ ‫◼‬

‫المشكله انو نحنا صرنا بدنا قيم ال ‪ register‬بال ‪ ID stage‬بدل ال ‪ EX‬بالتالي بدنا‬ ‫◼‬
‫القيم ل ‪ Stage‬قبل يعني قبل ب ‪cycle‬‬

‫رح يكون نفس التعامل مع ال ‪ data hazard‬العادي بس بنحتاج ‪ cycle‬زياده‬ ‫◼‬

‫خلينا نشوف بعض االمثله‬ ‫◼‬

‫‪Lilas qawasmeh‬‬
Data Hazards for Branches
‫ ف الموضوع بنحل بال‬Data Hazards ‫ او اكتر عنا‬inst ‫ ب‬beq ‫اذا كان قبل ال‬ ◼

‫ وال‬data hazard ‫» بين ال‬instruction« cycle ‫ مباشره النو في فرق‬forward


branch
‫ جاهزه‬add ‫ الي بال‬Rd ‫ رح تكون قيمة ال‬ID stage ‫ تصل ال‬beq ‫يعني لما ال‬ ◼

add $1, $2, $3 IF ID EX MEM WB

add $4, $5, $6 IF ID EX MEM WB

… IF ID EX MEM WB

beq $1, $4, target IF ID EX MEM WB

◼ Can resolve using forwarding

Lilas qawasmeh
Data Hazards for Branches
R- ‫ وكان من نوع ال‬Data Hazards ‫ مباشره بينهم‬brq ‫ الي قبل ال‬instr ‫اما اذا كان ال‬ ◼

one cycle ‫ ف الزم نستنى‬type


EX ‫ تكون كملت ال‬add ‫لحتى ال‬ ◼

$4 ‫ لحتى تجهز قيمة‬ID stage ‫ تستنى بال‬beq ‫ف رح نخلي ال‬ ◼

bubble ‫من خليها تستنى من خالل ال‬ ◼

lw $1, addr IF ID EX MEM WB

add $4, $5, $6 IF ID EX MEM WB

beq stalled IF ID

beq $1, $4, target ID EX MEM WB

Lilas qawasmeh
Data Hazards for Branches
load‫ وكان من نوع ال‬Data Hazards ‫ مباشره بينهم‬brq ‫ الي قبل ال‬instr ‫اما اذا كان ال‬ ◼

two cycle ‫ف الزم نستنى‬


‫ جاهزه‬$1 ‫ وتكون قيمة‬MEM stage ‫ تكمل ال‬lw ‫لحتى ال‬ ◼

lw $1, addr IF ID EX MEM WB

beq stalled IF ID

beq stalled ID

beq $1, $0, target ID EX MEM WB

Lilas qawasmeh
‫‪Branch Prediction‬‬
‫ساليد مكرر بس ارجعوا اتذكروا الي حكينا هون‬

‫‪ < branch prediction‬بنحاول نحزر وين ال ‪ branch‬رح توديني اذا حزرت‬ ‫◼‬
‫صح بكمل وبكون حققت ال ‪ full speed‬واذا حزرت غلط بحذف الي عملته‬
‫وببلش بالصح‬

‫غالبا بس اجي احزر بفكر كالتالي ‪:‬‬ ‫◼‬

‫لو كان الي عنا ‪ while‬بنكون رح نكررها ‪ n‬من المرات ف بنفرض انو ال‬ ‫◼‬
‫‪ branch‬دائما ‪ taken‬النو رح تزبط ‪ n‬من المرات ومره وحده ما رح تزبط‬

‫اما بأي كود عادي ف غالبا ال ‪ branch‬رح تكون ‪ not taken‬النو ما في معنى‬ ‫◼‬
‫من انو اكتب كود ودائما اقفز عنو ‪ ,‬هي بتصير ‪ taken‬بحاالت معينه مثل ال‬
‫‪ error‬او ال ‪special case‬‬

‫هاد الحكي مش دايما صح النو نحنا عم نتحزر‬ ‫◼‬

‫‪Lilas qawasmeh‬‬
‫‪Branch Prediction‬‬

‫يعني فينا نحكي اذا كان ال ‪ branch‬بعمل ‪ jump‬لالعلى معناها غالبا رح يكون‬ ‫◼‬
‫‪taken‬‬

‫اما اذا كان بعمل ‪ jump‬لالسفل ف غالبا رح يكون ‪not taken‬‬ ‫◼‬

‫‪Lilas qawasmeh‬‬
‫‪More-Realistic Branch Prediction‬‬
‫ساليد مكرر بس ارجعوا اتذكروا الي حكينا هون‬

‫عنا نوعين من ال ‪: predication‬‬ ‫◼‬

‫◼‬ ‫‪Static branch prediction‬‬


‫هون بحط فرض لل ‪ branch‬اما ‪ taken‬او ‪ not taken‬ع حسب االشي الي غالبا ح‬ ‫◼‬

‫يصير متل ما حكينا بالساليد السابق‬


‫و ح نضل نمشي ع الفرض الي حكينا لكل الحاالت « يعني الفرض ما بتغير »‬ ‫◼‬

‫◼‬ ‫‪Dynamic branch prediction‬‬


‫هون اذا حزرت صح بكمل واذا حزرت غلط رح نعدل الغلط ورح نعدل الفرض للمرات‬ ‫◼‬

‫القادمه‬
‫يعني اذا الفرض ‪ taken‬والكود طلع ‪ not taken‬رح نخلي الفرض للمره الجاي ‪not taken‬‬ ‫◼‬

‫‪Lilas qawasmeh‬‬
‫‪Branch Prediction‬‬
‫لو فرضنا قيم ال ‪ brach‬طلعة كالتالي ‪:‬‬ ‫◼‬

‫لو بنحل ع ال ‪ Static branch prediction‬وكان الفرض ‪taken‬‬ ‫◼‬

‫◼‬ ‫‪T T T T NT T T‬‬


‫◼‬ ‫هاي القيم الي‬
‫نتجت‬

‫هون بفرجيني نتيجت توقعنا‬


‫لما فرضنا انها ‪ taken‬رح‬
‫تكون ‪ 6‬مرات صح ومره‬
‫غلط وما بنعمل اي تغير ع‬
‫الفرض النو بال ‪static‬‬

‫‪Lilas qawasmeh‬‬
Dynamic Branch Prediction
Dynamic Branch Prediction ‫عنا نوعين من ال‬ ◼

One bit Prediction .1

Two bit Prediction .2

‫ » بتحكيلي انو اذا توقعت غلط رح اغير الفرض مباشره‬One bit Prediction ‫نبلش بال‬ ◼

: ‫الية عملها كالتالي‬ ◼

NT
Not
Taken
Taken
T

NT ‫ رح نغير الفرض ل‬NT ‫ اما اذا اجى‬T ‫ رح نضل ع ال‬T ‫ واجى‬T ‫لو كان فرضنا‬ ◼

Lilas qawasmeh
‫‪Branch Prediction‬‬
‫لو فرضنا قيم ال ‪ brach‬طلعة كالتالي ‪:‬‬ ‫◼‬

‫لو بنحل ع ال ‪ One bit dynamic branch prediction‬وكان الفرض ‪taken‬‬ ‫◼‬

‫◼‬ ‫‪T T T T NT T T‬‬


‫◼‬ ‫هاي القيم الي‬
‫نتجت‬

‫هون كان فرضنا ‪T‬‬ ‫هون صار فرضنا‬


‫ونتج ‪ NT‬يعني غلطنا‬ ‫‪ NT‬ونتج ‪ T‬يعني‬
‫بالفرض ف رح نغير‬ ‫غلطنا ف رح نغير‬
‫هون بفرجيني نتيجت توقعنا‬
‫الفرض ل ‪NT‬‬ ‫الفرض ل ‪T‬‬
‫لما فرضنا انها ‪ taken‬رح‬
‫تكون ‪ 5‬مرات صح ومرتين‬
‫غلط‬
‫هاد النوع مشكلته انو بغير الفرض مباشره بعد اول غلط‬ ‫◼‬

‫‪Lilas qawasmeh‬‬
‫‪1-Bit Predictor: Shortcoming‬‬
‫لو كان عنا ‪ nested loob‬واستخدمنا ال ‪ 1-Bit Predictor‬الي رح يصير كالتالي ‪:‬‬ ‫◼‬

‫… ‪outer:‬‬
‫…‬
‫… ‪inner:‬‬
‫…‬
‫‪beq …, …, inner‬‬
‫…‬
‫‪beq …, …, outer‬‬

‫لما ينفذ ال ‪ inner‬اول مره بضل ياخد ‪ T‬لحتى يكملها الول مره وبس يغلط ح‬ ‫◼‬

‫يغيرها مباشره ل ‪ NT‬وح يكمل بال ‪ outer‬الي ح ترجع اتدخلني ع ال‬


‫‪ inner‬بس ح يكون الفرض صار ‪ NT‬ونحنا رجعنا لل ‪ T‬ف ح يغلط كمان‬
‫مره بعدين يرجع يعدل‬
‫ممكن نحل هاي المشكله بال ‪2-Bit Predictor‬‬ ‫◼‬

‫‪Lilas qawasmeh‬‬
‫‪2-Bit Predictor‬‬
‫الية عمل ‪: 2-Bit Predictor‬‬ ‫◼‬

‫غالبا ما رح يغير الفرض االساسي اال بس اغلط مرتين‬ ‫◼‬

‫بنبلش الفرض من ال ‪ strong taken‬اذا طلع ‪ taken‬رح اضل ع نفس الفرض اما ازا غلط‬ ‫◼‬

‫الول مره وطلع ‪ not taken‬ف رح يضل فرضنا ‪ taken‬بس ح يصير ‪week‬‬
‫هالء اذا رجع طلع معنا ‪ not taken‬يعني غلطنا كمان مره رح نعدل ع الفرض ويصير ‪not‬‬ ‫◼‬

‫‪ taken‬بس اذا الي طلع ‪ taken‬ف رح نضل ‪ taken‬بس ح يصير ‪ strong‬ط‬


‫بالتالي ما ح يغير اال ليغلط مرتين‬ ‫◼‬

‫بس في حاله ممكن يغير بغلط واحد وهي اذا غيرت الفرض وصرت ع ال ‪week not taken‬‬ ‫◼‬
‫وبعديه اجى ‪ taken‬ف رح يغير لل ‪taken‬‬

‫فينا نحكي انو اذا كان فرضنا ‪ strong‬بدي غلطين ليغيروا بس اذا كان ‪ week‬بتغير من اول‬ ‫◼‬

‫غلط‬

‫‪Lilas qawasmeh‬‬
2-Bit Predictor
: 2-Bit Predictor ‫توضيح الية عمل‬ ◼

strong week

strong week

Lilas qawasmeh
‫‪Branch Prediction‬‬
‫لو فرضنا قيم ال ‪ brach‬طلعة كالتالي ‪:‬‬ ‫◼‬

‫لو بنحل ع ال ‪ two bit dynamic branch prediction‬وكان الفرض ‪taken‬‬ ‫◼‬

‫◼‬ ‫‪T T T T NT T T‬‬


‫◼‬ ‫هاي القيم الي‬
‫نتجت‬

‫هون كان فرضنا ‪T‬‬ ‫عنا ‪week taken‬‬


‫ونتج ‪ NT‬يعني‬ ‫وطلع ‪ taken‬يعني‬
‫غلطنا بالفرض‬ ‫ح نرجع لل ‪strong‬‬
‫هون بفرجيني نتيجت توقعنا‬
‫بس نحنا عنا ال ‪T‬‬ ‫‪taken‬‬
‫لما فرضنا انها ‪ taken‬رح‬
‫»‪ Strong‬ف رح‬
‫تكون ‪ 6‬مرات صح ومره‬
‫تصير ال ‪T‬‬
‫غلط‬
‫»‪Week‬‬
‫يعني ح يضل‬
‫الفرض ‪taken‬‬ ‫‪Lilas qawasmeh‬‬
‫‪Branch Prediction‬‬
‫متذكرين هاد الساليد ؟‬
‫هالء بدنا نشوف كيف ممكن نحل هاي المشاكل‬

‫بس رح يضل عنا مشكلتين‬ ‫◼‬

‫االولى ‪ :‬اذا كنت بدي احزر انها ‪ taken‬وانا بال ‪ ID stage‬ما بعرف شو ال ‪target‬‬ ‫◼‬
‫‪ address‬اال لتخلص ال ‪stage‬‬

‫التانيه ‪ :‬كيف بدي اعرف انو ال ‪ instruction‬الي عندي ‪ branch‬وانا ب ‪ stage‬ال‬ ‫◼‬
‫‪ fetch‬؟‬
‫لحتى اتحزر الزم اكون متاكد انو انا عندي ‪ branch‬وانا بال ‪fetch stage‬‬ ‫◼‬

‫ونوع ال ‪ instruction‬بعرفه بعد نهاية هاي ال ‪stage‬‬ ‫◼‬

‫رح نعرف كيف ممكن نحلهم باخر ال ‪chapter‬‬ ‫◼‬

‫‪Lilas qawasmeh‬‬
Branch Prediction buffer
‫ ال‬stage ‫ وانا ب‬branch ‫ الي عندي‬instruction ‫كيف بدي اعرف انو ال‬ ◼
‫ ؟‬fetch

‫ يعني ما عندي اي معلومه عنو غير ال‬IF stage ‫ بال‬instruction ‫لما يكون ال‬ ◼
» ‫ الو‬address ‫ «ال‬pc

Branch Prediction buffer ‫بنضيف ال‬ ◼

index ‫ الها‬small memory ‫هي عباره عن‬ ◼

‫ الو‬address ‫ معين باخد جزء من ال‬instruction ‫ ل‬fetch ‫لما بدي اعمل‬ ◼


‫ ف بشوف قيمة الي مخزنه بال‬buffer ‫ لل‬index ‫» ك‬bit ‫«عدد معين من ال‬
‫ او الء وشو ال‬branch ‫ هو‬instruction ‫ بحيث بحتوي على اذ كان ال‬buffer
not taken ‫ او‬taken ‫ الو هل‬Prediction
next instruction ‫ بقدر ابلش احزر شو ال‬IF stage ‫هيك وانا بال‬ ◼

‫ اال بال‬branch ‫ ما رح اعرف انو عنا‬Branch Prediction buffer ‫وبدون ال‬ ◼


ID stage
‫ ممكن يكون صح او غلط‬Prediction ‫طبعا ال‬ ◼

Branch Prediction
buffer Lilas qawasmeh
Branch target buffer
‫» كيف اعرف ال‬taken« prediction ‫ وكان ال‬branch ‫طيب اعرفت انو‬ ◼
‫ ؟‬target address
‫ ويحسبلي ياه‬ID stage ‫الزم نستنى ليكمل ال‬ ◼

:Branch target buffer ‫طيب بدل ما نستنى فينا نضيف ال‬ ◼

‫ لل‬target address ‫ بتحتوي على ال‬small memory ‫هي عباره عن كمان‬ ◼


branch
target ‫ رح ابحث فيها عن ال‬taken ‫ و انو‬branch ‫بس يحددلي انو عندي‬ ◼
‫ مباشره بلى ما استنى ال‬next cycle ‫ بال‬fetch ‫ مشان اعملو‬address
ID stage ‫ يكمل ال‬branch

Branch target buffer


Lilas qawasmeh
‫‪Branch target buffer‬‬
‫طيب شو االليه ال ‪ Branch target buffer‬بتخزن فيها ال ‪ target‬وشو ال‬ ‫◼‬
‫‪ index‬الي بدي استخدمه البحث عن ال ‪ target‬بال ‪buffer‬؟‬

‫ال ‪ Branch target buffer‬هي عباره عن ‪ cache memory‬رح نتعرف‬ ‫◼‬


‫عليها بتشابتر ‪ 5‬بس ك فكره سريعه عنها‬
‫رح ناخد جزء من ‪ address‬ال ‪ instruction‬ح يكون ك ‪ index‬لل ‪buffer‬‬ ‫◼‬

‫ح ندور ع هاد ال ‪ index‬بال ‪ buffer‬ونشوف شو قيمة ال ‪ target‬الو‬ ‫◼‬

‫طيب كونو ما اخدنا ال ‪ address‬لل ‪ instruction‬كامل ‪ ,‬كيف اتاكد انو هاد نفس‬ ‫◼‬
‫ال ‪ instruction‬الي عندي ؟‬
‫بال ‪ buffer‬في جزء بمثل ال ‪ tag‬وهو بحتوي على باقي ال ‪ bit‬اللي لل‬ ‫◼‬
‫‪ address‬ف بس االقي ال ‪ index‬رح اقارن هل ال ‪ tag‬الي في نفس تكملة ال‬
‫‪ address‬عندي‬
‫اذا اه رح اكون عرفت ال ‪ target‬لل ‪ instruction‬الي معي‬ ‫◼‬

‫واذا الء ممكن يكون مش ‪ branch‬او ال ‪ target‬مش موجود‬ ‫◼‬

‫‪Branch target buffer‬‬


‫‪Lilas qawasmeh‬‬
Branch buffer
‫ بعدين ارجعولو‬5 ‫ من تشابتر‬cache ‫اذا الموضوع مش كتير واضح ادرسو ال‬ ◼

IF ‫ وانا بال‬Branch Prediction buffer ‫بس الفكره الي بتهمنا انو اذا عندي‬ ◼
next instruction ‫بقدر ابلش احزر شو ال‬
‫ اال بال‬branch ‫ ما رح اعرف انو عنا‬Branch Prediction buffer ‫وبدون ال‬ ◼
ID stage

‫ ف وانا بال‬prediction taken ‫ وكان ال‬Branch target buffer ‫واذا عندي‬ ◼


‫ رح اعملو‬next cycle ‫ ف بال‬branch ‫ لل‬target ‫ بقدر اعرف ال‬IF stage
»cycle ‫ مباشره «ما بستنى وال‬fetch
branch ‫ ف حتى لو عرفت انو عندي‬Branch target buffer ‫واذا ما عندي‬ ◼
‫ ف الزم استنى‬branch ‫ لل‬target ‫ ما بقدر اعرف ال‬prediction taken ‫وال‬
target ‫ ويحسب ال‬ID stage ‫ ال‬branch ‫ ليكمل ال‬one cycle

Branch target buffer


Lilas qawasmeh
‫وهيك خلصنا ‪Ch4‬‬

‫مع امنياتي للجميع بالتوفيق‬

‫ما تنسوني من دعواتكم‬

‫”ليالس قواسمه“‬

You might also like