surprising timings for multiplication of diagonalmatrix and full matrix
- To: mathgroup at smc.vnet.net
- Subject: [mg124946] surprising timings for multiplication of diagonalmatrix and full matrix
- From: "Eric Michielssen" <emichiel at eecs.umich.edu>
- Date: Mon, 13 Feb 2012 03:42:38 -0500 (EST)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
Hi, I'd like to right multiply an n x n diagonal matrix (specified by a vector) by an n x n full matrix. I tried 3 ways A. Brute force B. Using my own routine in which I was hoping to avoid the (supposedly) n^3 cost of A. diagtimesmat[diag_, mat_] := MapThread[Times, {diag, mat}]; C. The compiled version of B. cdiagtimesmat = Compile[{{diag, _Real, 1}, {mat, _Real, 2}}, Module[{}, MapThread[Times, {diag, mat}]], CompilationTarget -> "C"]; I get weird timings. For n=250: n=250;nj=100; asd=Table[RandomReal[],{n},{n}]; bsd=Table[RandomReal[],{n}]; x=Timing[Do[ed=DiagonalMatrix[bsd].asd,{nj}]][[1]] y=Timing[Do[ed=diagtimesmat[bsd,asd],{nj}]][[1]] z=Timing[Do[ed=cdiagtimesmat[bsd,asd],{nj}]][[1]] Out[415]= 0.359 Out[416]= 6.037 Out[417]= 0.141 My own uncompiled routine is superslow!!! There are warnings about arrays being unpacked that I did not copy. For n=500: In[418]:= n = 500; nj = 100; asd = Table[RandomReal[], {n}, {n}]; bsd = Table[RandomReal[], {n}]; x = Timing[Do[ed = DiagonalMatrix[bsd].asd, {nj}]][[1]] y = Timing[Do[ed = diagtimesmat[bsd, asd], {nj}]][[1]] z = Timing[Do[ed = cdiagtimesmat[bsd, asd], {nj}]][[1]] Out[421]= 2.777 Out[422]= 1.31 Out[423]= 1.014 This is more reasonable. It remains a bit surprising that the routine that only touches n^2 numbers is only twice as fast as the one that supposedly touches n^3 ones. Also, the compiled routine still does not achieve 100 MFlops on my laptop. How can this behavior be explained? What is the fastest way of doing this? And how about multiplying a full matrix by a diagonal one? Thanks! Eric Eric Michielssen Radiation Laboratory Department of Electrical Engineering and Computer Science University of Michigan 1301 Beal Avenue Ann Arbor, MI 48109 Ph: (734) 647 1793 -- Fax: (734) 647 2106