This is an old revision of the document!


Laboratorul 10 - Recapitulare

1. Obiective

2. Taskuri

3. Problemă examen

Î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:

ATENȚIE! Vă rugăm ca în redactarea problemelor să folositi notațiile/convențiile prezentate la curs și la laborator.

Exemplu problemă BRANCH PREDICTOR

Fie următorul cod în assembly (simplificat):

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

Observații

  1. 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)
  2. Î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).

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)

Rezolvare

Rezolvare

4. Model colocviu

Colocviul va fi scris (nu există probă practică pe calculator). Acesta este closed book. Regulamentul se află 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.

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".

5. Linkuri utile

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