다음 프로그램을 dual-issue 에서 수행하고자 한다.
Loop: lw $t0, 0($s1) # $t0=array element
addu $t0, $t0, $s2 # add scalar in $s2
sw $t0, 0($s1)
addi $s1, $s1,–4
bne $s1, $zero, Loop # branch $s1!=0
1) 2개의 루프를 하나의 루프로 Unrolling한 프로그램을 작성하시오.
Loop: addi $s1, $s1, –8
lw $t0, 8($s1)
addu $t0, $t0, $s2
sw $t0, 8($s1)
--------------------------------
lw $t1, 4($s1)
addu $t1, $t0, $s2
sw $t1, 4($s1)
bne $s1, $zero, Loop
2) 작성한 프로그램으로 명령어 수행을 스케줄링 하시오.
ALU / branch | Load/store | cycle | |
Loop: | addi $s1, $s1, –8 | lw $t0, 8($s1) | 1 |
Nop// lw dependencies때문에 한번 쉼 | lw $t1, 4($s1) | 2 | |
addu $t0, $t0, $s2 | Nop | 3 | |
addu $t1, $t1, $s2 | sw $t0, 8($s1) | 4 | |
bne $s1, $zero, Loop | sw $t1, 4($s1) | 5 |
Unrolling한 프로그램에서는 총 8번의 명령어 실행이 이루어졌어야하지만,
스케줄링을 통해 명령어를 5번만 실행해도 가능해졌다.
'CS 공부 > 컴퓨터구조' 카테고리의 다른 글
컴퓨터구조_메모리 저장 장치 (0) | 2023.06.13 |
---|---|
컴퓨터 구조_메모리 지역성(memory locality) (2) | 2023.06.09 |
컴퓨터구조_메모리 계층 구조(memory hierarchy) (0) | 2023.06.09 |
컴퓨터구조_부동소수점(Floating point) (0) | 2023.06.01 |
컴퓨터구조_ILP(Instruction Level Paralleism)_(1) (0) | 2023.05.30 |
댓글