Exercício 2 - Vectorisation
2.a)
O compilador não consegue vetorizar o código base “DOT matrix multiplication”, porquê? ⇒ Porque a matriz B não têm acessos contínuos, ou seja, não tem localidade espacial. A solução, seria fazer a transposta da B.
Assim, faz-se 4 multiplicações ao mesmo tempo.
Mas a soma (uma redução) é sequencial, pois temos que somar todos os resultados dessas multiplicações, para isso precisamos de ir somando um a um. Como são floats, seria possível resolver, mas mudando a ordem das somas, o resultado seria ligeiramente diferente, por causa dos arredondamentos desses valores.
2.b.)
for com i → A / for com j → B / for com k → C
2.c.)
Versão com -O2 sem vetorização
gcc -O2 -Dsize=512 -std=gnu99 mmultikj.c