Как улучшить производительность кэша на этом коде 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
Другие вопросы по тегам