その辺のホームページから拾ってきたんだけど
valarrayを使った行列の乗算

これと比べていいのかな?

#include <iostream>
#include <valarray>
using namespace std;

int main()
{
  const int m=1000, k=1000, n=1000;
  long mk=m*k, kn=k*n, mn=m*n, in,i,j;
  valarray<double> a(mk), b(kn), c(mn), v1(k),v2(k);

  for(i=0; i<m; i++)
  {
  in=i*n;
  v1=a[slice(i*k,k,1)];
  for(j=0; j<n; j++)
  {
   v2=b[slice(j,k,n)];
   v2*=v1;
   c[in+j]=v2.sum();
   }
  }

  a.resize(0); // clear aa,bb,cc
  b.resize(0);
  c.resize(0);

  return 0;
}