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

CH 1 : Computer Abstractions and Technolog

First lecture

Slid 6 > understand performance


1- algorithm
2- Programming language, compiler, architecture
3- Processor and memory system
4- I/O system (including OS)

Slid 7 >
1- Application software
‫مكتوب بلغه عالية المستوى و يقدم خدمه للمستخدم‬
2- System software
‫ للمستخدم‬application ‫يهياء المكان المناسب لتشغيل ال‬

Slid 8 > Levels of Program Code

1) High-level language
2) Assembly language
3) Hardware representation
‫م‬
‫‪,‬‬

‫‪Second lecture‬‬
‫‪Response Time and Throughput‬‬
‫‪• Response time‬‬
‫‪How long it takes to do a task‬‬
‫‪• Throughput‬‬
‫‪Total work done per unit time‬‬

‫_ هون بحكيل عن الفرق ن‬


‫بي ال ‪ Response time‬وال ‪: Throughput‬‬ ‫ي‬
‫ال بحتاجه نظام التشغيل لتشغيل الجهاز‬ ‫_ هالء ال ‪ Response time‬ر‬
‫بتعب عن الوقت ي‬
‫ش شغل‬ ‫ن‬ ‫ن‬ ‫_ اما ال ‪ Throughput‬ف ر‬
‫بتعب عن كمية الشغل خالل وقت معي " ي‬
‫يعن كم ي‬
‫هالجهاز ر‬
‫بفبه معينه "‬

‫‪How are response time and throughput affected by‬‬


‫?‪• Replacing the processor with a faster version‬‬
‫?‪• Adding more processors‬‬

‫هون بسأل شو تأثب هاي التغبات ع ال ‪ Response time‬وال ‪Throughput‬‬

‫بحكيل لو زدنا بدلنا المعالج ب معالج ارسع‬


‫ي‬ ‫والل‬
‫• نبدا بأول سؤال ي‬
‫لو اجينا ل ال ‪ :: Response time‬منطقيا رح يقل الوقت الالزم لتشغيل الجهاز بما انو زادة‬
‫رسعة المعالج‬
‫اكب خالل‬‫طيب وال ‪ :: Throughput‬كون المعالج صار ارسع من الطبيع انو ح ينجز شغل ر‬
‫ي‬
‫نفس الوقت‬

‫‪2‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
‫‪,‬‬

‫بحكيل لو زدت عدد المعالجات‬ ‫ن‬


‫تان سؤال‬
‫ي‬ ‫• ي‬
‫فينا نتوقع انو وقت التشغيل ما ح يتأثر كونه التشغيل بعتمد ع معالج واحد‬
‫ن‬
‫بامكان اجزء‬ ‫طبيع انها تزيد بس بنفس الوقت بتعتمد اذا كان‬ ‫اما بالنسبه لكمية الشغل ف‬
‫ي‬ ‫ي‬
‫الشغل ع ر‬
‫اكب من معالج‬

‫** وهالء بدي انبه ع شغاله ي‬


‫وه انو جواب هاي االسأله كان بشكل بسيط و انو القد‬
‫ال فوق‬ ‫الش البسيط ي‬
‫اجاوب بشكل ادق الزم افكر بكل العوامل بس حاليا بهمنا ي‬

‫‪Relative Performance :‬‬


‫𝟏‬
‫= ‪Performance‬‬
‫𝒆𝒎𝒊𝑻‬

‫عكش مع الوقت‬
‫ي‬ ‫** من هاد القانون بقدر اعرف انو ال ‪ Performance‬بتتناسب‬
‫ف كلما كان الوقت اقل كانت ال ‪ Performance‬افضل‬

‫𝒙 𝒇𝒓𝒆𝒑‬ ‫𝒙𝑻‪𝟏/‬‬ ‫𝒚𝑻‬


‫=‬ ‫=‬
‫𝒚 𝒇𝒓𝒆𝒑‬ ‫𝒚𝑻‪𝟏/‬‬ ‫𝒙𝑻‬
‫** اما للمقارنه ن‬
‫بي جهازين نستخدم االقانون االعل و حسب النتيجه فأن ‪::‬‬

‫𝒙 𝒇𝒓𝒆𝒑‬
‫‪• If‬‬ ‫‪> 1 → perf x petter than perf y‬‬
‫𝒚 𝒇𝒓𝒆𝒑‬
‫𝒙 𝒇𝒓𝒆𝒑‬
‫‪• If‬‬ ‫‪<1 → perf y petter than perf x‬‬
‫𝒚 𝒇𝒓𝒆𝒑‬
‫𝒙 𝒇𝒓𝒆𝒑‬
‫‪• If‬‬ ‫‪= 1 → perf x = perf y‬‬
‫𝒚 𝒇𝒓𝒆𝒑‬
‫𝒙 𝒇𝒓𝒆𝒑‬
‫‪• If‬‬ ‫‪= n → x is n time fastar than y‬‬
‫𝒚 𝒇𝒓𝒆𝒑‬

‫‪Example: time taken to run a program 10s on A, 15s on B:‬‬


‫𝒂 𝒇𝒓𝒆𝒑‬ ‫𝒃𝑻‬ ‫𝟓𝟏‬
‫=‬ ‫=‬ ‫‪= 1.5‬‬
‫𝒃 𝒇𝒓𝒆𝒑‬ ‫𝒂𝑻‬ ‫𝟎𝟏‬

‫‪3‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
,

1.5 > 1 so perf A better than B


A is 1.5 times faster than B

Measuring Execution Time:


: ‫من قياسات المستخدمه لقياس وقت التنفيذ‬
1-Elapsed time
2- CPU time
CPU time ‫ونحنا ح نركز ع‬

CPU Clocking : represent time

Clock period = cycle time


cycle ‫ بتكون عباره عن مجموعه من ال‬cpu clock ‫بتمثل شكل ال‬
rate ‫ تسىم ب‬frequency ‫ال‬
_ Clock frequency (rate): 1/cycle time
• Unit freq (HZ)
- 1K= 103
- 1M= 106

4 done by : lilas qawasmeh


‫م‬
,

- 1G= 109
• Unit time (sec)
- 10−3 msec
- 10−6 𝜇sec
- 10−9 nsec
- 10−12 psec
- EX: freq = 1 GHz =109 Hz find cycle time?
- Cycle time = 1\109 = 10−9 sec = 1 nsec

Third lecture

5 done by : lilas qawasmeh


‫م‬
,

‫ن‬
‫ بحيث كل‬cycly ‫ عباره عن مجموعه من ال‬CPU clock ‫بالمحاضه الماضيه انو ال‬ ‫حكينا‬
‫ن‬
cycle time ‫معي يسىم‬ ‫ الها وقت‬cycle

‫ كامل ح نحتاج انو ن‬CPU time ‫هالء مشان نحسب ال‬


‫ ب وقت‬cycle ‫نضب عدد ال‬
‫ الواحده‬cycle ‫تنفيذ ال‬
: ‫*القانون‬
CPU time = number of cycle * cycle time
‫واحنا بنعرف انو‬
Clock frequency (rate): 1/cycle time
‫بالتال ممكن اكتب القانون هيك‬
‫ي‬
CPU time = number of cycle/ rate

Performance improved by
_ Reducing number of clock cycles
_ Increasing clock rate
_ Hardware designer must often trade off clock rate against cycle count
‫ن‬
rate ‫ او بزيادة ال‬cycle ‫ ب تقليل عدد ال‬Performance ‫تحسي ال‬ ‫يمكن‬

6 done by : lilas qawasmeh


‫م‬
,

‫هون مثال تطبيق مبارس ع القانون ر‬


B ‫ و‬A ‫افبض عنا جهازين‬
‫ن‬
‫معطين انو‬
‫ي‬
Rate A= 2GHz
CPU time = 10 s
cycle ‫المجهول عندي عدد ال‬

CPU time = number of cycle/ rate


10= #cycle /2*109
#cycle_A= 20*109
‫ال بالسؤال‬
‫ حسب العالقه ي‬#cycle_B ‫ومنها بنوجد ال‬
cycle_B = 1.2 * #cycle_A = 24*109
CPU time_B=6s ‫ الالزم لجعل‬rate ‫ش وهو انو احسب ال‬
‫ضل اخر ي‬
CPU time = number of cycle/ rate So rate = 4GHz

7 done by : lilas qawasmeh


‫م‬
‫‪,‬‬

‫‪Instruction Count and CPI:‬‬


‫ال كان عندي كود وفيو‬ ‫ن‬
‫نحك عدد ال ‪ cycle‬مبارسه طيب لو ي‬
‫ي‬ ‫الماض كنا‬
‫ي‬ ‫هالء بالقانون‬
‫مجموعة ‪ Instruction‬و ال ‪ Instruction‬الوحده بتكون من عدة ‪ cycle‬وبرضو ال‬
‫‪ Instruction‬ممكن يتكرر ر‬
‫اكب من مره ف كيف ح اطلع عدد ال ‪cycle‬‬

‫ال بتكون ال ‪ Instruction‬بنسميها‬


‫ش بدك تعرف انو عدد ال ‪ cycle‬ي‬‫الموضوع سهل اول ي‬
‫‪ cycle per instruction‬واختصارها ‪CPI‬‬
‫وانو عدد مرات تكرار ال ‪ Instruction‬بنسميها ‪ instruction count‬واختصاره ‪IC‬‬
‫الكل بساوي حاصل نضب هم‬
‫ومنها عدد ال‪ cycle‬ي‬
‫‪Clock cycle = instruction count * cycle per instruction‬‬
‫‪#cycle = IC*CPI‬‬

‫‪8‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
‫‪,‬‬
‫ن‬
‫اعطان ال ‪ IC‬بفرض انو واحد‬ ‫ن‬
‫تان مبارس من الساليد وكونو ما‬
‫ي‬ ‫هون مثال ي‬
‫~~~~~~~~~~~~~~~~~~~~~~~~~~~~‬
‫‪CPI in More Detail :‬‬
‫‪If different instruction classes take different numbers of cycles‬‬
‫ر‬
‫باق ال‬
‫نحك عن حالة لو كان كل ‪ instruction‬الو عدد ‪ cycle‬مختلف عن ي‬
‫ي‬ ‫هالء ح‬
‫يعن ال ‪ CPI‬مش ثابت "‬ ‫ن‬
‫‪ " instruction‬ي‬
‫ن‬
‫اضب كل ‪ CPI‬يق عدد مارة تكرارها ‪ IC‬وبجمع نضب هم مع بعض‬ ‫بالتال رح ن‬
‫ي‬
‫بصيغه رياضيات واضحه ر‬
‫اكب‬
‫‪#cycle = CPI1 * IC1 + CPI2 * IC2 + CPU3*IC3 + .....‬‬
‫𝑘_𝐼𝐶 ∗ 𝑘_𝐼𝑃𝐶 ‪#cycle = ∑𝑛𝑘=0‬‬
‫ن‬ ‫ن‬
‫ان اوجد ال ‪CPI average‬‬
‫وه ي‬
‫و يق طريقه تانيه ي‬
‫‪#cycle = IC * CPIavg‬‬
‫لحساب ال ‪ CPI avg‬اوجد عدد ال ‪ cycle‬وبقسمه ع عدد ال ‪instruction‬‬

‫مثال ‪:‬‬
‫‪ic‬‬ ‫‪Cpi‬‬
‫‪10x‬‬ ‫‪3‬‬
‫‪5y‬‬ ‫‪4‬‬
‫‪5z‬‬ ‫‪2‬‬

‫‪#cycle = 10*3+5*4+5*2 = 60‬‬


‫الكل ‪IC‬‬
‫‪ = 20‬ي‬
‫‪CPIavg = 60/20 = 3‬‬

‫‪9‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
‫‪,‬‬

‫‪Fourth lecture_Amdahl’s Law Tutorial‬‬

‫نحك عن قانون ‪ Amdahl’s‬و موضوعه سهل‬ ‫ن‬


‫المحاضه ح‬ ‫بهاي‬
‫ي‬
‫بحكيل انت لما بدك تحسن ال ‪ perf‬ل‬
‫ي‬ ‫هالء نحنا كل هدفنا نحسن ال ‪ performance‬ف‬
‫ن‬
‫معي الزم يكون عندك فكره او تكون عامل دراسه وتحليل لهاد النظام بحيث تكون‬ ‫‪system‬‬
‫لحن تعرف شو بتقدر تحسن‬ ‫عارف وين ال ‪ memory‬ضاعة وين ال ‪ perf‬ضايع ر‬

‫ن‬
‫معي بحتاج لمده زمنيه محدده ليشتغل ف الزم‬ ‫بحكيل ‪ :‬انو لو كان نظام‬ ‫ف هاد القانون‬
‫ي‬
‫اعرف وين ضاع هاد الوقت‬

‫عبنا عن الوقت بخط عددي وحكينا انو ر‬


‫الفبه كلها عباره عن ‪ 100%T‬ف ع فرض انو كان‬ ‫ر‬
‫ال ح‬
‫الكل ف بعرف مبارسه انو الوقت ي‬
‫عندي عمليه معينه بتستهلك وقت )‪ (n‬من الوقت ي‬
‫ر‬
‫الكل هو ‪100‬‬
‫باق العمليات هو ‪ 100-n‬النو اتفقنا انو الوقت ي‬
‫تستهلكه ي‬
‫‪By a factor of x‬‬
‫ن‬
‫يعن انو قيمة ‪ n‬رح تقل كونو‬ ‫ن‬
‫هالء هون لو بدي اعمل تحسي ع قيمه ‪ n‬بمقدار ‪ x‬فهاد ي‬
‫ن‬
‫التحسي رح يكون‬ ‫بالتال الوقت بعد‬ ‫الوقت االفضل هوه االقل‬
‫ي‬
‫𝑛‬
‫)‪Timenew = + (100-n‬‬
‫𝑥‬
‫ر‬
‫باق الوقت ن ن‬
‫ببل زي ما هو‬ ‫ال حسنتو ع المقدار اما ي‬
‫اي انو رح اقسم قيمه الوقت ي‬

‫‪Example: multiply accounts for 80s/100s‬‬


‫?‪How much improvement in multiply performance to get 5× overall‬‬

‫‪10‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
‫‪,‬‬

‫ن‬
‫يعن بضل لل ‪other‬‬
‫بحكيل انو ال ‪ multiply‬بتستهلك ‪ %80‬من الوقت ي‬
‫ي‬ ‫هاد السؤال‬
‫(الشغالت التانيه ) ‪ %20‬من الوقت‬
‫كل خمس مرات‬
‫بحكيل كم بحتاج احسن ع ال ‪ multiply‬بحيث يتحسن االداء ال ي‬
‫ي‬
‫االصل‬ ‫ن‬
‫يعن بدي يصب خمس الوقت‬
‫ي‬ ‫الكل ‪ 100%T‬بدي يحسن خمس مرات ي‬
‫هالء الوقت ي‬
‫‪Tnew = T/5 = 0.2T‬‬
‫كالتال‬
‫ي‬ ‫العرف كم الزم احسن ع قيمة ال ‪ multiply‬بعمل‬
‫𝑇‪80%‬‬
‫= ‪Tnew‬‬ ‫‪+ 20%T‬‬
‫𝑥‬
‫𝑇‪0.8‬‬
‫= ‪0.2T‬‬ ‫‪+ 0.2T‬‬
‫𝑥‬

‫الزم نحل المعادله لنوجد قيمه ‪x‬‬


‫𝑇‪0.8‬‬ ‫𝑇‪0.8‬‬
‫= ‪0.2T - 0.2T‬‬ ‫→‬ ‫‪=0‬‬
‫𝑥‬ ‫𝑥‬
‫ر‬
‫وحن يساوى هاد المقدار صفر ف ‪ x‬ح تساوي الماالنهايه‬
‫بالتال هاد التحسن ع الوقت مش ممكن يصب‬
‫ي‬
‫ن‬
‫يعن منطقيا مش ممكن يتنفذ اي جزء من الشغل بصفر ثانيه‬
‫ي‬

‫‪Example‬‬
‫‪• 20% of time doing integer instructions‬‬
‫‪• 35% percent of time doing I/O‬‬
‫?‪–Which is the better tradeoff‬‬
‫‪•Compiler optimization that reduces number of‬‬
‫‪integer instructions by 25% (assume each integer‬‬
‫)‪instruction takes the same amount of time‬‬
‫‪•Hardware optimization that reduces the latency of each IO operations‬‬
‫‪from 6us to 5us‬‬

‫‪11‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
‫‪,‬‬

‫بحكيل انو ال ‪ integer‬بستهلك ‪ 20%‬وال ‪ I/O‬بستهلك ‪ 30%‬بضل لل ‪other‬‬


‫ي‬ ‫هاد المثال‬
‫‪Other = 100-20-35=45 %‬‬
‫ن‬
‫تحسيني وبدو احدد االفضل فيهم‬ ‫ن‬
‫واعطان‬
‫ي‬
‫نبلش باالول‬
‫بحكيل انو اقلل عدد ال ‪ instruction‬لل ‪ int‬بنسبة ‪ 25%‬فال ‪ time‬رح يتغب‬
‫ي‬
‫كالتال‬
‫ي‬ ‫هالء قبل التغب ف ‪ time‬ال ‪int‬‬
‫‪Time = CPI*IC*T =0.2‬‬
‫لما اقلل ال ‪ IC‬بنسبة ‪ %25‬كم ح تصب ال ‪ ICnew‬؟‬
‫‪ICnew = IC – IC*0.25 = 0.75 IC‬‬
‫ف الوقت بعد التغب بصب‬
‫‪T_intnew = CPI* ICnew *T‬‬
‫‪T_intnew = CPI* 0.75 IC *T = 0.75 *CPI*IC*T = 0.75*0.2 =0.15‬‬
‫‪So → Timenew = T_intnew + T_I/O + T_other‬‬
‫‪= 0.15+0.35+0.45 = 0.95 s‬‬
‫انتبه انو ال ‪ time‬لل ‪ I/O‬و لل ‪ other‬ما بتغب‬

‫ال ال ‪ I/O‬بقل من ‪ 6‬ل ‪ 𝜇 𝑠𝑒𝑐 5‬ف شو ح يصب‬ ‫الوقت‬ ‫انو‬ ‫بحكيل‬ ‫ن‬
‫تحسي‬ ‫تان‬‫طيب ن‬
‫ي‬ ‫ي‬ ‫ي‬
‫الكل؟‬
‫للوقت ي‬
‫ن‬
‫شغالي عال ال ‪ I/O device‬مش ع ال‬ ‫مع شوي بدي تعرفو انو ال‪I/O‬‬‫هون ركزو ي‬
‫ن‬
‫المحاضه الماضيه‬ ‫ال اخدناهم‬ ‫ن‬ ‫ن‬
‫يعن ما بنطبق عليهم قواني ال ‪ time‬ي‬
‫‪ processor‬ي‬
‫طيب كيف ح نحسب الوقت الجديد ؟ بستخدم النسبه والتناسب‬
‫‪6 𝜇 𝑠𝑒𝑐 → 0.35‬‬

‫‪12‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
‫‪,‬‬

‫?? → 𝑐𝑒𝑠 𝜇 ‪5‬‬


‫بالتال ال ‪ T_I/Onew =0.291T‬ومنو منحسب ال ‪ T‬الكليه‬
‫ي‬
‫‪Timenew= 0.2 + 0.291 +0.45 = 0.941‬‬
‫ن‬ ‫ن‬
‫اذا ‪ :‬التحسي ي‬
‫التان هو االفضل النو وقته اقل‬
‫‪Example‬‬
‫‪• Memory operations currently take 30% of execution time.‬‬
‫‪• A new widget called a “cache” speeds up 80% of memory operations‬‬
‫‪by a factor of 4‬‬
‫‪• A second new widget called a “L2 cache” speeds up 1/2 the remaining‬‬
‫‪20% by a factor or 2.‬‬
‫?‪• What is the total speed up‬‬
‫حكال انو ال ‪ memory‬بتستهلك ‪ %30‬من الوقت‬ ‫ي‬ ‫‪)1‬‬
‫يعن ع ‪ %80‬من ال ‪%30‬‬ ‫ن‬
‫استخدم جهاز بشتغل عل ‪ %80‬من وقت ال ‪ memory‬ي‬ ‫‪)2‬‬
‫يعن ح يشتغل ع ‪ 30*0.8%=24%‬بحيث انو يتحسن بمعامل ‪4‬‬ ‫ن‬
‫من الوقت االصل ي‬
‫بالتال رح يصب الوقت ‪24%/4=6%‬‬ ‫يعن بقسمه ع المعامل‬ ‫ن‬ ‫رن‬
‫ي‬ ‫**نبكر وقت بتحسن ي‬
‫ال ضلو من ال ‪ memory‬ومقدارهم ‪ 30*0.2%=0.6‬رح‬ ‫وحكال انو ال ‪ %20‬ي‬
‫ي‬ ‫‪)3‬‬
‫يعن ح تصب ‪ 1.5%‬وال‬‫ن‬ ‫ن‬ ‫ن‬
‫يعن ع ‪ %3‬ويحسنها بمعامل ‪ 2‬ي‬‫تان ع نصهم ي‬ ‫يشتغل جهاز ي‬
‫ه‬‫‪ %3‬التانيه بتضل زي ما ي‬
‫ن‬
‫التحسي‬ ‫هالء بقدر احسب الوقت بعد‬ ‫‪)4‬‬
‫‪Tnew = 70%+6%+1.5%+3% = 80.5%‬‬

‫‪13‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
‫‪,‬‬

‫هون عندي ‪ class‬بدو اعرف ن‬


‫مي االرسع فيهم‬
‫حكال ال ‪ IC‬بتتقسم عليهم بالتساوي وكونو كل واحد فيه اربعه‬‫ي‬ ‫ال بالسؤال انو‬
‫الفكره ي‬
‫‪ instruction‬ف لكل وحده رب ع ال ‪ IC‬الكليه‬
‫الحل مبارس ع القانون‬

‫‪14‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
,

15 done by : lilas qawasmeh


‫م‬
‫‪,‬‬

‫‪CH2: Instructions: Language of the Computer‬‬


‫‪Fifth lecture‬‬

‫ر‬
‫التشابت عن ال ‪ Instruction format‬و ال ‪memory‬‬ ‫نحك بهاد‬ ‫_ رح‬
‫ي‬
‫_ ورح نتعامل مع ال ‪MIPS Processor‬‬
‫_ ال ‪ MIPS‬ك ‪ unit of speed‬ر‬
‫بتعت عن عدد ال ‪ instruction per unit of time‬بس‬
‫تعتت مقياس دقيق النو ما بعرف شو نوعية هاي ال ‪instruction‬‬
‫ه ال ر‬
‫ي‬
‫ش بينعمل ع ال ‪ hardware‬ارسع من انو ينعمل ع ال ‪ software‬بس اذا عملت‬ ‫_ اي ي‬
‫ئ‬
‫ابط النو بدل ما يتعامل مع ‪basic complete sit‬‬ ‫يصت‬
‫كتت اشياء ع ال ‪ hardware‬رح ر‬ ‫ر‬
‫ئ‬
‫ابط‬ ‫بصت‬ ‫ر‬
‫بصت معقد اكت و ر‬ ‫بالتال ر‬
‫ي‬ ‫رح يتعامل الف ‪instruction‬‬

‫_ال ‪ MIPS‬ي‬
‫مبن بشكل بسيط ع امل انو يطلع ال ‪ software‬ارسع من ال ‪hardware‬‬

‫_مثال عنا عملية الضب بال ‪ binary‬ي‬


‫ه عباره عن ‪ shift‬و ‪sum‬‬
‫ف ممكن اصممها ك ‪ software‬بستخدام ‪ instruction‬ال ‪ shift‬و ‪ sum‬مع ‪algorithm‬‬
‫معينه او ممكن او اعمله ع ال ‪ hardware‬زي ما رح نتعلم بعدين‬
‫ر‬
‫للتشابت وهالء ح نبلش بالجد‬ ‫حك ك مقدمه‬
‫هالء هاد كلو ي‬
‫~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~‬
‫‪Arithmetic Operations‬‬
‫‪• Add and subtract, three operands‬‬
‫عمليات الجمع و الطرح بتحتاج ‪ 3‬معامالت (‪)operands‬‬
‫‪• Two sources and one destination‬‬
‫ال بعمل عليهم العمليه الحسابيه‬‫‪ 2‬منهم بنسميهم مصدر (‪ )sources‬وهمه االرقام ي‬
‫ال ح اخزن يف نتيجة العمليه‬
‫و واحد هو المخزن (‪ )destination‬ي‬

‫‪1‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
‫‪,‬‬

‫‪• All arithmetic operations have this form:‬‬


‫‪_ arithmetic destination , sources, sources‬‬
‫‪ex:‬‬ ‫‪add a, b, c‬‬
‫صت هيك ‪a=b+c‬‬
‫ال ب ر‬
‫ي‬
‫‪• Ex :‬‬
‫)‪C code : f = (g + h) - (i + j‬‬
‫ال معنا ل ‪MIPS code‬‬
‫هالء بدنا نحول الكود ي‬
‫ال عنا بعمل عملية وحده يا جمع يا طرح بكل سطر‬
‫بنعرف انو ال ‪ form‬ي‬
‫ف رح اجزء ال ‪ code‬ل ‪ 3‬اجزاء بس رح احتاج مخازن مؤقته اخزن فيها الناتج‬

‫‪Compiled MIPS code:‬‬


‫‪add t0, g, h‬‬
‫‪add t1, i, j‬‬
‫‪sub f, t0, t1‬‬
‫كالتال ‪:‬‬
‫ي‬ ‫بصت‬
‫الل ر‬
‫ي‬
‫‪ -‬بجمع ال ‪ g‬و ‪ h‬و بخزنهم ب ‪t0‬‬
‫‪ -‬بجمع ال ‪ j‬و ‪ i‬و بخزنهم ب ‪t1‬‬
‫الجمعي وبخزنه ب ‪f‬‬
‫ر‬ ‫‪ -‬بطرح ‪ t0‬من ‪ t1‬اي ناتج‬
‫~~~~~~~~~~~~~~~~~~~~~‬

‫‪2‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
,

Register Operands:
• Arithmetic instructions use register operands
operands ‫معيني الخزن فيهم ال‬
‫ر‬ Register ‫مع انو ح استخدم‬
‫هون ح يفرق ي‬
file register ‫ بنحكيلهم‬Register ‫مجموعة ال‬
• MIPS has a 32 × 32-bit register file
31 ‫ ل‬0 ‫ ترقيمهم من‬32-bit ‫ كل واحد يف‬32 register ‫ عندي‬MIPS ‫بال‬
word ‫ بنسميهم‬32-bit ‫كل‬

- Use for frequently accessed data

- Numbered 0 to 31

- 32-bit data called a “word”

• Assembler names
‫ رمز خاص فيه منهم‬register ‫ عنا لكل‬MIPS ‫بال‬
t ‫ بالحرف‬10 register -
s ‫ بالحرف‬8 register -

- $t0, $t1, …, $t9 for temporary values

- $s0, $s1, …, $s7 for saved variables


processor ‫ومسمي باحرف مختلفه النو طريقة عمل ال‬ ‫ش ح نستخدمهم‬ ‫ر‬
‫ر‬ ‫وهدول اكت ي‬
‫معهم بتختلف‬

‫ قبل‬$ ‫ بانو بنحط اشارة‬register ‫** مهم تنتبه لطريقة كتابة اسم ال‬

3 done by : lilas qawasmeh


‫م‬
‫‪,‬‬

‫كالتال‪:‬‬
‫ي‬ ‫مع الحل‬
‫ال قبل رح يفرق ي‬
‫يعن لو بدنا نرجع للمثال ي‬
‫ي‬
‫رح نفرض انو ال ‪ g‬مخزنه ع ال ‪ s1‬وال ‪ h‬ع ال ‪ s2‬وال ‪ i‬ع ال ‪ s3‬وال ‪ j‬ع ال ‪ s4‬وال ‪ f‬ع ‪s0‬‬
‫ونحط اسم ال ‪ register‬بدل الحرف‬
‫‪add $t0, $s1, $s2‬‬
‫‪add $t1, $s3, $s4‬‬
‫‪sub $s0, $t0, $t1‬‬
‫~~~~~~~~~~~~~~~~~~~~~~~~~~~~~‬
‫‪Memory Operands :‬‬
‫ش مخزن بال ‪ memory‬الزم اعرف ال ‪ address‬تبعه‬
‫هالء لما بدي استخدم ي‬
‫تعو نتعرف ع ‪ memory‬ال ‪ : MIPS‬ي‬
‫ه عباره عن‬
‫‪-byte address‬‬
‫‪-word a line‬‬
‫يعن كل ‪ address‬عباره عن ‪byte=8-bit‬‬
‫ي‬
‫وكل سطر ‪ 4byte‬بمثل ‪ word‬النو ال ‪word = 32-bit‬‬

‫‪4‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
‫‪,‬‬

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


‫ال بهمنا نفهمه هو انو كل سطر ال ‪ Address‬الو من مضاعفات ال ‪4‬‬
‫ف ي‬

‫سالن ال ‪ 28-byt‬باي ‪ word‬موجوده ؟؟‬


‫ي‬ ‫طيب لو‬
‫رح اقسمها ع ‪ 4‬النو كل ‪ word‬فيها ‪28byt‬‬
‫‪28/4=7‬‬
‫طيب لو بدنا ك ادرس رح نحول ل ‪binary‬‬
‫?= ‪11100 / 100‬‬
‫لتي‬
‫كان بحرك الفاصله مت ر‬
‫لما اقسم رقم بايناري ع ‪ 4‬ي‬
‫ه ‪ 2‬قوه ‪2‬‬
‫هالحك؟ النو االساس عندي ‪ 2‬و ال ‪ 4‬ي‬
‫ي‬ ‫كيف‬
‫لتي‬
‫زي ما باالرقام الديسيمل لما اقسم ع االساس ‪ 10‬بتتحرك الفاصله متله ف ع ‪ 100‬مت ر‬
‫وهكذا‬
‫ف الجواب ‪ 111‬وهو ادرس ال ‪word 7‬‬

‫‪5‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
‫‪,‬‬

‫طريقتي معروفات‬
‫ر‬ ‫نحك عن طريقة تخزين ال ‪ data‬بالميموري وعنا‬
‫ي‬ ‫هالء ح‬
‫‪1) Big Endian: Most-significant byte at least address of a word‬‬
‫ال هو ال ‪ Most-significant‬رح يتخزن ب‬
‫بحيل لما بدي اخزن ‪ word‬ف اول ‪ byte‬ي‬
‫ي‬
‫ال رقمه اقل‬
‫االدرس ي‬
‫مثال لو عندي هاد الرقم بالهيكسا ‪AB-CD-F0-02‬‬
‫كالتال ‪:‬‬
‫ي‬ ‫رفي بنخزنهم ب ‪byte‬‬
‫يعن كل ح ر‬
‫كل حرف ‪ 4bit‬ي‬
‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬
‫‪AB‬‬ ‫‪CD‬‬ ‫‪F0‬‬ ‫‪02‬‬

‫ه الطريقه المتبعه بال ‪MIPS‬‬


‫وهاي ي‬

‫‪2) Little Endian: least-significant byte at least address‬‬

‫ال هو ال ‪ least-significant‬رح‬
‫بحيل لما بدي اخزن ‪ word‬ف اخر ‪ byte‬ي‬
‫ي‬ ‫هون‬
‫ال رقمه اقل‬
‫يتخزن ب االدرس ي‬

‫مثال لو عندي هاد الرقم بالهيكسا ‪AB-CD-F0-02‬‬

‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬


‫‪02‬‬ ‫‪F0‬‬ ‫‪CD‬‬ ‫‪AB‬‬

‫~~~~~~~~~~~~~~~~~~‬
‫تنتي ‪:‬‬
‫نحك عن العمليات ع الميموري و همه ر‬
‫ي‬ ‫هالء ح‬
‫‪1) load (lw) :‬‬
‫ر‬
‫للريجست‬ ‫*بنقل ال ‪ data‬من الميموري‬
‫‪Form : lw destination , address in memory‬‬

‫‪6‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
‫‪,‬‬

‫‪2) store (sw) :‬‬


‫ر‬
‫الريجيست للميموري‬ ‫*بنقل ال ‪ data‬من‬
‫‪Form : sw destination , address in memory‬‬
‫~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~‬

‫بتعنيل بال ‪ MIPS‬؟‬


‫ي‬ ‫** مالحظه مهم ‪ :‬لما يكون عندي ‪ Array‬مثال ]‪ A[4‬شو‬
‫وبنسم ال ‪base address‬‬
‫ي‬ ‫هال اي ‪ Array‬اسمها بمثل ‪ address‬اول ‪element‬‬
‫ال هو ‪address‬‬
‫وال ‪ element‬هو عباره عن ‪ word‬ف لو كان ال ‪ Base address‬صفر ي‬
‫تان عنض شو رح يكون ؟‬
‫اول عنض ف ي‬
‫والل اعرفنا عنها انو توزي ع ال ‪ address‬بكون من‬
‫ال اخدنا ي‬
‫من شكل ال ‪ memory‬ي‬
‫مرقمي‬
‫ر‬ ‫مضاعفات ال ‪" 4‬ارجعو ل رسمة ال ‪ memory‬بتالحظه انو بال ‪ address byte‬كنا‬
‫‪" ... 12 8 4 0‬‬
‫تان عنض ‪ 1‬ف‬ ‫تان عنض ح يكون ‪ 4‬ي‬
‫وه جاي من انو ‪ index‬ي‬ ‫بالتال ‪ address‬ي‬
‫ي‬ ‫ف‬
‫‪4=4*1‬‬
‫كمان شغله لو كان ال ‪ base address‬مش صفر ف رح ابلش منه واضيف قيمته لل‬
‫‪index*4‬‬
‫بتحكيل انو‬
‫ي‬ ‫بالتال بقدر استنتج قاعده‬
‫ي‬
‫‪Address A[n] = 4*n + base address‬‬
‫~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~‬

‫‪7‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
‫‪,‬‬

‫‪EX:‬‬
‫;]‪C code: g = h + A[8‬‬
‫‪g in $s1, h in $s2, base address of A in $s3‬‬
‫? ‪Find compiled MIPS code‬‬
‫معطين كل رمز ع اي ‪ Register‬موجود ‪:‬‬
‫ي‬ ‫ين كود بال ‪ c‬وبدو احوله لكود ‪ MIPS‬و‬
‫معط ي‬

‫ر‬
‫ريجست و ارري وحكينا انو االري بتكون ع الميموري والعمليات‬ ‫هالء عندي عملية جمع ربي‬
‫تنتي بس همه " ‪" load and sort‬‬ ‫ال بقدر اعملها ع الميموري ر‬
‫ي‬
‫ر‬
‫ريجست القدر اجمعها‬ ‫ال بدي ياها من االري ع‬
‫ف رح اعمل ‪ load‬للقيمه ي‬
‫كيف بعمل ال ‪ load‬؟‬
‫‪Form : lw destination , address in memory‬‬
‫ر‬
‫رجست انا بختاره الخزن يف مثال ‪$t0‬‬ ‫ال ‪ destination‬هو اي‬
‫ال ‪ address in memory‬هو ]‪ address A[8‬وكيف ح نطلعو حكينا هو عباره عن‬
‫‪Address A[n] = 4*n + base address‬‬
‫‪Address A[8] = 4*8 + $s3‬‬
‫بنكتبه هيك ‪32($s3) = 4*n ( base address ) :‬‬
‫بصت الكود عنا ‪:‬‬
‫ف ر‬
‫‪lw $t0, 32($s3) # load word‬‬
‫وبعدين بجمعهم ‪:‬‬

‫‪add $s1, $s2, $t0‬‬


‫*المثال ساليد ‪ 10‬نفس الفكره‬

‫‪8‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
‫‪,‬‬

‫‪Sixth Lecture‬‬

‫• ال ‪ Operands‬بال ‪ MIPS code‬ممكن يكون مخزن بال ‪ Memory‬او‬


‫وبنسم "‪" Immediate Operands‬‬
‫ي‬ ‫‪ Registers‬او يكونو موجودين مبارسه بالكود‬
‫•‬
‫‪Registers vs. Memory :‬‬
‫شو الفرق من انو اخزن ال ‪ Operands‬بال ‪ memory‬عن ال ‪registers‬‬
‫بتلزمن ‪/‬‬
‫ي‬ ‫ال‬
‫بالتال ما بكفو الخزن كل ال ‪ Operands‬ي‬
‫ي‬ ‫‪ -‬ال ‪ registers‬عددهم محدود‬
‫وه ارسع من ال ‪memory‬‬
‫ي‬
‫كبته ‪ /‬بس بطيئه و التعامل مع ال ‪ Operands‬ي‬
‫ال جواها الزم‬ ‫‪ -‬ال ‪ memory‬سعتها ر‬
‫اعمل ‪ lw‬او ‪sw‬‬

‫‪Immediate Operands :‬‬


‫ال بدي ياه مبارسه بالكود‬
‫حكينا هو انو استخدم ال ‪ Operands‬ي‬
‫وبكون يف حرف "‪ "i‬باخر اسم ال ‪ MIPS code‬مثال ‪addi $s3, $s3, 4 : addi‬‬
‫يعن كانه زاد ع قيمة ال‬
‫هون ح يجمع ال ‪ 4‬مبارسه مع ال ‪ $s3‬و يخزنهم بال ‪ $s3‬ي‬
‫‪4 registers‬‬
‫‪The Constant Zero :‬‬
‫ال عنا هو ال ”‪ zero registers “$Zero‬وهو ‪registers‬‬ ‫‪ -‬من انواع ال ‪ registers‬ي‬
‫ثابت قيمته صفر ما بنقدر نعدل عليه‬
‫كالتال ‪:‬‬
‫ي‬ ‫‪ -‬بستخدمه لما بدي انقل داتا من ‪ registers‬ل ‪ registers‬ي‬
‫تان‬
‫‪add $t2, $s1, $zero‬‬

‫‪9‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
‫‪,‬‬

‫ه صفر ف ح ينتج ‪ $s1‬ويخزنها ب‬


‫ال ي‬
‫هون ح يجمع قيمة ‪$s1‬مع قيمه ‪ $zero‬ي‬
‫يعن كانو نقل قيمتها‬
‫‪ $s2‬ي‬

‫‪Sign Extension :‬‬


‫بتحكيل انو لما يكون عندي رقم بال ‪ tow’s compliment‬و بدي امثله‬
‫ي‬ ‫ه قاعده‬‫ي‬
‫ال بدي ياه‬
‫ه ال ‪ most significant bit‬بالعدد ي‬
‫ال ي‬
‫اكت بكرر اخر ‪ bit‬ي‬
‫بعدد ‪ bit‬ر‬
‫مثال ‪:‬‬
‫‪4-bit 8-bit‬‬
‫‪0111=00000111=7‬‬
‫‪1110=11111110=-2‬‬
‫~~~~~~~~~~~~~~~~~~~~~~~~~~‬
‫‪Representing Instructions :‬‬

‫‪• Instructions are encoded in binary‬‬


‫‪Called machine code‬‬
‫‪• MIPS instructions‬‬
‫‪Encoded as 32-bit instruction words‬‬
‫‪• Register numbers‬‬
‫‪- $t0 – $t7 are reg’s 8 – 15‬‬
‫‪- $t8 – $t9 are reg’s 24 – 25‬‬
‫‪- $s0 – $s7 are reg’s 16 – 23‬‬
‫همن اعرفه النو بس نكتب الكود‬ ‫ر‬
‫بحكيل انو كل ريجست الو رقم ثابت وب ي‬
‫ي‬ ‫هون‬
‫ر‬
‫الريجست مش اسمو‬ ‫بالبيتي الزم نكتب رقم‬
‫بعت عنو ب ‪01000‬‬ ‫ر‬
‫ف مثال الريجست ‪ $t0‬رقمه ‪ 8‬ر‬
‫ر‬
‫ريجست القدر امثلهم كلهم بالبايتي‬ ‫** الرقم بالبايتي بكون من ‪ 5bit‬النو عندي ‪32‬‬
‫بدي‪5bit‬‬

‫‪10‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
,

MIPS R-format Instructions:

op rs rt rd shamt funct
6 5 5 5 5 6
bits bits bits bits bits bits
arithmetic and ‫ وتحديدا ال‬MIPS ‫ بال‬Instruction ‫هو عباره عن طريقه لكتابة ال‬
‫معي‬
‫اش ر‬‫ال فوق بتدل ع ي‬
‫ بحيث انو كل خانه من ي‬, shift Instruction
• Instruction fields:
- op: operation code (opcode)
format ‫بحددل كيف اعرف نوع ال‬
‫ي‬
"000000" ‫ تحديدا بكونو‬R-format ‫و بال‬
- rs: first source register number
‫ر‬
" source register" ‫ريجست‬ ‫رقم اول‬
- rt: second source register number
‫ر‬
" source register" ‫ريجست‬ ‫تان‬
‫رقم ي‬

- rd: destination register number


destination register ‫رقم ال‬
- shamt: shift amount (00000 for now)
‫ال بدي اعملها‬
‫ ي‬shift ‫عدد مرات ال‬
- funct: function code (extends opcode)
Instruction ‫واالخته مع بعض بحددو نوع ال‬
‫ر‬ ‫يعن اول خانه‬
‫ ي‬funct+opcode ‫ال‬

11 done by : lilas qawasmeh


‫م‬
‫‪,‬‬

‫‪EX: add $t0, $s1, $s2‬‬


‫بدي امثل هاد الكود بال ‪: R-FORMAT‬‬
‫قبال‬
‫اش بعملو انو احط ال ‪ R-FORMAT‬ي‬
‫اول ي‬

‫‪op‬‬ ‫‪rs‬‬ ‫‪rt‬‬ ‫‪rd‬‬ ‫‪shamt‬‬ ‫‪funct‬‬


‫‪6‬‬ ‫‪5‬‬ ‫‪5‬‬ ‫‪5‬‬ ‫‪5‬‬ ‫‪6‬‬
‫‪bits‬‬ ‫‪bits‬‬ ‫‪bits‬‬ ‫‪bits‬‬ ‫‪bits‬‬ ‫‪bits‬‬
‫ان احدد كل خانه شو الزم احط فيها‬
‫ش ي‬
‫تان ي‬
‫ي‬
‫‪$t0=$s1+$s2‬‬ ‫احنا بنعرف انو ‪ instruction‬ال ‪ add‬بعمل هيك‬

‫يعن ال ‪rs=s1 ,rt=s2 ,rd=t0‬‬


‫ي‬
‫وال ‪ op‬حكينا لل ‪ R-Format‬ثابت وبساوي ‪0‬‬
‫وال ‪ shift=0‬النو هاد الكود ما بعمل ‪shift‬‬
‫وال ‪ funct‬بكون ثابت و معط‬

‫ش برقم‬
‫اعت عن كل ي‬
‫ان ر‬
‫ثالت خطوه ي‬
‫مع‬
‫وحكينا انو كل ‪ register‬الو رقم الزم اكون حافظه اما الفنكشن ف بكون ي‬

‫ان اكتب االرقام بال ‪binary‬‬


‫اخر خطوه ي‬

‫يعن الجواب ‪000000100011001001000000001000002‬‬


‫ي‬

‫‪12‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
,

MIPS I-format Instructions:

op rs rt constant or address
6 5 5 16
bits bits bits bits
Immediate arithmetic and load/store ‫ لكتابة ال‬format ‫بستخدم هاد ال‬
instructions
Instruction fields:
- op: operation code (opcode)
- rs , rt first and second register number
‫ ورح‬load/store ‫ او‬Immediate arithmetic ‫و عل شو بدلو بالزبط بتختلف ازا كان‬
‫اوضحها كمان شوي‬
- constant or address

: Immediate arithmetic ‫** نبلش بال‬


- rs : source register
- rt : destination register
- constant :
‫– حسب القاعده‬215 to +215 – 1 ‫ ف رح يكون الرينج الو‬2’s compliment ‫رقم بال‬
" –2n-1 to +2n-1 –1 “
EX: addi $t0, $s1, 5
‫ مبارسه‬5 ‫ال قبل بس الفرق انو رح نحط الرقم‬
‫لو بدنا نحل هاد رح يكون نفس المثال ي‬
op : ‫فاض‬
‫ي‬ ‫مع تركتو زي‬
‫مش ي‬ rs=s1 rt=t0 constant = 5

Op 10001 01000 0000 0000 0000 0101


13 done by : lilas qawasmeh
‫م‬
,

: load/store ‫** اما ال‬

- rs : register contain base address


- rt : destination register
- address : offset
memory ‫ بال‬address ‫ مشان اعرف ال‬rs ‫وه قيمه بجمعها مع ال‬
‫ي‬
~~ ‫ بهاد التفصيل‬I-Format ‫~~ الدكتور ما حك عن ال‬
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Logical Operations:

MIPS ‫ وال‬operation ‫بهمن منو اعرف ال‬


‫ي‬ ‫** هاد الجدول‬
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

14 done by : lilas qawasmeh


‫م‬
‫‪,‬‬

‫‪Shift Operations:‬‬
‫حكينا انو بستخدمله ال ‪ R-Format‬وانو خانة ال ‪ shamt‬بتمثل عدد مرات ال ‪shift‬‬
‫‪◼ Shift left logical‬‬
‫** مالحظه ‪:‬‬
‫وال بساوي ‪14‬‬
‫يصت ‪ 01110‬ي‬
‫ال بساوي ‪ 7‬وعملتله ‪ sll‬رح ر‬
‫مع الرقم ‪ 00111‬ي‬
‫لو ي‬
‫يعن بنالحظ انو عمليت ال ‪ Shift left logical‬كانها عملية ضب ب ‪ 2‬طيب لو عملت ‪sll‬‬
‫ي‬
‫مرتي كانو ضب ب ‪ 4‬طيب ثلث مرات ضب ب ‪ 8‬وهيك بستنتج القاعده ‪:‬‬ ‫ر‬
‫** ‪** sll by i bits multiplies by 2i‬‬

‫‪◼ Shift right logical‬‬


‫وال بساوي ‪7‬‬
‫يصت ‪ 00111‬ي‬
‫ال بساوي ‪ 14‬وعملتله ‪ srl‬رح ر‬
‫مع الرقم ‪ 01110‬ي‬
‫لو ي‬
‫يعن بنالحظ انو عمليت ال ‪ Shift right logical‬كانها عملية قسمه ع ‪ 2‬ومنها بستنتج ‪:‬‬
‫ي‬
‫**)‪**srl by i bits divides by 2i (unsigned only‬‬

‫** بال ‪ srl‬بتنطبق القاعده ع ال ‪ unsigned‬بس والقسمه بناتج صحيح‬


‫~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~‬

‫‪15‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
,

shift ‫** تذكر انواع ال‬

16 done by : lilas qawasmeh


‫م‬
,

Seventh Lecture

Conditional Operations:

beq : Branch if equal to a labeled


beq rs, rt, L1
- if (rs == rt) branch to instruction labeled L1;
‫ اذا تساوى "اي اذا تحقق الشط " رح ينتقل لل‬rt ‫ مع‬rs ‫ انو ح يقارن‬beq ‫ال بعملو ال‬
‫ي‬
‫ال تحته‬
‫ " واذا ما تحقق رح ينفذ السطر ي‬L1" labeled

bne : Branch if not equal to a labeled


bne rs, rt, L1
- if (rs != rt) branch to instruction labeled L1;
‫نفس المبداء بس الشط هون انهم ما يتساوى‬
j : jump
j L1
- nunconditional jump to instruction labeled L1
‫ مبارسه بدون اي رسط‬labeled ‫رح ينتقل لل‬
EX :
C code:
if (i==j) f = g+h;
else f = g-h;
f, g,h,I,j in $s0, $s1 , $s2, $s3, $s4

17 done by : lilas qawasmeh


‫م‬
‫‪,‬‬

‫عندي هاد الكود بدي اكتبه بال ‪: MIPS‬‬


‫ش الزم اعرف شو بعمل الكود ؟ " رح يقارن ربي ‪ i‬و ‪ j‬اذا متساوين رح يجمع وذا الء رح‬‫اول ي‬
‫يطرح "‬
‫‪Compiled MIPS code:‬‬
‫خلينا نفكر فيها هيك << ر‬
‫من الكود رح ينفذ ال ‪ else‬؟‬
‫ر‬
‫الريجست ‪ s4‬ف روح لل ‪else‬‬ ‫ر‬
‫الريجست ‪ s3‬ال تساوي قيمة‬ ‫اذا كانت قيمة‬
‫‪bne $s3, $s4, Else‬‬
‫ال تحته وانا لما يتساوى‬
‫"يعن ما تحقق الشط " رح ينفذ السطر ي‬
‫ي‬ ‫طيب حكينا اذا تساوى‬
‫بدي اجمع‬
‫‪add $s0, $s1, $s2‬‬
‫‪j Exit‬‬
‫ليش حطينا ال ‪ j‬مشان بس ينفذ ال ‪ add‬ما يمر ع ‪ labeled‬ال ‪else‬‬
‫اخل يطرح‬
‫وعند ال ‪ else‬بدي ي‬
‫‪Else: sub $s0, $s1, $s2‬‬
‫… ‪Exit:‬‬
‫~~~~~~~~~~~~~~~~~~~~~~~~‬
‫‪EX:‬‬
‫‪C code:‬‬
‫;‪while (save[i] == k) i += 1‬‬
‫‪i in $s3, k in $s5, address of save in $s6‬‬
‫هاد الكود ح يقارن محتويات اري مع ‪ k‬طالما همه متساوين رح يضل يقارن لعند اول عنض‬
‫مش مساوي يطلع من ال ‪loop‬‬

‫‪18‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
‫‪,‬‬

‫طيب كيف افكر بحل لهيك سؤال ؟‬


‫لحن اقدر اتعامل معه‬ ‫ر‬
‫ريجست ر‬ ‫ال بالميموري الزم نعمله لود ع‬
‫اش اتفقنا انو العنض ي‬
‫اول ي‬
‫وحكينا عن كيف بطلع ال ‪ address‬لالري لما اتعامل مع ال ‪ MIPS‬نتذكره ‪:‬‬
‫‪Index‬‬ ‫‪address‬‬
‫‪0‬‬ ‫‪[$s6]+4*0‬‬
‫‪1‬‬ ‫‪[$s6]+4*1‬‬
‫‪2‬‬ ‫‪[$s6]+4*2‬‬
‫‪3‬‬ ‫‪[$s6]+4*3‬‬

‫بنالحظ انو بنضب ال ‪ index‬ب ‪ 4‬وبنضيفلو ال ‪base address‬‬


‫ه ‪ sll‬والنو بدي اضب ب ‪ 4‬ف رح اح ال‬
‫ال ‪ index‬موجود ب ‪ s3‬و عملية الضب ي‬
‫تان ع فرض ‪t1‬‬ ‫ر‬
‫‪ shamt=2‬ورح اخزن الجواب باي رجست ي‬
‫‪sll $t1, $s3, 2‬‬
‫بعدين ح اجمعلو ال ‪ base address‬الموجود ب ‪s6‬‬
‫‪add $t1, $t1, $s6‬‬
‫ر‬
‫رجست انا بختاره واختار هون ‪t0‬‬ ‫وبعدين بضل اعملو ‪ load‬ع‬
‫كالتال‬
‫ي‬ ‫ال بستخدمها لل ‪Load‬‬
‫وحكينا انو الصيغه ي‬
‫)‪Lw register, offset (register Includes base address‬‬
‫ه عباره عن "‪ " index *4‬لل‬ ‫كالتال ‪ :‬بضيف قيمه ال ‪ offset‬ي‬
‫ال ي‬ ‫ي‬ ‫ال بعملو‬
‫واتفقنا انو ي‬
‫‪ base address‬مشان يطلع ال ‪ address‬المطلوب‬
‫"يعن زبطنا‬
‫ي‬ ‫متغت ‪ i‬لهيك ضبنا ب ‪ 4‬وجمعنا‬
‫عت عنو ب ر‬‫ال ‪ offset‬الزم يكون رقم و هون ر‬
‫ال ‪ address‬المطلوب " لحالنا ف لهيك بحط ال ‪ offset‬صفر " النو ال ‪ address‬جاهز‬
‫عنا بال ‪t1‬‬
‫)‪lw $t0, 0($t1‬‬

‫‪19‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
‫‪,‬‬

‫ال وصلتلها وخزنتها ب ‪ t0‬مع ال ‪ k‬الموجوده ب ‪s5‬‬


‫هالء ضل اقارن القيمه ي‬
‫انه اللوب ف لهيك ح استخدم ‪ bne‬وخليه يروح‬
‫حكينا من السؤال انو لما ما يتساوى بدي ي‬
‫الي اسم ‪ labeled‬ع فرض ‪exit‬‬
‫‪bne $t0, $s5, Exit‬‬
‫ال فوق‬
‫ال الخطوات ي‬
‫طيب لو طلع متساوي بدي ياه يضيع واحد ع ال ‪ index‬و يرجع يكرر ي‬
‫اخل يعمل ‪ jump‬ل ‪ labeled‬واحطها عند اول خطوه‬ ‫معناتو ح ي‬
‫‪addi $s3, $s3, 1‬‬
‫‪j Loop‬‬

‫بصت ‪::‬‬
‫فالكود كامل ر‬
‫‪Compiled MIPS code:‬‬
‫‪Loop: sll $t1, $s3, 2‬‬
‫‪add $t1, $t1, $s6‬‬
‫)‪lw $t0, 0($t1‬‬
‫‪bne $t0, $s5, Exit‬‬
‫‪addi $s3, $s3, 1‬‬
‫‪j Loop‬‬
‫… ‪Exit:‬‬
‫~~~~~~~~~~~~~~~~~~~~~~~~~~‬
‫‪More Conditional Operations:‬‬
‫‪Slt: set one if less than‬‬
‫كالتال ‪:‬‬
‫ي‬ ‫الصيغه الو‬
‫‪slt rd, rs, rt‬‬
‫;‪if (rs < rt) rd = 1; else rd = 0‬‬

‫‪20‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
‫‪,‬‬

‫اال بال ‪ register‬الثالث رح‬


‫التان اذا اصغر من العدد ي‬
‫اال بال ‪ register‬ي‬
‫رح يقارن اذا العدد ي‬
‫يحط بال ‪ rd = 1‬واال ‪rd = 0‬‬
‫بتصت الول ‪register‬‬
‫ر‬ ‫يعن انتبه عمليت ال ‪set‬‬
‫ي‬

‫كالتال ‪:‬‬
‫ي‬ ‫وممكن يكون ‪ Immediate‬بانو يقارن ربي محتوى‪ register‬وعدد ثابت‬
‫‪slti rt, rs, constant‬‬
‫;‪if (rs < constant) rt = 1; else rt = 0‬‬

‫‪Use slt in combination with beq, bne:‬‬


‫بستخدم ال ‪ slt‬مع ال ‪ bne‬او ال ‪ beq‬مشان اعمل ‪ branch‬مع عمليات المقارنه المختلفه‬

‫‪Branch if less than :‬‬


‫‪slt $t0, $s1, $s2‬‬
‫احنا اتفقنا انو هون رح يقارن )‪ if ($s1 < $s2‬رح يعمل ‪ t0=1‬واال ‪t0=0‬‬
‫‪bne $t0, $zero, L‬‬
‫ال اعملتلها ‪ set‬ما بتساوي الصفر " اكيد واحد " معناتو ‪ s1<s2‬و‬
‫هون ح يشيك اذا القيمه ي‬
‫يعن كانو بعمل ‪ branch‬اذا اقل‬
‫ي‬ ‫ح يعمل‪branch‬‬
‫‪Branch if greeter than or equal :‬‬
‫‪slt $t0, $s1, $s2‬‬
‫‪beq $t0, $zero, L‬‬
‫ال اعملتلها ‪ set‬بتساوي الصفر معناتو هاي ‪ s1<s2‬ما تحققت و‬
‫هون ح يشيك اذا القيمه ي‬
‫اكت من او يساوي‬
‫ال تحقق هو عكسها " ‪ t "s1>=s2‬ح يعمل‪ branch‬اذا ر‬ ‫ي‬

‫‪21‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
,
‫ر‬
‫ بينما كان ممكن‬software ‫بانستكشن ع ال‬ ‫الحك‬ ‫حال ليش اعمل هاد‬
‫ي‬ ‫طيب هون ح اسال ي‬
‫ بعمل نفس الشغل ؟؟‬hardware ‫ جاهز معمول ع ال‬operation ‫يكون عندي‬

‫بصت عندي انو‬


‫ال ر‬
‫ي‬
‫بالتال ال‬ ‫ معقد ر‬hardware ‫ رح يصت ال‬hardware ‫ ف حال كان ع ال‬-
‫اكت‬
‫ي‬ ‫ر‬ ‫ي‬
‫ر‬
‫ ح يكون ابطء و بالمقابل عدد االنستكشن اقل‬cycle time

‫االنستكشن ر‬
‫اكت بس ال‬ ‫ر‬ ‫ رح يكون عدد‬software ‫ يف حال كان ع ال‬-
‫اكت‬
‫ ابسط ورسعته ر‬hardware

Why not blt, bge, etc?


Hardware for <, ≥, … slower than≠ ,=
Combining with branch involves more work per instruction, requiring a
slower clock
All instructions penalized!
beq and bne are the common case
This is a good design compromise

22 done by : lilas qawasmeh


‫م‬
‫‪,‬‬

‫‪Eighth Lecture‬‬

‫‪Branch Addressing: use I_format‬‬

‫‪op‬‬ ‫‪rs‬‬ ‫‪rt‬‬ ‫‪constant or address‬‬


‫‪6‬‬ ‫‪5‬‬ ‫‪5‬‬ ‫‪16‬‬
‫‪bits‬‬ ‫‪bits‬‬ ‫‪bits‬‬ ‫‪bits‬‬
‫نوع ال ‪- Opcode > branch‬‬
‫ال بدنا انقارنهم > ‪- two registers‬‬
‫ي‬
‫ينقلن عليه ال ‪- target address > branch‬‬
‫ي‬ ‫ال بدي‬
‫االدرس ي‬
‫‪** Most branch targets are near branch‬‬
‫** ال ‪ branch‬بقدر ينقلن لمكان قريب بس "ح يتوضح تحت ر‬
‫اكت "‬ ‫ي‬

‫ر‬
‫باالنستكشن هو ال ‪ offset‬وهو بحدد كم ‪ word‬بدي ابعد عن ال ‪pc‬‬ ‫ال‬
‫ال ‪ address‬ي‬
‫مع ؟‬
‫ال ي‬
‫طيب كيف بنحصل عل ال ‪ target address‬من ال ‪ offset‬ي‬
‫ال عنا بكون ‪ word_ address‬وانو ‪ memory‬ال ‪MIPS‬‬ ‫احنا اعرفنا انو ال ‪ address‬ي‬
‫ه عملية‬
‫عباره عن ‪ byte_ address‬ف الزم اضبه ب ‪ " 4‬عملية الضب ب ‪ 4‬بالبايتي ي‬
‫لتي "‪ "00‬للرقم "‬
‫اضافة مت ر‬

‫يعن ال ‪ address‬ي‬
‫ال بدي اروحله هو عباره عن وين‬ ‫مكان ي‬
‫ي‬ ‫طيب انا عرف كم الزم ابعد عن‬
‫انا هالء "‪ " pc‬وكم بدي ابعد‬
‫‪Target address = PC + offset × 4‬‬
‫‪- Note :‬‬
‫ال بدي انفذه ‪1) pc :‬‬ ‫ر‬
‫هو ادرس النكست انستكشن ي‬
‫‪2) PC already incremented by 4 by this time‬‬

‫‪23‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
‫‪,‬‬

‫‪Jump Addressing: use J_format‬‬

‫‪op‬‬ ‫‪address‬‬
‫‪6‬‬ ‫‪26‬‬
‫‪bit‬‬ ‫‪bits‬‬
‫ال قبل انو عباره عن ‪ word‬وبدي اضبه ب ‪ 4‬بس هون‬
‫ال ‪ address‬هون نفس فكرت ي‬
‫كالتال‬
‫ي‬ ‫بقرق عندي انو ‪ 26-bit‬ف رح اتعامل معه‬
‫اليمي "للضب ب ‪"4‬‬‫ر‬ ‫‪ )1‬بضيف ‪ 2bit‬ع‬
‫‪ )2‬بضيف ‪ 4bit‬ع الشمال من ال ‪PC31…28‬‬

‫‪PC31…28‬‬ ‫‪address‬‬ ‫‪00‬‬


‫‪4bit‬‬ ‫‪26bit‬‬ ‫‪2bit‬‬

‫‪EX:‬‬

‫هالء عندي هاد الكود وبدي اعرف ال ‪Offset Address‬؟‬

‫‪24‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
‫‪,‬‬

‫ال عند ال ‪ jump‬هو ال ‪loop‬‬


‫ال ‪ labeled‬ي‬
‫من الواضح انو ‪ address‬ال ‪ loop‬هو ‪8000‬‬

‫ه عباره عن ال ‪target address‬‬‫ال ‪ 8000‬ي‬


‫اعرفنا انو ال ‪ target address‬عباره عن ‪ two-bit‬اصفار وال ‪ offset‬و ‪ 4bit‬من ال ‪pc‬‬

‫ال معو‬‫الجزئي ي‬
‫ر‬ ‫العرف ال ‪ offset‬الزم اتخلص من‬
‫كبت‬
‫ش ر‬‫ال الرينج الهم ربي ‪ 2‬و ‪ 2‬وهو ي‬
‫‪31‬‬ ‫‪28‬‬
‫بتعت عن اخر ‪ 4bit‬ي‬‫مع ‪ 8000‬وال ‪ pc‬ر‬ ‫ال ي‬‫الرقم ي‬
‫بالتال فيه اشيلهم وما بأثره ع القيمه‬
‫ي‬ ‫مع ف حيكونه اصفار‬‫ال ي‬‫ع الرقم ي‬
‫اما بالنسبه للصفرين ف همه اجو من الضب ب ‪ 4‬بتخلص منهم بالقسمه ع ‪4‬‬
‫‪8000 /4=2000‬‬
‫بالتال ال ‪ offset‬يساوي ‪2000‬‬
‫ي‬

‫~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~‬

‫بالتال الرينج الها ‪ -215 > 215 -1‬و هاد هو‬


‫ي‬ ‫** ال ‪ Offset‬بال ‪ branch‬عباره عن ‪16-bit‬‬
‫مسموحل يكون ال ‪ branch‬ضمنه‬
‫ي‬ ‫ال‬
‫الرينج ي‬

‫مع ‪32-bit‬‬
‫** اما بال ‪ jump‬ف ي‬

‫استعي بال ‪ , jump‬نشوف كيف بالمثال‬


‫ر‬ ‫لش بعيد ح‬
‫طيب لو كنت بدي اعمل ‪ branch‬ي‬

‫‪EX:‬‬
‫‪beq $s0,$s1, L1‬‬
‫‪L2: …..‬‬
‫‪.‬‬
‫‪.‬‬
‫……‪L1 :‬‬
‫كالتال‬
‫ي‬ ‫كتت عن ال‪ Beq‬ح اعدل ع الكود‬
‫لو كانت ال ‪ L2‬بعيده ر‬

‫‪25‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
‫‪,‬‬

‫ينقلن ل ‪ L1‬واذا الء ح يكمل من‬


‫ي‬ ‫ال عندي ح يشوف اذا متساويات رح‬
‫‪ -‬الكود ي‬
‫عند ‪L2‬‬
‫كالتال ‪ :‬بعكس الشط بدل ‪ Beq‬بحط‪ Bne‬واذا مش متساويات‬ ‫ي‬ ‫ال ح اعملو‬‫‪ -‬ي‬
‫ال ح احط يف ‪ jump‬ع ‪L1‬‬ ‫ر‬
‫التان ي‬
‫روح ع ‪ L2‬واذا متساويات انزل لالنستكشن ي‬
‫‪ -‬الحل ‪:‬‬
‫‪bne $s0,$s1, L2‬‬
‫‪j L1‬‬
‫… ‪L2:‬‬
‫‪.‬‬
‫‪.‬‬
‫… ‪L1:‬‬
‫~~~~~~~~~~‬

‫‪26‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
‫‪,‬‬

‫‪CH3: Ninth Lecture‬‬


‫‪Floating Point :‬‬
‫طريقة لتمثيل االرقام ر‬
‫العشيه‬
‫> ‪IEEE 754‬‬
‫ال رح نستخدمه‬
‫ال ‪ Standard‬ي‬

‫نحك عن ال ‪normalized‬‬
‫ي‬ ‫بس قبل ما نبلش يف رح‬
‫‪Normalized :‬‬
‫يعن ان يكون ع شمال الفاصله" ‪ "one non zero digit‬بس عدد واحد وما يكون صفر‬
‫ي‬
‫نغي ع قيمته مثال‬
‫طيب لما بدنا نعمل ‪ normalized‬لرقم ‪ decimal number‬بدون ما ر‬
‫‪109 > 1.09 * 102‬‬
‫‪0.025 > 2.5 * 10-2‬‬
‫‪7.87676 > already normalized‬‬
‫طيب لو كان ‪< binary‬‬
‫‪ )1‬حكينا ع شمال الفاصله الزم عدد واحد و ما يكون صفر ف بحالة ال ‪ binary‬رح‬
‫يكون دايما ‪ 1‬النو ما عنا اال ‪ 0‬و ‪1‬‬
‫‪ )2‬تذكر اساس ال ‪ binary‬هو ‪2‬‬
‫‪1101 > 1.101 * 23‬‬
‫‪0.011 > 1.1 * 2-2‬‬
‫~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~‬

‫‪1.101 fraction * 23 expiration‬‬


‫ثابتي دائما‬
‫ال قبل الفاصله و ال ضب ب ‪ 2‬ر‬
‫و ال ‪ 1‬ي‬

‫‪1‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
‫‪,‬‬

‫‪1) Single precision‬‬

‫‪1-bit‬‬ ‫‪8-bit‬‬ ‫‪32-bit‬‬


‫‪s‬‬ ‫‪EXPONENT‬‬ ‫‪Fraction‬‬

‫‪S:‬‬
‫‪1. + > 0‬‬
‫‪2. - > 1‬‬
‫اول ‪ bit‬بتمثل اشارة الرقم اذا كان موجب ‪ 0‬واذا كان سالب ‪1‬‬

‫‪EXPONENT :‬‬
‫تعي عن االس و االس الو شاره مختلفه ممكن يكون موجب او سالب ‪ ,‬ف ممكن‬
‫رح ر‬
‫نستخدم ال ‪two’s complement‬‬
‫ه ‪ signed magnitude‬ف‬
‫لكن عنا بال ‪ format‬ال ‪ Fraction‬بال ‪ unsigned‬و ال ‪ s‬ي‬
‫وجدو انو تمثيل ال ‪ two’s complement‬معهم رح يغلب‬
‫بنيج بنضيف ل‬
‫ف حكو بدل ما نمثلهم ك ‪ signed number‬بال ‪ two’s complement‬ر ي‬
‫كل رقم ‪ bias value‬بحيث تعمله موجب ‪ ,‬ورح نوضحها بمثال‬
‫‪Fraction:‬‬
‫باف ال ‪ Bit‬اصفار‬
‫ال ‪ Fraction‬رح ناخده زي ما هو و بحطه بمكانه و بضيف ي‬

‫‪EX: 1.xxx * 2yyyy‬‬


‫‪ )1‬الرقم موجب ف ‪s=0‬‬
‫‪ )2‬باخد ال ‪ fraction‬وبحطو زي ما هو‬
‫نيج لل ‪: EXPONENT‬‬‫‪ )3‬رح ر ي‬

‫‪2‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
‫‪,‬‬

‫عنا الو ‪ 8-bit‬ف لو ح نمثله ك ‪ signed number‬رح يكون من‬


‫‪-27 _ 27 -1‬‬
‫‪-128 _ 127‬‬
‫وال ‪ -128‬محجوزه ف رح يكون من ‪ -127‬ل ‪127‬‬

‫** ف رح نضيف ‪ bias value‬قيمتها ‪28-1 -1 = 127‬‬


‫‪Exp = 127 + xxx‬‬
‫رح يطلع عنا رقم ‪ decimal‬بنحوله وبنحل‬
‫‪0‬‬ ‫‪127 + xxx‬‬ ‫‪yy….yy‬‬
‫~~~~~~~~~~~~~‬
‫‪EX : 0.75‬‬
‫‪ )1‬بنحولو ل ‪0.112 = 0.7510 , binary‬‬

‫‪ )2‬بنعمل ‪1.1 * 2-1 , Normalized‬‬

‫‪ )3‬الرقم موجب ‪s=0‬‬

‫‪ , Exp= 127 + -1 = 126 )4‬بنحولو ل ‪0111 1110 , binary‬‬

‫‪0‬‬ ‫‪01111110‬‬ ‫‪100...00‬‬


‫~~~~~~~~~~~~~~~~~~~~~~~~~~~‬
‫‪EX 2 : -10.375‬‬
‫‪ )1‬بنحولو ل ‪-1010.011 , binary‬‬

‫‪ )2‬بنعمل ‪1.010011 * 23 , Normalized‬‬

‫‪3‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
,

s=1 ‫) الرقم سالب‬3

1000 0010 , binary ‫ بنحولو ل‬, Exp= 127 + 3 = 130 )4

0 10000010 0100110...00
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
EX 3 :
0 11000111 00011010…000

binary ‫ وبدو اكتبه رقم‬Floating-Point Format ‫معطين الر قم‬


‫ي‬ ‫** هون العكس‬
‫عادي‬
‫ الرقم موجب‬,, S=0

‫كاالتال‬
‫ي‬ ‫بنعمل‬
1.fraction * 2exp-127

Fraction = 00011010
Exp = 110001112 => 19910

 1.00011010 * 2199-127
 1.00011010 * 272
~~~~~~~~~~~~~~~~~~~~~~~~

Note ::
‫ بعد االفصله ر‬6-decimal digit ‫ يسمح بتمثيل‬Single precision ‫ال‬
‫العشيه‬

4 done by : lilas qawasmeh


‫م‬
‫‪,‬‬

‫)‪2) Double precision (64-bit‬‬

‫‪1-bit‬‬ ‫‪11-bit‬‬ ‫‪52-bit‬‬


‫‪s‬‬ ‫‪EXPONENT‬‬ ‫‪Fraction‬‬

‫اكي‬
‫ال قبله بس هون الحجم ر‬
‫بنتعامل معه بنفس طريقة ي‬

‫** مع اختالف ال ‪ bias value‬قيمتها ‪211-1 -1 = 1023‬‬


‫‪Note ::‬‬
‫ال ‪ Double precision‬يسمح بتمثيل ‪ 16-decimal digit‬بعد االفصله ر‬
‫العشيه‬
‫~~~~~~~~~~~~~~~~~~~~~~~‬

‫‪Special case :‬‬

‫∞‪1) Exponent = 1111 1111 & Fraction=000..0000 >> ±‬‬

‫ال فوق ف الرقم بمثل الماالنهايه‬


‫يعن اذا كان الرقم عىل الهيئه ي‬
‫ي‬

‫‪2) Exponent = 1111 1111 & Fraction=Non zero >> not a number‬‬

‫اما يف هذه الحاله فأنهو ال يمثل رقم‬

‫‪5‬‬ ‫‪done by : lilas qawasmeh‬‬


Chapter 4
The Processor
§4.1 Introduction
Introduction
processor design ‫رح نحكي بهاد التشابتر عن ال‬ ◼

‫ بالتالي رح نتعامل مع مجموعه محدده‬design ‫رح نتعلم االفكار الرئيسيه لنعمل‬ ◼


: ‫ وهي‬instruction ‫من ال‬

◼ Memory reference: lw, sw


◼ Arithmetic/logical: add, sub, and, or, slt
◼ Control transfer: beq, j

‫ الي رح نتعامل معهم ومهم نرجع نتزكر ال‬instruction ‫بس هاي ال‬ ◼
‫ الهم ونكون فاهمينها وحافظينها‬format

Lilas qawasmeh
Instruction Execution
‫ ؟‬instruction ‫كيف بنفذ ال‬ ◼

1. fetch instruction
‫ النو ما‬CPU ‫ لل‬memory‫ من ال‬instruction ‫◼ هي عملية انو اقراء ال‬
memory ‫ح اشتغل عليه وهو بال‬
‫ هاد ال‬address ‫ بدي‬memory ‫ من ال‬instruction ‫◼ طيب الجيب ال‬
PC ‫ بكون موجود بال‬address
◼ PC (program counter ) : instruction memory , Store

address instruction to be executed


‫ الي بدي انفذه‬next instruction ‫ ال‬address ‫ بأشر ع‬pc ‫◼ ال‬

◼ PC  target address or PC + 4

Lilas qawasmeh
Instruction Execution
2. Decoding
control ‫ ويحدد قيم ال‬instruction ‫ لل‬decoding ‫هون رح ينعمل‬ ◼

‫ الي بدي ياه‬instruction ‫ الي رح تختار ال‬signal


3. Execution
instruction ‫بعتمد ع نوع ال‬ ◼

◼ Use ALU to calculate

◼ Arithmetic result :
arithmetic/logical operation ‫ وبنستخدم ال‬add‫مثل ال‬ ◼

◼ Memory address for load/store :

‫ و بنحتاج‬address ‫ والعمليه الي رح تصير هون هي حساب ال‬sw ‫ و‬lw ‫مثل ال‬ ◼

memory ‫ عل ال‬access
◼ Branch target address

ALU ‫ رح نعمل مقارنه بال‬.1 ◼

target address ‫ رح نحسب ال‬.2 ◼

Lilas qawasmeh
‫‪CPU Overview‬‬
‫▪ هال رح نبلش نتعلم ‪ design‬ال ‪CPU‬‬

‫▪ الي رح نعمله انو رح نشوف كل ‪ instruction‬كيف بشتغل و كيف ال ‪ design‬البسيط‬


‫الو ونرسمه بعدين رح ندمج كل شي مع بعض‬

‫▪ والي رح يتحكم بشو ح يصير هو ال ‪control signal‬‬

‫▪ رح نبلش جزء جزء وبالتفصيل‬

‫▪ بالبدايه رح يكون الشرح الجزء معينه من ال ‪ instruction‬وشوي شوي رح نفوت‬


‫بالتفصيل اكتر ف ركزوا ع الشي الي بكون مكتوب و الباقي كلو رح يتوضح‬

‫▪ الموضوع بسيط بس شوية تركيز‬

‫‪Lilas qawasmeh‬‬
‫‪CPU Overview‬‬
‫رح نبلش بال ‪add instraction‬‬ ‫◼‬

‫◼‬ ‫‪Add $s1, $s2, $s3‬‬


‫تعلمنا انو الي رح يصير كالتالي ‪ :‬بنجمع ‪ s2‬مع ‪ s3‬وبنخزنهم ب ‪s1‬‬ ‫◼‬

‫وحكينا انو ال ‪ register‬كلهم موجودين ب ‪ file register‬ف انا ح اخد‬ ‫◼‬

‫قيتيم منه و اجمعهم‬


‫وعملية الجمع بتصير بال ‪ALU‬‬ ‫◼‬

‫ف هيك فينا نعمل ال ‪ design‬التالي‬ ‫◼‬

‫‪S2‬‬

‫‪S2+S3‬‬
‫‪S3‬‬ ‫‪+‬‬

‫‪Lilas qawasmeh‬‬
‫‪CPU Overview‬‬
‫هالء نيجي لل ‪lw instraction‬‬ ‫◼‬

‫◼‬ ‫)‪lw $s1, 32($s2‬‬


‫تعلمنا انو الي رح يصير كالتالي ‪:‬‬ ‫◼‬

‫رح نجمع ال ”‪ address”32‬مع قيمة ال ‪ register s2‬لنحصل على ال ‪target‬‬ ‫◼‬

‫‪address‬‬
‫وعرفنا انو ال ‪ 32‬بنحصل عليها من ال ‪instruction‬‬ ‫◼‬

‫وعملية الجمع بتصير بال ‪ALU‬‬ ‫◼‬

‫ف هيك فينا نعمل ال ‪ design‬التالي‬ ‫◼‬

‫‪S2‬‬

‫‪S2+32‬‬
‫‪32‬‬ ‫‪+‬‬

‫‪instruction‬‬ ‫‪Lilas qawasmeh‬‬


‫‪CPU Overview‬‬
‫طيب الحظنا انو ال ‪ add‬وال ‪ lw‬بستخدمه ال ‪ ALU‬وانه اول ‪ input‬الها دايما من ال‬ ‫◼‬

‫‪ register file‬والتاني بختلف‬


‫ف مش منطقي استخدم ‪ tow ALU‬بعمله نفس الشي بسبب اختالف ‪ input‬الهم‬ ‫◼‬

‫الي رح نعمله انو رح نستخدم ‪ ALU‬وحده وندخل ال ‪ two input‬ونصير نختار اي وحده‬ ‫◼‬

‫بدي حسب النوع‬


‫الشي الي بستخدمه الختار بين تنين او اكتر هو ال ‪multiplexer‬‬ ‫◼‬

‫‪M‬‬
‫‪u‬‬
‫‪x‬‬

‫‪S‬‬
‫‪instruction‬‬

‫‪Lilas qawasmeh‬‬
Combinational Elements
: ‫ الي رح نستخدمهم‬gate ‫بعض ال‬ ◼

◼ AND-gate ◼ Adder A
Y
+
◼ Y=A&B ◼ Y=A+B B

A
Y
B

◼ Arithmetic/Logic Unit
◼ Multiplexer ◼ Y = F(A, B)
◼ Y = S ? I1 : I0
A
I0 M
u Y ALU Y
I1 x
B
S F

Lilas qawasmeh
Sequential Elements
◼ Register: stores data in a circuit
◼ Uses a clock signal to determine when to update the
stored value
◼ Edge-triggered: update when Clk changes from 0 to 1

‫ بغير ع قيمة ال‬edge ‫ ف عند ال‬c|k ‫ مشبوكين ب‬register‫ال‬ ◼

register

Clk

D Q D

Clk Q

Lilas qawasmeh

Sequential Elements
◼ Register with write control
Only updates on clock edge when write control input

is 1
◼ Used when stored value is required later

‫ اذا‬edge ‫ عند ال‬flip flop ‫ رح يسمحلي اكتب ع ال‬write control ‫◼ عنا‬


‫ فقط‬active ‫كان‬

Clk

D Q
Write
Write
Clk D

◼Lilas qawasmeh
Clocking Methodology
◼ Combinational logic transforms data during
clock cycles
◼ Between clock edges
◼ Input from state elements, output to state
element
◼ Longest delay determines clock period
Instruction Fetch
increment ‫ رح تعمل‬instruction ‫ وعرفنا اول ما يبلش تنفيذ ال‬pc ‫حكينا عن ال‬ ◼
next instruction ‫ لتروح ع ال‬4 ‫بمقدار‬
pc ‫ والناتج رح يرجع ع ال‬add ‫ بستخدام‬4 ‫ مع‬pc ‫ف رح اجمع ال‬ ◼

Increment by
4 for next
instruction

32-bit
register

‫فيها قيمة ال‬next instruction


beq ‫ او‬jump ‫في حال مافي‬ ◼Lilas qawasmeh
R-Format Instructions
file register ‫ مخزنين بال‬32 register ‫حكينا انو عنا‬ ◼

‫ ل‬write ‫ و‬tow register ‫ ل‬read ‫ بسمحلي اعمل‬file register ‫ال‬ ◼


‫ واحد بنفس الوقت‬register

◼Lilas qawasmeh
R-Format Instructions
◼ Add $s1,$s2,$s3 tow register ‫ال‬
read ‫الي ح اعمللهم‬
register‫ال‬
‫الي ح ينعمله‬
write

op Rs Rt Rd …

‫ االول‬register ‫رقم ال‬


read ‫الي بدي اعملو‬

‫ التاني‬register ‫رقم ال‬


read ‫الي بدي اعملو‬

‫ الي‬register ‫رقم ال‬


write ‫بدي اعمل عليه‬

‫ الي بدي‬data ‫ال‬


Rd ‫اخزنها بال‬ ‫ بستخدمه لما بدي اعدل على ال‬Control
»s2+s3« write register
R-Format Instructions
ALU ‫طيب عملية الجمع حكينا انها رح تصير بال‬ ◼

: ALU ‫خلينا نتعرف ع ال‬ ◼

‫ بتحكم‬Control 2 output ‫ وبتطلع‬2 Input ‫ بتاخد‬ALU ‫ال‬ ◼


‫بنوع ال‬
operation

input ‫اول‬

/ 1 ‫ بتكون‬flag ‫هاي‬
32-bit ‫لما يكون ال‬
input ‫تاني‬ result =0
/
/ 32-bit
32-bit ‫ ناتج ال‬, output ‫ال‬
operation

◼Lilas qawasmeh
Load/Store Instructions
‫ بتحكم‬Control store ‫ وال‬load ‫ال‬ ◼
‫بالكتابه على‬ ‫ ع ال‬access ‫بيعملو‬
write register‫ال‬
memory
‫ الي‬address ‫ال‬
‫بدي اخزن عليه‬ ‫ بتاخد ال‬memory ‫ال‬ ◼

/ / ‫ للمكان الي رح‬address


‫اقراء منو او اكتب عليه‬
32-bit 32-bit

‫ رح‬store ‫اذا بدي اعمل‬


‫ الي بدي‬data ‫ال‬
/ ‫ لل‬active ‫نعمل‬

32-bit
‫اخزنها‬ Memwrite

‫ رح اعمل‬load ‫و بال‬ ◼
Memread ‫ لل‬active
‫ بتحكم‬Control
‫بالقراءه من‬
read register‫ال‬

◼Lilas qawasmeh
Load/Store Instructions
◼ Lw $s1 , 64($s2)

op Rs Rt Offset

‫ الي في‬register ‫ال‬ ‫ الي رح‬register ‫ال‬


base address ‫ال‬ load ‫اعمل عليه‬

target address ‫مشان احسب ال‬ ◼


Offset
offset 32-bit ◼ Target = offset + base
◼ Target = 64 + $rs
16_bit , offset ‫ال‬ ◼

32_bit , rs ‫ال‬ ◼

‫ ويكرره‬bit ‫رح ياخد اخر‬ offset ‫ لل‬sign-extend ‫الجمعهم بعمل‬ ◼

‫ مره‬16

◼Lilas qawasmeh
‫‪Branch Instructions‬‬
‫◼‬ ‫‪Beq $s1,$s2,labels‬‬

‫‪op‬‬ ‫‪Rs‬‬ ‫‪Rt‬‬ ‫‪Offset‬‬

‫◼ بال ‪ beq‬رح نعمل عمليتين بنفس الوقت‬


‫‪ )1‬رح نوجد ال ‪ target address‬عن طريق عمل ‪add‬‬
‫‪target address = pc + offset*4‬‬
‫‪ )2‬رح نعمل ‪ subtraction‬بين قيم ال ‪ , two register‬اذا كان الجواب صفر بعرف انهم‬
‫متساويات وبعمل ‪ branch‬واال ما رح نعمل ‪branch‬‬

‫** عملية ال ‪ subtraction‬رح تكون بال ‪ ALU‬بالتالي رح نستخدم ‪ Add‬خاص لل‬


‫‪address‬‬

‫بالساليد التالي <<‬

‫◼‬‫‪Lilas qawasmeh‬‬
Branch Instructions
Pc+4 >
increment pc

Target address

pc

Offset*4

Lilas qawasmeh

: ‫** الي رح يصير‬
Branch Instructions register ‫ من ال‬rt ‫ و‬rs ‫رح يقراء ال‬
‫ ويشيك‬ALU ‫ وبعدين رح يطرحهم بال‬file
zero control‫ع ال‬
‫ ما بعمل‬0 ‫ واذا‬branch ‫ بعمل‬1 ‫اذا كان‬
branch
op Rs Rt Offset

Just
re-routes
wires

‫هون رح يشيك اذا‬


beq‫تحقق ال ل‬

Sign-bit wire
replicated
◼Lilas qawasmeh
‫‪Branch Instructions‬‬
‫رح يحط اول‬ ‫بدنا نوضح الي بصير بال ‪ sign-extend‬وال ‪shift‬‬ ‫◼‬
‫> ‪tow bit‬‬
‫‪zero‬‬ ‫ال ‪ sift‬عملية اعادة ترتيب االسالك‬ ‫◼‬

‫ال ‪ sign-extend‬هي عملية تكرر اخر سلك‬ ‫◼‬

‫‪0‬‬

‫‪0‬‬
‫‪0 bit‬‬
‫‪0 bit‬‬

‫‪15 bit‬‬

‫‪29 bit‬‬ ‫يكرر اخر سلك‬


‫‪ 16‬مره‬
‫‪31 bit‬‬

‫وباقي ال ‪bit‬‬
‫زي ما همه‬

‫◼‬‫‪Lilas qawasmeh‬‬
‫هيك بنكون حكينا عن ‪ 3‬انواع من ال ‪ instruction‬كل واحد لحال‬ ‫◼‬

‫ضل ال ‪ jump‬رح نرجعلو اخر شي‬ ‫◼‬

‫هالء بدنا نشوف كيف بنربطهم ببعض‬ ‫◼‬

‫وكيف بنحدد ال ‪ path‬حسب نوع ال ‪instruction‬‬ ‫◼‬

‫وكيف ح نستخدم ال ‪control signal‬‬ ‫◼‬

‫رح نبلش فيهم بالتدريخ لنفهم ال ‪ full bath‬كامل‬ ‫◼‬

‫◼‬‫‪Lilas qawasmeh‬‬
R-Type/Load/Store Datapath
lw/sw ‫ مع ال‬R-type ‫ لل‬datapath ‫هاي بتمثل ال‬ ◼

ALU ‫ لل‬input ‫بيختلفو بتاني‬ ◼

output ‫وبمكان تخزين ال‬ ◼


input ‫ بتتحكم بال‬ALUSrc control ‫ال‬
Instruction ‫ حسب نوع ال‬ALU ‫التاني لل‬
‫ بتتحكم بال‬MemtoReg control ‫ال‬
‫ لوين‬memory ‫ الي طالع من ال‬output
Instruction ‫رايح حسب نوع ال‬

◼Lilas qawasmeh
‫هاي بتمثل ال ‪ datapath‬السابق مع ال ‪branch‬‬ ‫◼‬

‫‪Full Datapath‬‬ ‫ال ‪ branch‬بتختلف بقيمة ال ‪pc‬‬ ‫◼‬

‫ال ‪ PCSrc control‬بتتحكم بال‬


‫قيمه الي رح ارجعها لل ‪PC‬‬
‫حسب اذا ح يصير ‪ Branch‬او‬
‫الء‬

‫◼‬ ‫‪Lilas qawasmeh‬‬


§4.4 A Simple Implementation Scheme
ALU Control
ALUop ‫ رح يحدد ال‬OpCode ‫ال‬ ◼

ALU Control ‫ رح يحددوا ال‬funCode ‫ مع ال‬ALUop ‫ال‬ ◼

OpCode / ALUOP /
6-bit 2-bit
/ ALU
Control
funCode / 4-bit

6-bit

◼Lilas qawasmeh
§4.4 A Simple Implementation Scheme
ALU Control
◼ ALU used for
◼ Load/Store: F = add
◼ Branch: F = subtract
◼ R-type: F depends on funct field
6-function ‫ رح تعمل‬ALU ‫حكينا انو ال‬ ◼

‫ حسب المطلوب‬6 ‫ ممكن انفذ اي واحد من ال‬r-type ‫بال‬ ◼

address ‫ لل‬Add ‫ رح تعمل‬ALU ‫ ف دايما ال‬lw/sw ‫اما ال‬ ◼

‫ لحتى تقارن بينهم‬register ‫ لقيم ال‬sub ‫ رح تعمل‬beq ‫وال‬ ◼

ALU control Function


0000 AND
0001 OR ALU control ‫ الو‬func ‫كل‬
‫بعبر عنو‬
0010 add
0110 subtract
0111 set-on-less-than
◼Lilas qawasmeh
1100 NOR
ALU Control
< lw/sw & beq ‫ لل‬funct ‫ال‬
don’t carry
‫ الهم ثابته دائما زي‬operation ‫النو ال‬
‫ما حكينا بالساليد السابق‬

opcode ALUOp Operation funct ALU function ALU control


lw 00 load word XXXXXX add 0010
sw 00 store word XXXXXX add 0010
beq 01 branch equal XXXXXX subtract 0110
R-type 10 add 100000 add 0010
subtract 100010 subtract 0110
AND 100100 AND 0000
OR 100101 OR 0001
set-on-less-than 101010 set-on-less-than 0111

ALU ‫ح يحددو ال‬


Control ◼Lilas qawasmeh
The Main Control Unit
‫عدد مرات‬ ‫ واحد‬datapath ‫ صممنا الهم‬instruction ‫ من ال‬3 format ‫عنا‬ ◼

shift ‫ال‬ ‫ ح نوضحها تحت‬, ‫ بطريقه مختلفه‬instruction ‫ بجزء محتوى ال‬format ‫هالء كل‬ ◼

R-type 0 rs rt rd shamt funct


31:26 25:21 20:16 15:11 10:6 5:0

Load/
35 or 43 rs rt address
Store
31:26 25:21 20:16 15:0

Branch 4 rs rt address
31:26 25:21 20:16 15:0

opcode always read, write for


read except R-type sign-extend
for load and load and add
‫ ثابتين‬6 bit ‫ بمثله رقم‬5 bit ‫ بمثله رقم‬5 bit
‫بمثله ال‬ read ‫اول‬ ‫ بمثله رقم‬5 bit write ‫ال‬ ‫ بمثله رقم‬16 bit
opcode ‫ دائما‬register read ‫تاني‬ register offset address ‫ال‬
register
‫ح نعمل‬ ‫رح نزبط ال‬
‫ لقيمة‬increment target address
pc ‫ال‬

opcode ‫جزء ال‬


‫رح يروح ع ال‬
control unit
‫ليحدد جميع ال‬
control signal

Rs

Rt
‫ ال‬address ‫في‬
‫ الي‬instruction Rd
‫بدي انفذه‬

offset
‫رح نقراء‬
‫ من‬instruction‫ال‬
instruction
memory
‫رح اقراء او اكتب‬
memory ‫ع ال‬
‫رح يتجزء ال‬ ‫ح يقراء قيم ال‬ sign ‫رح نعمل‬ ‫رح ينفذ ال‬
instruction register ‫ لل‬extend operation
wire ‫على ال‬ ‫المطلوبه‬ offset ‫المطلوبه‬
‫‪Datapath With Control‬‬
‫رح تتحكم بال ‪ bit‬الي داخلين ع ال ‪ write register‬بحيث بحالة ال‬
‫‪ R-Type‬بناخد جزء ال ‪ rd‬اما بال ‪ lo/sw‬بناخد جزء ‪rt‬‬

‫بتتحكم بقيمة ال ‪ pc‬الي ح ترجع لل ‪pc‬‬


‫حسب وجود ‪ branch‬او الء‬

‫بتتحكم بال ‪ output‬الي طالع من ال‬ ‫بتتحكم بالقراءه من‬


‫‪ memory‬لوين رايح حسب‬ ‫ال ‪memory‬‬

‫بتحدد نوع ال ‪ operation‬بال‬


‫بتتحكم بال ‪ input‬التاني‬ ‫‪ALU‬‬
‫لل ‪ALU‬‬

‫بتتحكم بالكتابه ع‬
‫ال ‪memory‬‬

‫بتتحكم بالكتابه ع‬
‫ال ‪Register‬‬
‫◼‬‫‪Lilas qawasmeh‬‬
‫‪R-Type Instruction‬‬
‫كونا بال ‪ R-type‬رح يكون ال‬
‫‪ branch=0‬بحيث رح ناخد‬
‫كونا بال ‪ R-type‬رح يكون‬
‫قيمة ال ‪ pc+4‬لل ‪pc‬‬
‫ال‪ ALUSrc=0‬بحيث رح‬
‫يكون تاني ‪ input‬لل ‪ALU‬‬
‫من ال ‪register file‬‬

‫كونا بال ‪ R-type‬رح يكون‬


‫ال‪ MemtoReg=0‬بحيث رح‬
‫ناخد القيمه الي نتجة من ال‬
‫‪ ALU‬مباشره ع ال‬
‫‪ Register file‬بدون ما نعمل‬
‫شي بال ‪memory‬‬

‫كونا بال ‪ R-type‬رح يكون ال‬


‫‪ RegDest=1‬بحيث رح اخد ع ال‬
‫‪ write register‬قيمة ال ‪rd‬‬
‫◼‬‫‪Lilas qawasmeh‬‬
‫‪Load Instruction‬‬
‫كونا بال ‪ load‬رح يكون‬
‫كونا بال ‪ load‬رح يكون ال‬
‫ال‪ ALUSrc=1‬بحيث رح يكون‬
‫‪ branch=0‬بحيث رح ناخد‬
‫تاني ‪ input‬لل ‪ ALU‬من ال ‪sign‬‬
‫قيمة ال ‪ pc+4‬لل ‪pc‬‬
‫‪extend‬‬
‫النو رح اجمع ال ‪address‬‬
‫ال ‪ offset‬مع ال ‪base‬‬
‫‪ address‬الموجود ب ‪rs‬‬

‫كونا بال ‪ load‬رح يكون‬


‫ال‪ MemtoReg=1‬بحيث رح‬
‫نقراء من ال ‪ Memory‬قيمة ال‬
‫‪ address‬الي نتج من ال‬
‫‪ALU‬‬
‫وبعدين نخزنها بال ‪file‬‬
‫‪redister‬‬

‫كونا بال ‪ load‬رح يكون ال‬


‫‪ RegDest=0‬بحيث رح اخد ع ال‬
‫‪ write register‬قيمة ال ‪rt‬‬
‫◼‬‫‪Lilas qawasmeh‬‬
‫‪Branch-on-Equal Instruction‬‬
‫كونا بال ‪ Bracch‬رح يكون ال‬
‫‪branch=1‬‬ ‫لنعمل ‪ branch‬الزم يتحقق شرطين ‪:‬‬
‫‪ (1‬ال ‪branch=1‬‬
‫عندما يكون نوع ال ‪instruction = branch‬‬
‫‪ )2‬ال ‪Zero=1‬‬
‫لما يتحقق شرط ال ‪ branch‬بان قيم ال‬
‫‪ regiser‬متساويه‬

‫كونا بال ‪ Bracch‬رح يكون‬


‫ال‪ ALUSrc=0‬بحيث رح يكون‬
‫تاني ‪ input‬لل ‪ ALU‬من ال ‪file‬‬
‫‪register‬‬
‫النو رح اطرح قيمة ال ‪rs – rt‬‬
‫كونا بال ‪ Bracch‬ف قيمة ال‬
‫القارن بينهم‬
‫‪ RegDest‬ما بتهمني النو ما ح‬
‫اكتب ع اي ‪register‬ؤ‬
‫◼‬‫‪Lilas qawasmeh‬‬
Implementing Jumps
Jump 2 address
31:26 25:0

: jump ‫نيجي لل‬ ◼

‫ مباشره بدون اي شرط‬label ‫ اعرفنا انو رح ينقلنا ع مكان ال‬, jump ‫ال‬ ◼

‫ عن‬pc ‫ ونوديه لل‬jump ‫ ال‬address ‫الشي الوحيد الي ح نعمله انو نزبط‬ ◼

wirs ‫طريق ترتيب ال‬


◼ Target = pc[28-31] _ offset _ 00

most significant bit ‫ال‬ ‫ اي ضرب‬shift lift ‫لتعمل‬


pc ‫من ال‬ 26-bit jump address
4‫ب‬

◼Lilas qawasmeh
Datapath With Jumps Added

‫الحظ انو ما ح يستخدم اي من‬


‫ او اال‬ALU ‫ او ال‬register file
Memory
Lilas qawasmeh

‫ التالي‬instruction ‫مثال يوضح سير ال‬ ◼

◼ Add $s1 , $s2 , $s3


increment ‫ح نعمل‬
pc ‫لقيمة ال‬

0
‫ لل‬input ‫تاني‬
‫ رح يكون‬ALU
Reg file ‫من ال‬

s2 0
0
s3
address
instruction
add s1 ‫رح ناخد ناتج ال‬
ALU=
S2+S3
‫رح نقراء‬ 1 ‫ويخزنها بال‬
‫ من‬instruction‫ال‬ Register file
instruction
memory

‫ما ح يعمل اي شي‬


memory ‫بال‬
‫رح نخزن قيمة ال‬ ‫رح يتجزء ال‬ ‫ح يقراء قيم ال‬ ‫رح ينفذ ال‬
‫ ع‬operation instruction register operation
s1 ‫ الي هي‬rd wire ‫على ال‬ $s1&$s3 s2+s3
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