Professional Documents
Culture Documents
CH4 2
CH4 2
pipelining
Performance Issues
◼ اعرفنا انو ال full pathبتضمن نعمل :
◼ fetch & decoding & read/write register &load/store
Lilas qawasmeh
Performance Issues
بضل عنا مشكله انو لما بدي اعمل jumpمثال رح انجبر استنى وقت ◼
وانو بالوقت الي انا بعمل في fetchمثال بكون شغاله ع ال memory ◼
Lilas qawasmeh
§4.5 An Overview of Pipelining
Pipelining Analogy
خلينا ناخد مثال من شي عملي بحياتنا لنفهم ◼
الفكره
ح نحكي عن الغسيل وهو بتضمن اربع عمليات ◼
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 طيب لو كررناها ◼
◼ 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 رح نفرض كل ◼
اليstages كم رح يحتاج وقت حسب الinstruction طيب خلينا نشوف كل نوع من ال ◼
بحتاجها
lw اكتر اشي بحتاج وقت هو ال ◼
Lilas qawasmeh
Pipeline Performance
800ps رح تحتاجcycle كلfullpath كان ع الdesign لو حكينا ال ◼
Lilas qawasmeh
Pipeline Performance
طيب لو عدلنا ليصير ع ال Pipelineمدة كل ال stageالزم يكونو ◼
Lilas qawasmeh
Pipeline Performance
طيب لو بدنا نحسب ال speedup ◼
تأثيرها قليل
ح يطلع تقريبا ال 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 ◼
رح نحكي عن هاي المشاكل بتفصيل اكتر ونالقي حلول بالساليد الجاي ,ف اذا مش كتير
واضحه مش مشكله
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بتنتج ◼
زي هاد المثال ال subبتحتاج قيمة ال s0وبنالحظ انو ال addبتغير ع قيمة ال s0 ◼
قبل ما نبلش بالحل ولحتى نفهمه في شغله مهمه الزم نعرفها ◼
Lilas qawasmeh
Data Hazards
اول حل عنا وهو انو نستنى فتره بين ال instructionلحتى تجهز قيمة s0وتتخزن ◼
ال bubbleبتاخرلي ال instructionالي بدي ياه لحتى اكون جاهز استخدمه ◼
ال codeالي بدي انفذه يعني عم اضيع وقت بلى ما اعمل شي ليجهز الي بدي ياه
ال dataالي بدي ياها من ال addبتكون جاهزه بال WB Stageبحيث انو بالنص ◼
االول بعمللها writeوبالنص التاني بتكون جاهزه وبقدر اعمللها readبشكل صحيح
بالتالي الزم ال ID stageلل subما تبداء قبل ما اصل ال WB Stageبال add ◼
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
الفكره الي عنا انو قيمة ال 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 ◼
بالتالي الحل الي ضل عنا انو نستنى cycleلحتى يكون قراء القيمه من ال memory ◼
solution
طريقة ال recodingوهي انو اعيد ترتيب ال codeاذا بقدر بطريقه انو ااخر ال ❑
Beq $1,$2,label
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
Prediction
incorrect
اذا كان الفرض غلط
رح نعمل الي فرضنا
bubbleيعني ح نصفر كل
ال controlالو بحيث ما
يأثر ع ال codeوبعدين رح
نبداء بالصح
ف رح نضيع بس one
cycle
Lilas qawasmeh
More-Realistic Branch Prediction
عنا نوعين من ال : predication ◼
القادمه
يعني اذا الفرض takenوالكود طلع not takenرح نخلي الفرض للمره الجاي not taken ◼
Lilas qawasmeh
Branch Prediction
بس رح يضل عنا مشكلتين ◼
االولى :اذا كنت بدي احزر انها takenوانا بال ID stageما بعرف شو ال target ◼
addressاال لتخلص ال stage
التانيه :كيف بدي اعرف انو ال instructionالي عندي branchوانا ب stageال ◼
fetch؟
لحتى اتحزر الزم اكون متاكد انو انا عندي branchوانا بال fetch stage ◼
Lilas qawasmeh
Pipeline Summary
The BIG Picture
MEM
Right-to-left
flow leads to WB
hazards
Lilas qawasmeh
Pipeline registers
◼ Need registers between stages
مشان نخزن في المعلومات اللي بتلزم الstages بين الregister بنحتاج يكون عنا ◼
Pipeline
registers Lilas qawasmeh
Pipeline Operation
وحدهcycle خاللdatapath
◼ “multi-clock-cycle” diagram
cycle خالل مجموعه من الinstruction توضيح شو ح يصير لل ◼
Lilas qawasmeh
We’ll look at “single-clock-cycle”
diagrams for load & store
Lilas qawasmeh
IF for Load, Store, …
instruction للfetch » رح نعملIF “fetch” stage بال ◼
Target address
offset والregister قيم ال
Lilas qawasmeh
MEM for Load
target قيمة الmemory » رح نقراء من الMEM “memory” stage بال ◼
address
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 واكتب ع ال
reg الموجوده بالwrite data وياخد الaddress رح يحسب الEX stage بال ◼
معو
next stage لهيك باخدها معي ع الwrite data ف بنالحظ هون انو الي بهمني هو ◼
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)
الي حكينا عنها وحكينا انو فيناdata hazard هالء بدنا نحل مشكلة ال ◼
Lilas qawasmeh
Dependencies & Forwarding
Lilas qawasmeh
مثال : ◼
Lilas qawasmeh
Cycle 1 :
Lilas qawasmeh
Cycle 2 :
ما عنا اي مشاكل لهالء,sub للfetch بنعمل, next stage “ID” ح تنتقل للadd ال ◼
Lilas qawasmeh
Cycle 3 :
و ح بنعملID stage ح تنتقل للsub و ال, next stage “EX” ح تنتقل للadd ال ◼
and للfetch
$1 رح تقراء قيمه غلط للsub هون ال ◼
Lilas qawasmeh
Cycle 4 :
ال addح تنتقل ل” , ”MEMو ال subح تنتقل لل ” “EXوال andح تنتقل لل ” “IDو ◼
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 ◼
fetch or EX and $6,$7,$1 MEM sub $4,$1,$5 WB add
$1,$2,$3
Lilas qawasmeh
هالء عرفنا وين ال data hazardصارت تعو نحلها ◼
Lilas qawasmeh
Cycle 4 :
اما مكان القيمه الي ح ينعمللها forwardح تكون اما بال EX/MEM regاو بال ◼
MEM/WB reg
ف رح نضيف two muxعند كل inputلل ALUوكل muxرح يختار بين 3قيم :
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 هالء ال ◼
رح يعدل ع قيمة الinstruction الي بخلينا نميز انو الcontrol signal طيب شو ◼
؟؟destination register
اال لما بدنا نعدل ع قيمةactive الي ما بكونcontrol signal هي الRegwrite ال ◼
Lilas qawasmeh
Detecting the Need to Forward
: تلخيص للحكي السابق
Lilas qawasmeh
Forwarding Conditions
طيب تاني شي هو انو يكون ال instructionالي بعده بعتمد ع قيمة destination ◼
register
وهاد الشي بنعرفه اذا تساوى رقم ال destination registerمع رقم ال rsاو rtلل ◼
instructionالتاني
طيب عرفنا انو ال forwardبتصير بين two instructionو انو ال instruction ◼
Lilas qawasmeh
Detecting the Need to Forward
: تلخيص للحكي السابق
01
»m« 00في حال ما عنا forward ◼
10
»u« 01في حال كان ال forwardمن ◼
01
ال MEM stage
10
forwardعال rs
او forwardBبتحكم بقيمة ال ◼
forwardعال rt
Lilas qawasmeh
Forwarding Paths
هالء صرنا نعرف انو اذا قيمة ال ◼
01
regيعني ال instrبال MEMبتساوي
واحد «ما بتساوي صفر» معناتو الي
10
برجع ع ال forwardمن ال MEM
يعني ح نختار »10« xمن ال mux
00
01
اما اذا كانت Regwriteالموجوده بال ◼
10
MEM/WBهي الي قيمتها واحد يعني
ال instrبال WBبتساوي واحد «ما
بتساوي صفر» معناتو الي برجع ع ال
forwardمن ال WBيعني ح نختار u
« »01من ال mux
Lilas qawasmeh
Forwarding Paths
بس بهمنا كمان مع قيمة ال Regwrite ◼
01
شو ال regالي رح يصير الو forward
10
00
EX/MEMاو بال MEM/WBبتساوي
قيمة rsبال ID/EX
01
10
معناها انو ال ForwardAهو ال ◼
active
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
بعدل على قيمة الinstr ال تساوي صفر «هيك يعني عناstage بنفس الRd
»destination register
اليRs register » بساوي رقمEX/MEM« stage بهاي الRd واذا كان رقم ال ◼
Lilas qawasmeh
Double Data Hazard
◼ Consider the sequence:
add $1,$1,$2
add $1,$1,$3
add $1,$1,$4
الحظ انو هون بقدر اعمل forwardمن ال two stageالنو الشرط الي حطينا بتحقق فيهم التنين ◼
طيب القيمه الصح الي الزم اعمللها forwardواوديها لل EXهي القيمه االحدث يعني القيمه ◼
EX stage منforward الزم ما يكون فيMEM stage من الforward لحتى يصير في ◼
Lilas qawasmeh
Load-Use Hazard Detection
خلينا نشوف شو كيف ح نتعامل مع ال data hazardبحالة ال ”load “lw ◼
لو بدنا نطبق عليها نفس Forwardالي عملنا قبل شوفو شو الي ح يصير ◼
ف لما تكون ال 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 ال ◼
Lilas qawasmeh
Cycle 3 :
و ح بنعملID stage ح تنتقل للadd و ال, next stage “EX” ح تنتقل للlw ال ◼
Lilas qawasmeh
Cycle 4 :
ال lwح تنتقل ل ” ”MEMبس ما بدي ال addتتحرك لل ” next stage ”EXوبدي ◼
Lilas qawasmeh
Cycle 4 :
وهيك للباقيEX ح تنتقل للadd ” و الWB” ح تنتقل لlw ال ◼
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
بال ثلث ساليد التاليه عم يشرح نفس الفكره بس ع ال 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
يساوي »
طيب كيف ح نعمل هاد الشي ؟ ◼
Lilas qawasmeh
§4.8 Control Hazards
Branch Hazards
◼ If branch outcome determined in MEM
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
Lilas qawasmeh
Data Hazards for Branches
ف الموضوع بنحل بالData Hazards او اكتر عناinst بbeq اذا كان قبل ال ◼
… IF ID EX MEM WB
Lilas qawasmeh
Data Hazards for Branches
R- وكان من نوع الData Hazards مباشره بينهمbrq الي قبل الinstr اما اذا كان ال ◼
beq stalled IF ID
Lilas qawasmeh
Data Hazards for Branches
load وكان من نوع الData Hazards مباشره بينهمbrq الي قبل الinstr اما اذا كان ال ◼
beq stalled IF ID
beq stalled ID
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
ساليد مكرر بس ارجعوا اتذكروا الي حكينا هون
القادمه
يعني اذا الفرض takenوالكود طلع not takenرح نخلي الفرض للمره الجاي not taken ◼
Lilas qawasmeh
Branch Prediction
لو فرضنا قيم ال brachطلعة كالتالي : ◼
Lilas qawasmeh
Dynamic Branch Prediction
Dynamic Branch Prediction عنا نوعين من ال ◼
» بتحكيلي انو اذا توقعت غلط رح اغير الفرض مباشرهOne bit Prediction نبلش بال ◼
NT
Not
Taken
Taken
T
NT رح نغير الفرض لNT اما اذا اجىT رح نضل ع الT واجىT لو كان فرضنا ◼
Lilas qawasmeh
Branch Prediction
لو فرضنا قيم ال brachطلعة كالتالي : ◼
لو بنحل ع ال One bit dynamic branch predictionوكان الفرض taken ◼
Lilas qawasmeh
1-Bit Predictor: Shortcoming
لو كان عنا nested loobواستخدمنا ال 1-Bit Predictorالي رح يصير كالتالي : ◼
… outer:
…
… inner:
…
beq …, …, inner
…
beq …, …, outer
لما ينفذ ال innerاول مره بضل ياخد Tلحتى يكملها الول مره وبس يغلط ح ◼
Lilas qawasmeh
2-Bit Predictor
الية عمل : 2-Bit Predictor ◼
بنبلش الفرض من ال strong takenاذا طلع takenرح اضل ع نفس الفرض اما ازا غلط ◼
الول مره وطلع not takenف رح يضل فرضنا takenبس ح يصير week
هالء اذا رجع طلع معنا not takenيعني غلطنا كمان مره رح نعدل ع الفرض ويصير not ◼
بس في حاله ممكن يغير بغلط واحد وهي اذا غيرت الفرض وصرت ع ال 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 ◼
االولى :اذا كنت بدي احزر انها takenوانا بال ID stageما بعرف شو ال target ◼
addressاال لتخلص ال stage
التانيه :كيف بدي اعرف انو ال instructionالي عندي branchوانا ب stageال ◼
fetch؟
لحتى اتحزر الزم اكون متاكد انو انا عندي branchوانا بال fetch stage ◼
Lilas qawasmeh
Branch Prediction buffer
الstage وانا بbranch الي عنديinstruction كيف بدي اعرف انو ال ◼
؟fetch
يعني ما عندي اي معلومه عنو غير الIF stage بالinstruction لما يكون ال ◼
» الوaddress «الpc
Branch Prediction
buffer Lilas qawasmeh
Branch target buffer
» كيف اعرف الtaken« prediction وكان الbranch طيب اعرفت انو ◼
؟target address
ويحسبلي ياهID stage الزم نستنى ليكمل ال ◼
طيب كونو ما اخدنا ال addressلل instructionكامل ,كيف اتاكد انو هاد نفس ◼
ال instructionالي عندي ؟
بال bufferفي جزء بمثل ال tagوهو بحتوي على باقي ال bitاللي لل ◼
addressف بس االقي ال indexرح اقارن هل ال tagالي في نفس تكملة ال
addressعندي
اذا اه رح اكون عرفت ال targetلل instructionالي معي ◼
IF وانا بالBranch Prediction buffer بس الفكره الي بتهمنا انو اذا عندي ◼
next instruction بقدر ابلش احزر شو ال
اال بالbranch ما رح اعرف انو عناBranch Prediction buffer وبدون ال ◼
ID stage
”ليالس قواسمه“