Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки, молоді та спорту України
Національний універститет «Львівська Політехніка»
Звіт
про виконання лабораторної роботи №1
з курсу «Архітектура комп’ютерних систем»
на тему «Цикл»
Мета: опанування технологіями обробки потоку інструкцій конвеєром універсальних процесорів на прикладі обробки програми «цикл» та отримання навичок з кількісного оцінювання ефективності мікроархітектур цих процесорів.
Базисна версія програми.
Loop:
lw r2,0(r1) ;get next A value
lw r3,20(r1) ;get next B value
add r2,r2,r3 ;update A
sw 40(r1),r2 ;store new A
addi r1,r1,#4 ;update counter
subi r4,r1,#16 ;check to see if done
bnez r4,Loop ;repeat loop if not done
trap 0 ;end
Модифікована версія програми:
Loop:
lw r2,0(r1) ;get next A value
lw r3,20(r1) ;get next B value
addi r1,r1,#4 ;update counter
add r2,r2,r3 ;update A
sw 36(r1),r2 ;store new A
nop
subi r4,r1,#16 ;check to see if done
nop
bnez r4,Loop ;repeat loop if not done
trap 0 ;end
Статистика роботи базової програми | Статистика модифікованої програми
Висновок: мені вдалося виключити 8 простоїв в роботі конвеєра, додавши 2 інструкції nop, щоб скасувати RAW–залежності даних. Крім того, оновлення лічильника тепер відбувається апріорно, в той час, поки готується операція додавання. Таким чином я уникнув зайвої (третьої) операції nop.