PL03_guiao.pdf

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