Non credo si possa ottimizzare molto, l'ottimizzazione grossa che si può fare in questi casi è leggere la matrice nell'ordine in cui è in memoria invece di saltare (leggerla per colonne e non per righe) per sfruttare la cache locality, ma vedo che già lo fai.