Differences

This shows you the differences between two versions of the page.

Link to this comparison view

cn1:laboratoare:10 [2020/04/27 01:08]
adina.smeu [2. Taskuri]
— (current)
Line 1: Line 1:
-===== Laboratorul 10 - Recapitulare ===== 
- 
-==== 1. Obiective ==== 
- 
-{{page>​cn1:​laboratoare:​10:​goals&​nofooter}} 
- 
-==== 2. Taskuri ==== 
- 
-{{page>​cn1:​laboratoare:​10:​tasks&​nofooter}} 
- 
-==== 3. Problemă examen ==== 
- 
-{{page>​cn1:​laboratoare:​10:​exam&​nofooter}} 
- 
-În vederea pregătirii problemei pentru examen (a.k.a proba numita “problema”),​ trebuie să aveți în vedere cele 2 mari tipuri de probleme prezentate la curs: 
-  * BRANCH PREDICTOR 
-  * DATA HAZARDS IN PIPELINE 
- 
-Pentru ambele tipuri de probleme, găsiți teoria necesara în cursul de CN de pe moodle. 
-  *Pentru primul tip de problema, pe lângă exemplele din curs, atașăm mai jos un model complet de redactare a acestui subiect. 
-  *Pentru tipul al doilea, aveți numeroase exemple (figuri) în curs care ilustrează cum sunt rezolvate aceste tipuri de hazarde. 
-In plus, puteți consulta următoarele link-uri: 
-  * [[https://​en.wikipedia.org/​wiki/​Branch_predictor#​One-level_branch_prediction|Branch predictor]] 
-  * [[http://​web.cs.iastate.edu/​~prabhu/​Tutorial/​PIPELINE/​hazards.html|Hazard in pipeline]] 
-  * [[http://​web.cs.iastate.edu/​~prabhu/​Tutorial/​PIPELINE/​dataHaz.html|Data hazards in pipeline]] 
-  * [[https://​en.wikipedia.org/​wiki/​Amdahl%27s_law|Amdahl'​s law]] 
-  * [[https://​en.wikipedia.org/​wiki/​Speedup|Speedup]] 
- 
-<note tip> 
-**ATENȚIE!** Vă rugăm ca în redactarea problemelor să folositi notațiile/​convențiile prezentate la curs și la laborator. 
-</​note>​ 
- 
-== Exemplu problemă BRANCH PREDICTOR == 
- 
-Fie următorul cod în assembly (simplificat):​ 
-<code asm> 
-mov ax, $a 
-mov bx, $b 
-  
-_while: 
-    cmp ax, bx  ; ax ? bx 
-  
-    jg _greater ; ax > bx ? 
-    jl _less    ; ax < bx ? 
-    je _pwp     ; ax == bx ? 
-  
-    jmp _while 
-  
-_greater: 
-    sub ax, bx ; ax = ax - bx 
-    jmp _while 
-  
-_less: 
-    sub bx, ax ; bx = bx - ax 
-    jmp _while 
-  
-_pwp: ;se afiseaza conținutul lui ax 
- 
-</​code>​ 
- 
-<note tip> 
-**Observații** 
-  - Recapitulare assembly 
-    * ''​jmp''​ este instrucțiune ce implementează un salt necondiționat 
-    * ''​jg'',​ ''​jl'',​ ''​je''​ sunt instrucțiuni ce implementează salturi CONDITIONATE (doar pentru acestea Branch Predictorul poate optimiza lucruri) 
-    * ''​add''/''​sub'',​ ''​cmp''​ sunt folosite pentru adunare/​scadere și comparare 
-    * ''​mov''​ este instrucțiunea care copiază în destinație (primul operand), conținutul sursei (al doilea operand) 
-  - În acest exemplu, instrucțiunile au fost explicate, atat în această secțiune cat și în cod (prin comentarii). Ne așteptăm ca la examen să știți ce fac instrucțiunile:​ ''​add''/''​sub'',​ ''​je''/''​jg''/''​jl''/''​jmp'',​ ''​cmp'',​ ''​inc'',​ load (''​ld''​) /store (''​st''​)/''​mov''​. De asemenea, ce este un registru (ex. ''​ax''/''​eax'',​ ''​bx''/''​ebx'',​ ''​cx''/''​ecx'',​ ''​dx''/''​edx''​ sau ''​r1'',​ ''​r2'',​ ''​r3''​ …), cum luăm valoarea de la o adresa (''​b''​),​ sintaxa pentru instrucțiuni (ex. ''​mov reg destinație reg_sursa''​). 
-</​note>​ 
- 
- Avem 2 procesoare, fiecare având frecvența de 1Ghz, care execută acest cod, procesoarele A și B. Metoda de branch prediction folosită de fiecare este: 
- 
-**A.** 1-bit counter (taken/not taken) 
- 
-**B.** 2-bit counter (strongly taken/weak taken/weak not taken/​strongly not taken) 
- 
-Ambele pornesc cu o abordare pesimistă, counterul/​state machine-ul fiecăreia având starea inițială pentru procesorul A not taken și pentru B strongly not taken. De altfel, ambele implementează un branch predictor global, astfel că există un singur counter/​state machine global, pentru toate branch-urile. Se știu numărul de cicli de ceas pentru fiecare tip de instrucțiune:​ mov - 1 ciclu, cmp - 1 ciclu, sub - 1 ciclu, branch - 20 cicli (dacă nu a fost prezis corect) sau 2 cicli (dacă a fost prezis corect). 
- 
-Se cer următoarele:​ 
- 
-**1.** Pentru input-ul a=26 și b=34 să se evidențieze prin ce stări trec branch-predictor-ele celor 2 procesoare, semnalându-se și care branch-uri au fost prezise corect, respectiv incorect. (4p) 
- 
-**2.** Să se calculeze timpul de rulare al programului pe cele 2 procesoare, pentru input-ul de la punctul 1. (3p) 
- 
-**3.** FIe un procesor C, cu frecvență de 1Ghz, care are aceeași metoda de branch prediction pe 2 biți ca procesorul B, implementând însă un branch predictor local (câte un counter/​state machine pentru fiecare branch). Execută procesorul C codul dat mai repede decât procesorul A sau B, pentru input-ul de la punctul 1? Argumentați. Care este speed-up față de B? (3p) 
- 
-<spoiler Rezolvare>​ 
-[[https://​docs.google.com/​spreadsheets/​d/​1VR7XeqPSfzxMAJiE3ClhReDBkI_NgrWj0_gOplrMnFU/​edit#​gid=0​|Rezolvare problema]] 
-</​spoiler>​​ 
- 
-==== 4. Model colocviu ==== 
- 
-{{page>​cn1:​laboratoare:​10:​test&​nofooter}} 
- 
-Colocviul va fi scris (nu există probă practică pe calculator). Acesta este closed book. Regulamentul se află [[https://​ocw.cs.pub.ro/​courses/​cn1/​regulament|aici]]. 
- 
-Formatul acestuia va fi următorul: 
-  * 4 subiecte de câte 2.5 puncte 
-  * Timp de lucru 50 min. Fără documentații. Totul se redactează pe foaie. 
-  * Colocviul verifică toate cunoștințele din materia predată la laborator, printre care și noțiuni de Verilog (veți scrie cod pe foaie). 
- 
-Exemple de subiecte: 
-  * Subiectul 1 va fi o întrebare de teorie/o comparație/​o definiție/​un algoritm/o idee/un principiu/​etc din materia de laborator. 
-  * Subiectul 2 poate sa ceară corectarea unui cod Verilog dat, menționarea unor concepte + exemplificare prin cod Verilog (ex. semnătură module, instanțiere module), etc. 
-  * Subiectul 3 va presupune scrierea unui modul/o secvență de cod Verilog. Acesta va fi asemănător cu exercițiile deja codate în laboratoare. 
-  * Subiectul 3 va presupune scrierea unui modul/o secvență de cod Verilog. Acesta va fi asemănător cu exercițiile deja codate în laboratoare. 
-  * Indicii 1, 2, 3, 4 sunt orientativi. (Ex. Subiectul 1 poate sa fie FSM Moore, iar subiectul 4 poate sa fie o întrebare. Ați prins ideea. :D) 
- 
-Mai jos puteți consulta un model. 
- 
-<code verilog> 
-Vineri 10-12 26.05.2017 
-Colocviu CN1 
-(2.5p) Care este diferența dintre un half adder și un full adder? De ce avem nevoie de ambele? 
-  
-  
-(2.5p) Implementați în Verilog un sumator pe 2 biți. Sumatorul NU are intrare de carry. NU puteți folosi 
-operatorul +. 
-  
-(2.5p) Pornind de la următoarea descriere la nivel procedural al unui modul în Verilog scrieți descrierea 
-la nivel structural al aceluiași modul. 
-module foo(input a, input b, input c, output reg out); 
-     ​always @(*) begin 
-         case (b) 
-             ​1’b0:​ begin 
-                      out <= a | c; 
-                   end 
-             ​1’b1:​ begin 
-                      out <= 0; 
-                   end 
-         ​endcase 
-     end 
-endmodule 
-  
-(2.5p) Creați diagrama pentru un automat cu stări de tip Moore care primește intrările '​1'​ și '​0'​ și are ca 
-ieșire "​da"​ sau "​nu"​. Automatul trebuie să recunoască secvențe care conțin subsecvența "​1010"​. 
-Exemplu: intrare "​1010"​ => ieșire "​da";​ intrare "​111010"​ => ieșire "​da";​ intrare "​101001"​ => ieșire "​da";​ 
-intrare "​1111"​ => ieșire "​nu";​ intrare "​1011"​ => ieșire "​nu";​ intrare "​10010"​ => ieșire "​nu"​. 
-</​code>​ 
- 
- 
-==== 5. Linkuri utile ==== 
- 
-{{page>​cn1:​laboratoare:​10:​links&​nofooter}} 
- 
-[[https://​ocw.cs.pub.ro/​courses/​cn1]] 
  
cn1/laboratoare/10.1587938903.txt.gz · Last modified: 2020/04/27 01:08 by adina.smeu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0