1.a)
A matriz A possui localidade espacial e se visse-mos o código assembly haveria saltos de 8 em 8 bits, ao contrário da matriz B. A matriz C, também não possui localidade espacial, pois ela será percorrida coluna a coluna e não linha a linha.
1.b)
Primeiro começa a fazer load do primeiro elemento da matriz A e puxa 64 bits da memória. Ou seja, primeiro tem um miss e depois tem 7 hits. Logo, os acessos à memória são:
1.c)
Estimativa para a versão com a transposta:
Os misses na matriz A não mudaram e na B será a dividir por 8, ou seja:
Ou seja, sempre o primeiro elemento de cada linha haverá um miss e depois haverá 7 hits. Ou seja, $3210^6$ ($15010^6$ ) misses no total
1.d)
Versão normal
gcc -O2 -Dsize=512 -std=gnu99 mmult.c
srun --partition=cpar perf stat -e L1-dcache-load-misses -M cpi ./a.out
Versão com a transposta