tree: 228ebea099f772899654c59c994b0ce4f51398dc [path history] [tgz]
  1. LibMatrixMult.java
  2. pom.xml
  3. README.md
  4. systemds
scripts/staging/SIMD-double-vectors/README.md

SIMD DoubleVectors for matrix multiplication

DoubleVector is still in incubator stage, but promises performance improvements for many SystemDS components. This patch explored potential speedup for matrix multiplication of two dense matrices. Additionally, dot product is also implemented with DoubleVector for the case where common dimension is 1.

Initial experiments showed varying results, usually the vectorized implementation performs somewhere between MKL and our reference. There are also cases where we are slower than the reference, or faster than MKL. For detailed discussion (and plots) see PR #1643.

Further Work

This patch focused only on dense matrix multiplication, increasing sparsity would complicate things. The sparsity aware copying (see LibMatrixMult.java:1170) and general loop structure is kept as it is, as a lot of experimentation went into a very efficient implementation. Note that the usage of DoubleVector might change a lot of things about this and revisiting this (and using SIMD for sparsity aware copying) will be a necessary step.

Changes

Due to the dependency of at least JDK17, there are changes to pom.xml, run script systemds and, of course, LibMatrixMult.java.