Как улучшить производительность кэша на этом коде MIPS
Используя симулятор под названием MARS 4.5, я пытаюсь улучшить производительность кеша этого кода. Это подраздел программы сборки, который вычисляет простые числа, используя алгоритм Sieve of Eratosthenes.
По какой-то причине sw (store word) имеет частоту попаданий в кэш 25%, в то время как остальная часть программы составляет в среднем около 50% в текущем состоянии. Я пытался изменить некоторые вещи, но я не могу понять, что является причиной этого узкого места. Что нужно сделать, чтобы улучшить этот коэффициент попадания в кеш?
inner: add $t2, $s2, 0 # save the bottom of stack address to $t2
mul $t3, $t1, 4 # calculate the number of bytes to jump over
sub $t2, $t2, $t3 # subtract them from bottom of stack address
add $t2, $t2, 8 # add 2 words - we started counting at 2!
sw $s0, ($t2) # store 1's -> it's not a prime number!
add $t1, $t1, $t0 # do this for every multiple of $t0
bgt $t1, $t9, outer # every multiple done? go back to outer loop
j inner # some multiples left? go back to inner loop
1 ответ
Решение
Я смог решить эту проблему, изменив программу для хранения байтов вместо слов. Это увеличило количество блоков хранения в кэше и, таким образом, увеличило частоту обращений.
inner: add $t2, $s2, 0 # save the bottom of stack address to $t2
addi $t3, $t1, 1 # add one byte
sub $t2, $t2, $t3 # subtract them from bottom of stack address
add $t2, $t2, 2 # add 2 bytes - we started counting at 2!
sb $s0, ($t2) # store 1's -> it's not a prime number!
add $t1, $t1, $t0 # do this for every multiple of $t0
bgt $t1, $t9, outer # every multiple done? go back to outer loop
j inner # some multiples left? go back to inner loop