Professional Documents
Culture Documents
02 ILP Spring2021
02 ILP Spring2021
Διασωλήνωση και
Παραλληλία Επιπέδου Εντολών
ΕΠΛ325 Παράλληλη Επεξεργασία
• Βασικές ιδέες:
• Pipelining & Superscalar: Εργάσου σε πολλές εντολές ταυτόχρονα
• Out-of-order execution: Χρονοπρογραμμάτισε δυναμικά εντολές όποτε είναι
«έτοιμες»
• Speculation: Μάντεψε τι θα κάνει το πρόγραμμα στη συνέχεια για να ανακαλύψεις
μια πιο ανεξάρτητη δουλειά, "επαναφέροντας" λανθασμένες εικασίες
Πρόλογος
int power = 1; add $5,$4,$5 $6: x
int value = 0; ori $9,$0,1 $8: value
for (int j = 0; j < terms; j++) { xor $8,$8,$8 $9: power
value += coef[j] * power; $L2: $10: *coef
power *= x; lw $10,0($4)
Επανάληψη
} mla $8,$9,$10,$8
return value; mul $9,$9,$6
} addi $4,$4,4
bne $4,$5,$L2
Επίλογος
add $2,$8,$0
j $31
5
6
Παράδειγμα: Υπολογισμός πολυωνύμου
• Εκτέλεση poly(A, 3, x)
sll $5,$5,2
add $5,$4,$5
ori $9,$0,1
xor $8,$8,$8
lw $10,0($4)
mla $8,$9,$10,$8
mul $9,$9,$6
addi $4,$4,4
bne $4,$5,$L2
...
add $5,$4,$5
ori $9,$0,1
xor $8,$8,$8
lw $10,0($4)
i=0 επανάληψη
mla $8,$9,$10,$8
mul $9,$9,$6
addi $4,$4,4
bne $4,$5,$L2
...
8
Παράδειγμα: Υπολογισμός πολυωνύμου
• Εκτέλεση poly(A, 3, x)
sll $5,$5,2 ...
i=1 επανάληψη
Πρόλογος
add $5,$4,$5 lw $10,0($4)
ori $9,$0,1 mla $8,$9,$10,$8
xor $8,$8,$8 mul $9,$9,$6
lw $10,0($4) addi $4,$4,4
i=0 επανάληψη
mla $8,$9,$10,$8 bne $4,$5,$L2
lw $10,0($4)
i=2 επανάληψη
mul $9,$9,$6
addi $4,$4,4 mla $8,$9,$10,$8
bne $4,$5,$L2 mul $9,$9,$6
... addi $4,$4,4
bne $4,$5,$L2
add $2,$8,$0
Επίλ
j $31
9
mul $9,$9,$6
addi $4,$4,4 mla $8,$9,$10,$8
bne $4,$5,$L2 mul $9,$9,$6
... addi $4,$4,4
bne $4,$5,$L2
add $2,$8,$0
Επίλ
j $31
10
Η διεπαφή λογισμικού-υλικού
• Η αρχιτεκτονική συνόλου εντολών (instruction set architecture - ISA)
είναι το λειτουργικό συμβόλαιο μεταξύ υλικού και λογισμικού
• Λέει τι κάνει κάθε οδηγία, αλλά όχι πώς
• Παράδειγμα: Διαταγμένη ακολουθία εντολών MIPS
lw $10,0($4)
mla $8,$9,$10,$8
mul $9,$9,$6 CPU
addi $4,$4,4
bne $4,$5,$L2 Fetch Decode Execute Commit
lw $10,0($4)
mla $8,$9,$10,$8
mul $9,$9,$6
addi $4,$4,4
bne $4,$5,$L2
...
lw $10,0($4)
mla $8,$9,$10,$8
mul $9,$9,$6 CPU
addi $4,$4,4
bne $4,$5,$L2 Fetch Decode Execute Commit
lw $10,0($4) lw
mla $8,$9,$10,$8
mul $9,$9,$6
addi $4,$4,4
bne $4,$5,$L2 1. Διάβασε "lw $10,0($4)”
από τη μνήμη
...
Υπολογισμός πολυωνύμου στο
απλό μοντέλο CPU
lw $10,0($4)
mla $8,$9,$10,$8
mul $9,$9,$6 CPU
addi $4,$4,4
bne $4,$5,$L2 Fetch Decode Execute Commit
lw $10,0($4) lw
mla $8,$9,$10,$8
mul $9,$9,$6
addi $4,$4,4
bne $4,$5,$L2 2. Αποκωδικοποίησε "lw $10,0($4)” και
διάβασε τους καταχωρητές εισόδου
...
lw $10,0($4)
mla $8,$9,$10,$8
mul $9,$9,$6 CPU
addi $4,$4,4
bne $4,$5,$L2 Fetch Decode Execute Commit
lw $10,0($4) lw
mla $8,$9,$10,$8
mul $9,$9,$6
addi $4,$4,4
bne $4,$5,$L2 3. Διάβασε τη θέση
μνήμης 0($4)
...
Υπολογισμός πολυωνύμου στο
απλό μοντέλο CPU
lw $10,0($4)
mla $8,$9,$10,$8
mul $9,$9,$6 CPU
addi $4,$4,4
bne $4,$5,$L2 Fetch Decode Execute Commit
lw $10,0($4) lw
mla $8,$9,$10,$8
mul $9,$9,$6
addi $4,$4,4
bne $4,$5,$L2 4. Γράψε τιμή στον
καταχωρητή $10
...
lw $10,0($4)
mla $8,$9,$10,$8
mul $9,$9,$6 CPU
addi $4,$4,4
bne $4,$5,$L2 Fetch Decode Execute Commit
lw $10,0($4) mla
mla $8,$9,$10,$8
mul $9,$9,$6
addi $4,$4,4
bne $4,$5,$L2
...
Υπολογισμός πολυωνύμου στο
απλό μοντέλο CPU
lw $10,0($4)
mla $8,$9,$10,$8
mul $9,$9,$6 CPU
addi $4,$4,4
bne $4,$5,$L2 Fetch Decode Execute Commit
lw $10,0($4) mla
mla $8,$9,$10,$8
mul $9,$9,$6
addi $4,$4,4
bne $4,$5,$L2
...
lw $10,0($4)
mla $8,$9,$10,$8
mul $9,$9,$6 CPU
addi $4,$4,4
bne $4,$5,$L2 Fetch Decode Execute Commit
lw $10,0($4) mla
mla $8,$9,$10,$8
mul $9,$9,$6
addi $4,$4,4
bne $4,$5,$L2
...
Υπολογισμός πολυωνύμου στο
απλό μοντέλο CPU
lw $10,0($4)
mla $8,$9,$10,$8
mul $9,$9,$6 CPU
addi $4,$4,4
bne $4,$5,$L2 Fetch Decode Execute Commit
lw $10,0($4) mla
mla $8,$9,$10,$8
mul $9,$9,$6
addi $4,$4,4
bne $4,$5,$L2
...
lw $10,0($4)
mla $8,$9,$10,$8
mul $9,$9,$6 CPU
addi $4,$4,4
bne $4,$5,$L2 Fetch Decode Execute Commit
lw $10,0($4) mul
mla $8,$9,$10,$8
mul $9,$9,$6
addi $4,$4,4
bne $4,$5,$L2
...
Υπολογισμός πολυωνύμου στο
απλό μοντέλο CPU Πόσο γρήγορος είναι αυτός ο επεξεργαστής?
1 ns
ΧΡΟΝΟΣ Latency? Throughput?
Execute lw mla …
Commit lw mla
Commit lw mla
Διασωλήνωση (Pipelining)
lw $10,0($4) lw
mla $8,$9,$10,$8
mul $9,$9,$6
addi $4,$4,4
bne $4,$5,$L2
...
Η διασωλήνωση διατηρεί την CPU απασχολημένη
μέσω παραλληλίας επιπέδου εντολών
• Ιδέα: Ξεκίνησε αμέσως την επόμενη εντολή
lw $10,0($4)
mla $8,$9,$10,$8
mul $9,$9,$6 CPU
addi $4,$4,4
bne $4,$5,$L2 Fetch Decode Execute Commit
lw $10,0($4) mla lw
mla $8,$9,$10,$8
mul $9,$9,$6
addi $4,$4,4
bne $4,$5,$L2
...
...
Η διασωλήνωση διατηρεί την CPU απασχολημένη
μέσω παραλληλίας επιπέδου εντολών
• Ιδέα: Ξεκίνησε αμέσως την επόμενη εντολή
lw $10,0($4)
mla $8,$9,$10,$8
mul $9,$9,$6 CPU
addi $4,$4,4
bne $4,$5,$L2 Fetch Decode Execute Commit
...
...
Η διασωλήνωση διατηρεί την CPU απασχολημένη
μέσω παραλληλίας επιπέδου εντολών
• Ιδέα: Ξεκίνησε αμέσως την επόμενη εντολή
lw $10,0($4)
mla $8,$9,$10,$8
mul $9,$9,$6 CPU
addi $4,$4,4
bne $4,$5,$L2 Fetch Decode Execute Commit
...
Υπολογισμός πολυωνύμου
σε pipelined CPU Πόσο γρήγορος είναι αυτός ο επεξεργαστής?
1 ns
ΧΡΟΝΟΣ Latency? Throughput?
Throughput = 1 instr / ns
Latency = 4 ns / instr
4X speedup!
H επιτάχυνση που επιτυγχάνεται μέσω
παραλληλίας διασωλήνωσης
ΧΡΟΝΟΣ Ο επεξεργαστής εργάζεται σε 4 εντολές κάθε φορά
Περιορισμοί διασωλήνωσης
• Ο παραλληλισμός απαιτεί ανεξάρτητη εργασία
lw $10,0($4) lw
mla $8,$9,$10,$8
mul $9,$9,$6
addi $4,$4,4
bne $4,$5,$L2
...
Αντιμετώπιση κινδύνων δεδομένων:
Στάση διασωλήνωσης
• Δεν είναι δυνατή η διοχεύτεση του mla (lw γράφει $10)
lw $10,0($4)
mla $8,$9,$10,$8
mul $9,$9,$6 CPU
addi $4,$4,4
bne $4,$5,$L2 Fetch Decode Execute Commit
lw $10,0($4) mla lw
mla $8,$9,$10,$8 ??
mul $9,$9,$6
addi $4,$4,4
bne $4,$5,$L2
...
...
Αντιμετώπιση κινδύνων δεδομένων:
Στάση διασωλήνωσης
• Δεν είναι δυνατή η διοχεύτεση του mla (lw γράφει $10)
lw $10,0($4)
mla $8,$9,$10,$8
mul $9,$9,$6 CPU
addi $4,$4,4
bne $4,$5,$L2 Fetch Decode Execute Commit
CPU
Fetch Decode Execute Commit
$10
addi
mul mla lw
CPU
Fetch Decode Execute Execute Commit
Mem
lw
mla
$10,0($4)
$8,$9,$10,$8
Read-after-write (RAW) – πραγματική εξάρτηση
mul $9,$9,$6 Write-after-read (WAW) – ψευδής εξάρτηση
addi $4,$4,4 Write-after-write (WAW) – ψευδής εξάρτηση
bne $4,$5,$L2
Εξαρτήσεις μεταξύ επαναλήψεων
lw $10,0($4)
mla $8,$9,$10,$8
mul $9,$9,$6
addi $4,$4,4
bne $4,$5,$L2
...
Παράδειγμα: Ροή δεδομένων στο πολυώνυμο
Επανάληψη βρόχου
addi lw mul
lw $10,0($4)
mla $8,$9,$10,$8 bne mla
mul $9,$9,$6
addi $4,$4,4
bne $4,$5,$L2
lw $10,0($4)
mla $8,$9,$10,$8
mul $9,$9,$6
addi $4,$4,4
bne $4,$5,$L2
...
addi lw mul
addi lw mul
lw $10,0($4)
mla $8,$9,$10,$8 bne mla
mul $9,$9,$6
addi $4,$4,4
bne $4,$5,$L2 addi lw mul
lw $10,0($4)
bne mla
mla $8,$9,$10,$8
mul $9,$9,$6
addi $4,$4,4
addi lw mul
bne $4,$5,$L2
...
bne mla
Παράδειγμα: Εκτέλεση ροής δεδομένων στο
πολυώνυμο
• Μόνο εκτέλεση, με τέλειο χρονοπρογραμματισμό και απεριόριστες
μονάδες εκτέλεσης
• lw, mul εκτελείται σε 2 κύκλους
• addi, bne εκτελείται σε 1 κύκλο
• mla εκτελείται σε 3 κύκλους
1 lw $10,0($4)
lw mla $8,$9,$10,$8
2
ΧΡΟΝΟΣ
mul $9,$9,$6
3
addi $4,$4,4
4 bne $4,$5,$L2
5
6
7
8
9
10
11
12
13
14
15
16
1 lw $10,0($4)
lw mla $8,$9,$10,$8
2
ΧΡΟΝΟΣ
mul $9,$9,$6
3
addi $4,$4,4
4 mla bne $4,$5,$L2
5
6
7
8
9
10
11
12
13
14
15
16
1 lw $10,0($4)
lw mul mla $8,$9,$10,$8
2
ΧΡΟΝΟΣ
mul $9,$9,$6
3
addi $4,$4,4
4 mla bne $4,$5,$L2
5
6
7
8
9
10
11
12
13
14
15
16
1 addi lw $10,0($4)
lw mul mla $8,$9,$10,$8
2
ΧΡΟΝΟΣ
mul $9,$9,$6
3
addi $4,$4,4
4 mla bne $4,$5,$L2
5
6
7
8
9
10
11
12
13
14
15
16
1 addi lw $10,0($4)
lw mul mla $8,$9,$10,$8
2
ΧΡΟΝΟΣ
bne
mul $9,$9,$6
3
addi $4,$4,4
4 mla bne $4,$5,$L2
5
6
7
8
9
10
11
12
13
14
15
16
1 addi lw lw $10,0($4)
mul mla $8,$9,$10,$8
2
ΧΡΟΝΟΣ
bne addi
lw mul $9,$9,$6
3 bne
mul addi $4,$4,4
4 mla bne $4,$5,$L2
5 lw $10,0($4)
6 mla $8,$9,$10,$8
mul $9,$9,$6
7 mla
addi $4,$4,4
8 bne $4,$5,$L2
9
10
11
12
13
14
15
16
1 addi lw lw $10,0($4)
mul mla $8,$9,$10,$8
2
ΧΡΟΝΟΣ
bne addi lw
mul $9,$9,$6
3 bne addi
lw mul addi $4,$4,4
4 bne mla bne $4,$5,$L2
5 lw $10,0($4)
mul
6 mla $8,$9,$10,$8
mul $9,$9,$6
7 mla
addi $4,$4,4
8 bne $4,$5,$L2
9 lw $10,0($4)
10 mla mla $8,$9,$10,$8
11 mul $9,$9,$6
addi $4,$4,4
12
bne $4,$5,$L2
13
14
15
16
1 addi lw lw $10,0($4)
mul mla $8,$9,$10,$8
2
ΧΡΟΝΟΣ
bne addi lw
mul $9,$9,$6
3 bne addi lw
mul addi $4,$4,4
4 bne addi lw mla bne $4,$5,$L2
5 bne addi lw lw $10,0($4)
mul
6 bne addi lw mla $8,$9,$10,$8
mul $9,$9,$6
7 bne addi lw mla
mul addi $4,$4,4
8 bne addi lw bne $4,$5,$L2
9 bne addi lw lw $10,0($4)
mul
10 bne addi lw mla mla $8,$9,$10,$8
11 bne addi lw mul $9,$9,$6
mul addi $4,$4,4
12 bne addi lw
bne $4,$5,$L2
13 bne addi lw mla lw $10,0($4)
mul
14 bne addi lw mla $8,$9,$10,$8
15 bne addi lw mul $9,$9,$6
mla mul addi $4,$4,4
16 bne addi lw
bne $4,$5,$L2
lw $10,0($4)
mla $8,$9,$10,$8
mul $9,$9,$6
addi $4,$4,4
bne $4,$5,$L2
B
A
C
Execute
Fetch &
lw
Decode
Execute lw
Commit lw
Fetch &
lw mla
Decode
Execute lw mla
Commit lw mla
Παράδειγμα: Διάγραμμα χρονισμού διασωλήνωσης
στην εκτέλεση εκτός σειράς πολυωνύμου
ΧΡΟΝΟΣ
Fetch &
lw mla mul
Decode
Fetch &
lw mla mul addi
Decode
Fetch &
lw mla mul addi bne
Decode
Fetch &
lw mla mul addi bne lw mla mul addi bne lw mla mul addi bne lw
Decode
Fetch &
lw mla mul addi bne lw mla mul addi bne lw mla mul addi bne lw
Decode
CPU
Instruction Buffer
Commit
Commit
Παράδειγμα: Διάγραμμα χρονισμού διασωλήνωσης
στην εκτέλεση-εκτός-σειράς πολυωνύμου
ΧΡΟΝΟΣ
lw $10,0($4)
lw mul bne mla addi
Fetch & mla $8,$9,$10,$8
Decode mul $9,$9,$6
mla addi lw mul bne
addi $4,$4,4
bne $4,$5,$L2
lw
lw $10,0($4)
mla $8,$9,$10,$8
Execute
mul $9,$9,$6
addi $4,$4,4
bne $4,$5,$L2
Commit
Commit
Παράδειγμα: Διάγραμμα χρονισμού διασωλήνωσης
στην εκτέλεση-εκτός-σειράς πολυωνύμου
ΧΡΟΝΟΣ
lw $10,0($4)
lw mul bne mla addi
Fetch & mla $8,$9,$10,$8
Decode mul $9,$9,$6
mla addi lw mul bne
addi $4,$4,4
bne $4,$5,$L2
lw mla
lw $10,0($4)
mla $8,$9,$10,$8
Execute mul
mul $9,$9,$6
addi bne addi $4,$4,4
bne $4,$5,$L2
Commit
Commit
Παράδειγμα: Διάγραμμα χρονισμού διασωλήνωσης
στην εκτέλεση-εκτός-σειράς πολυωνύμου
ΧΡΟΝΟΣ
lw $10,0($4)
lw mul bne mla addi
Fetch & mla $8,$9,$10,$8
Decode mul $9,$9,$6
mla addi lw mul bne
addi $4,$4,4
bne $4,$5,$L2
lw mla mla
lw $10,0($4)
mla $8,$9,$10,$8
Execute mul lw addi bne
mul $9,$9,$6
addi bne mul addi $4,$4,4
bne $4,$5,$L2
Commit
lw mul bne mla addi lw mul bne mla addi lw mul bne mla addi lw
Fetch &
Decode
mla addi lw mul bne mla addi lw mul bne mla addi lw mul bne mla
lw mul bne mla addi lw mul bne mla addi lw mul bne mla addi lw
Fetch &
Decode
mla addi lw mul bne mla addi lw mul bne mla addi lw mul bne mla
Mem lw lw lw lw lw lw
Execute
Int addi bne addi bne addi bne addi bne addi bne addi
Execute
Mult mul mla mul mla mul mla
Execute