Accesso ai dati

(i,j): nel ciclo più interno l'indice $i$ è una costante, per cui si accede a tutta la riga i-esima e la si moltiplica per il vettore $x$: è come se si eseguissero $m$ dot product fra le $m$ righe di $A$ ed il vettore $x$:

\begin{displaymath}y_1=a^1x, \cdots, y_m=a^mx\end{displaymath}

(j,i): in questo caso, all'interno del ciclo annidato rimane costante l'indice $i$ della colonna e si scorrono tutte le $m$ righe di $A$; tenendo presente che $x(i)$ rimane costante nel ciclo interno, quello che si ottiene è:

\begin{displaymath}y \leftarrow (\cdots((y+a_1x_1)+a_2x_2)+ \cdots + a_nx_n)\end{displaymath}

che altri non sono che n axpy.

In conclusione, l'implementazione $(i,j)$ accede ad i dati per righe, mentre la sua speculare accede ai dati per colonne. La scelta tra questi due algoritmi deve tenere presente il metodo di memorizzazione delle matrici del proprio linguaggio di programmazione.



Morpheus 2004-01-04