> From: "Cohn, Robert S" <robert.s.c...@intel.com> > > I am using R to multiply some large (30k x 30k double) matrices on a > 64 core machine (xeon phi). I added some timers to > src/main/array.c to see where the time is going. All of the time is > being spent in the matprod function, most of that time is spent in > dgemm. 15 seconds is in matprod in some code that is checking if > there are NaNs. > > The NaN checking code is not being vectorized...
This can be a problem with big matrices when lots of cores are used for the actual multiply, but is even more of a problem when at least one of the matrices is small (eg, a vector-matrix multiply), in which case the NaN check can dominate, slowing the operation by up to a factor of about ten. I pointed this problem out over six years ago, and provided a patch that greatly speeds up many matrix multiplies (see http://www.cs.utoronto.ca/~radford/R-mods.html). But this improvement has not been incorporated into R Core versions of R. Since then, a more elaborate solution to the problem of NaN checks has been incorporated into my pqR version of R (see pqR-project.org). The documentation on this approach can be found with help("%*%") if you're running pqR, or you can just look at the source for this help file in the pqR source code repository, at https://github.com/radfordneal/pqR/blob/Release-2016-10-24/src/library/base/man/matmult.Rd Radford ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel