sicuro che quei "<=" non debbano essere dei "<"?

In ogni modo perché reinventare ogni volta l'acqua calda?
Ad esempio (assumendo che il "<=" sia corretto):
codice:
	             int y=0;	
		     for(y=0;y<=height;matrix++)
		    {	 
		     somma+=*matrix;
		     y++;
		    }
dovrebbe essere equivalente a:
codice:
#include <numeric>
...

// il +1 ci va assumendo che il tuo "<=" sia valido
const int somma = std::accumulate (matrix, matrix + height +1, 0);
matrix += height +1;
(dico dovrebbe perché non l'ho provato in questo caso: molto probabilmente va adattato perché gli elementi sono dei "char" e la somma un int);

Osserva anche come nel tuo codice quanta fatica tu debba fare per mantenere la variabile somma; ti basterebbe spostarne la definizione all'interno del primo for e ti eviteresti di doverla reinizializzare alla fine del for; nel mio addirittura è una costante!
;-)

poi ovvio come ti hanno già detto puoi sfruttare i core parallelizzando, ad esempio con:
http://en.wikipedia.org/wiki/OpenMP

considera che per compiere operazioni algebriche sulle matrici si può sfruttare anche la scheda grafica, ad esempio con:
http://en.wikipedia.org/wiki/OpenCL