viennacl and viennacl-omp Pall-scala

Project: http://git-wip-us.apache.org/repos/asf/mahout/repo
Commit: http://git-wip-us.apache.org/repos/asf/mahout/commit/9a4f9d36
Tree: http://git-wip-us.apache.org/repos/asf/mahout/tree/9a4f9d36
Diff: http://git-wip-us.apache.org/repos/asf/mahout/diff/9a4f9d36

Branch: refs/heads/master
Commit: 9a4f9d36298259274dac94665eda7ce9e482cdbd
Parents: 72dfcee
Author: rawkintrevo <trevor.d.gr...@gmail.com>
Authored: Thu Jul 27 11:45:39 2017 -0500
Committer: rawkintrevo <trevor.d.gr...@gmail.com>
Committed: Thu Jul 27 11:45:39 2017 -0500

----------------------------------------------------------------------
 .../src/main/assembly/scala-2.10_spark-1.6.xml  |   2 +-
 .../src/main/assembly/scala-2.11_spark-2.0.xml  |   2 +-
 .../src/main/assembly/scala-2.11_spark-2.1.xml  |   4 +-
 viennacl-omp/linux-haswell.properties           |  28 --
 viennacl-omp/linux-x86_64-viennacl.properties   |  24 -
 viennacl-omp/pom.xml                            | 243 +---------
 .../scala-2.10/linux-haswell.properties         |  28 ++
 .../scala-2.10/linux-x86_64-viennacl.properties |  24 +
 viennacl-omp/scala-2.10/pom.xml                 | 324 +++++++++++--
 viennacl-omp/scala-2.10/runs                    |  32 ++
 .../viennacl/openmp/javacpp/Functions.java      | 103 +++++
 .../openmp/javacpp/LinalgFunctions.java         |  86 ++++
 .../openmp/javacpp/MatrixTransExpression.scala  |  34 ++
 .../apache/mahout/viennacl/openmp/OMPMMul.scala | 449 +++++++++++++++++++
 .../openmp/javacpp/CompressedMatrix.scala       | 135 ++++++
 .../viennacl/openmp/javacpp/Context.scala       |  58 +++
 .../openmp/javacpp/DenseColumnMatrix.scala      |  95 ++++
 .../openmp/javacpp/DenseRowMatrix.scala         |  81 ++++
 .../openmp/javacpp/MatMatProdExpression.scala   |  33 ++
 .../openmp/javacpp/MatVecProdExpression.scala   |  33 ++
 .../viennacl/openmp/javacpp/MatrixBase.scala    |  75 ++++
 .../viennacl/openmp/javacpp/MemHandle.scala     |  34 ++
 .../openmp/javacpp/ProdExpression.scala         |  33 ++
 .../javacpp/SrMatDnMatProdExpression.scala      |  33 ++
 .../viennacl/openmp/javacpp/VCLVector.scala     | 124 +++++
 .../openmp/javacpp/VecMultExpression.scala      |  32 ++
 .../viennacl/openmp/javacpp/VectorBase.scala    |  55 +++
 .../apache/mahout/viennacl/openmp/package.scala | 434 ++++++++++++++++++
 .../mahout/viennacl/omp/ViennaCLSuiteOMP.scala  | 249 ++++++++++
 .../scala-2.11/linux-haswell.properties         |  28 ++
 .../scala-2.11/linux-x86_64-viennacl.properties |  24 +
 viennacl-omp/scala-2.11/pom.xml                 | 325 ++++++++++++--
 viennacl-omp/scala-2.11/runs                    |  32 ++
 .../viennacl/openmp/javacpp/Functions.java      | 103 +++++
 .../openmp/javacpp/LinalgFunctions.java         |  86 ++++
 .../openmp/javacpp/MatrixTransExpression.scala  |  34 ++
 .../apache/mahout/viennacl/openmp/OMPMMul.scala | 449 +++++++++++++++++++
 .../openmp/javacpp/CompressedMatrix.scala       | 135 ++++++
 .../viennacl/openmp/javacpp/Context.scala       |  58 +++
 .../openmp/javacpp/DenseColumnMatrix.scala      |  95 ++++
 .../openmp/javacpp/DenseRowMatrix.scala         |  81 ++++
 .../openmp/javacpp/MatMatProdExpression.scala   |  33 ++
 .../openmp/javacpp/MatVecProdExpression.scala   |  33 ++
 .../viennacl/openmp/javacpp/MatrixBase.scala    |  75 ++++
 .../viennacl/openmp/javacpp/MemHandle.scala     |  34 ++
 .../openmp/javacpp/ProdExpression.scala         |  33 ++
 .../javacpp/SrMatDnMatProdExpression.scala      |  33 ++
 .../viennacl/openmp/javacpp/VCLVector.scala     | 124 +++++
 .../openmp/javacpp/VecMultExpression.scala      |  32 ++
 .../viennacl/openmp/javacpp/VectorBase.scala    |  55 +++
 .../apache/mahout/viennacl/openmp/package.scala | 434 ++++++++++++++++++
 .../mahout/viennacl/omp/ViennaCLSuiteOMP.scala  | 249 ++++++++++
 .../viennacl/openmp/javacpp/Functions.java      | 103 -----
 .../openmp/javacpp/LinalgFunctions.java         |  86 ----
 .../openmp/javacpp/MatrixTransExpression.scala  |  34 --
 .../apache/mahout/viennacl/openmp/OMPMMul.scala | 449 -------------------
 .../openmp/javacpp/CompressedMatrix.scala       | 135 ------
 .../viennacl/openmp/javacpp/Context.scala       |  58 ---
 .../openmp/javacpp/DenseColumnMatrix.scala      |  95 ----
 .../openmp/javacpp/DenseRowMatrix.scala         |  81 ----
 .../openmp/javacpp/MatMatProdExpression.scala   |  33 --
 .../openmp/javacpp/MatVecProdExpression.scala   |  33 --
 .../viennacl/openmp/javacpp/MatrixBase.scala    |  75 ----
 .../viennacl/openmp/javacpp/MemHandle.scala     |  34 --
 .../openmp/javacpp/ProdExpression.scala         |  33 --
 .../javacpp/SrMatDnMatProdExpression.scala      |  33 --
 .../viennacl/openmp/javacpp/VCLVector.scala     | 124 -----
 .../openmp/javacpp/VecMultExpression.scala      |  32 --
 .../viennacl/openmp/javacpp/VectorBase.scala    |  55 ---
 .../apache/mahout/viennacl/openmp/package.scala | 434 ------------------
 .../mahout/viennacl/omp/ViennaCLSuiteOMP.scala  | 249 ----------
 viennacl/linux-haswell.properties               |  28 --
 viennacl/linux-x86_64-viennacl.properties       |  24 -
 viennacl/pom.xml                                | 230 +---------
 viennacl/scala-2.10/linux-haswell.properties    |  28 ++
 .../scala-2.10/linux-x86_64-viennacl.properties |  24 +
 viennacl/scala-2.10/pom.xml                     | 314 +++++++++++--
 .../viennacl/opencl/javacpp/Functions.java      | 104 +++++
 .../opencl/javacpp/LinalgFunctions.java         |  86 ++++
 .../opencl/javacpp/MatrixTransExpression.scala  |  34 ++
 .../apache/mahout/viennacl/opencl/GPUMMul.scala | 444 ++++++++++++++++++
 .../opencl/javacpp/CompressedMatrix.scala       | 135 ++++++
 .../viennacl/opencl/javacpp/Context.scala       |  73 +++
 .../opencl/javacpp/DenseColumnMatrix.scala      |  95 ++++
 .../opencl/javacpp/DenseRowMatrix.scala         |  98 ++++
 .../opencl/javacpp/MatMatProdExpression.scala   |  33 ++
 .../opencl/javacpp/MatVecProdExpression.scala   |  33 ++
 .../viennacl/opencl/javacpp/MatrixBase.scala    |  75 ++++
 .../viennacl/opencl/javacpp/MemHandle.scala     |  48 ++
 .../opencl/javacpp/ProdExpression.scala         |  33 ++
 .../javacpp/SrMatDnMatProdExpression.scala      |  33 ++
 .../viennacl/opencl/javacpp/VCLVector.scala     | 144 ++++++
 .../opencl/javacpp/VecMultExpression.scala      |  32 ++
 .../viennacl/opencl/javacpp/VectorBase.scala    |  58 +++
 .../apache/mahout/viennacl/opencl/package.scala | 434 ++++++++++++++++++
 .../viennacl/opencl/ViennaCLSuiteVCL.scala      | 441 ++++++++++++++++++
 viennacl/scala-2.11/linux-haswell.properties    |  28 ++
 .../scala-2.11/linux-x86_64-viennacl.properties |  24 +
 viennacl/scala-2.11/pom.xml                     | 316 +++++++++++--
 .../viennacl/opencl/javacpp/Functions.java      | 104 +++++
 .../opencl/javacpp/LinalgFunctions.java         |  86 ++++
 .../opencl/javacpp/MatrixTransExpression.scala  |  34 ++
 .../apache/mahout/viennacl/opencl/GPUMMul.scala | 444 ++++++++++++++++++
 .../opencl/javacpp/CompressedMatrix.scala       | 135 ++++++
 .../viennacl/opencl/javacpp/Context.scala       |  73 +++
 .../opencl/javacpp/DenseColumnMatrix.scala      |  95 ++++
 .../opencl/javacpp/DenseRowMatrix.scala         |  98 ++++
 .../opencl/javacpp/MatMatProdExpression.scala   |  33 ++
 .../opencl/javacpp/MatVecProdExpression.scala   |  33 ++
 .../viennacl/opencl/javacpp/MatrixBase.scala    |  75 ++++
 .../viennacl/opencl/javacpp/MemHandle.scala     |  48 ++
 .../opencl/javacpp/ProdExpression.scala         |  33 ++
 .../javacpp/SrMatDnMatProdExpression.scala      |  33 ++
 .../viennacl/opencl/javacpp/VCLVector.scala     | 144 ++++++
 .../opencl/javacpp/VecMultExpression.scala      |  32 ++
 .../viennacl/opencl/javacpp/VectorBase.scala    |  58 +++
 .../apache/mahout/viennacl/opencl/package.scala | 434 ++++++++++++++++++
 .../viennacl/opencl/ViennaCLSuiteVCL.scala      | 441 ++++++++++++++++++
 .../viennacl/opencl/javacpp/Functions.java      | 104 -----
 .../opencl/javacpp/LinalgFunctions.java         |  86 ----
 .../opencl/javacpp/MatrixTransExpression.scala  |  34 --
 .../apache/mahout/viennacl/opencl/GPUMMul.scala | 444 ------------------
 .../opencl/javacpp/CompressedMatrix.scala       | 135 ------
 .../viennacl/opencl/javacpp/Context.scala       |  73 ---
 .../opencl/javacpp/DenseColumnMatrix.scala      |  95 ----
 .../opencl/javacpp/DenseRowMatrix.scala         |  98 ----
 .../opencl/javacpp/MatMatProdExpression.scala   |  33 --
 .../opencl/javacpp/MatVecProdExpression.scala   |  33 --
 .../viennacl/opencl/javacpp/MatrixBase.scala    |  75 ----
 .../viennacl/opencl/javacpp/MemHandle.scala     |  48 --
 .../opencl/javacpp/ProdExpression.scala         |  33 --
 .../javacpp/SrMatDnMatProdExpression.scala      |  33 --
 .../viennacl/opencl/javacpp/VCLVector.scala     | 144 ------
 .../opencl/javacpp/VecMultExpression.scala      |  32 --
 .../viennacl/opencl/javacpp/VectorBase.scala    |  58 ---
 .../apache/mahout/viennacl/opencl/package.scala | 434 ------------------
 .../viennacl/opencl/ViennaCLSuiteVCL.scala      | 441 ------------------
 137 files changed, 10662 insertions(+), 5301 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mahout/blob/9a4f9d36/distribution/src/main/assembly/scala-2.10_spark-1.6.xml
----------------------------------------------------------------------
diff --git a/distribution/src/main/assembly/scala-2.10_spark-1.6.xml 
b/distribution/src/main/assembly/scala-2.10_spark-1.6.xml
index 5ae0834..02fb0cf 100644
--- a/distribution/src/main/assembly/scala-2.10_spark-1.6.xml
+++ b/distribution/src/main/assembly/scala-2.10_spark-1.6.xml
@@ -116,7 +116,7 @@
       <outputDirectory/>
     </fileSet>
     <fileSet>
-      <directory>${project.basedir}/../math-scala/target</directory>
+      <directory>${project.basedir}/../math-scala/scala-2.10/target</directory>
       <includes>
         <include>mahout-*2.10*.jar</include>
       </includes>

http://git-wip-us.apache.org/repos/asf/mahout/blob/9a4f9d36/distribution/src/main/assembly/scala-2.11_spark-2.0.xml
----------------------------------------------------------------------
diff --git a/distribution/src/main/assembly/scala-2.11_spark-2.0.xml 
b/distribution/src/main/assembly/scala-2.11_spark-2.0.xml
index cab595b..2a7cc68 100644
--- a/distribution/src/main/assembly/scala-2.11_spark-2.0.xml
+++ b/distribution/src/main/assembly/scala-2.11_spark-2.0.xml
@@ -116,7 +116,7 @@
       <outputDirectory/>
     </fileSet>
     <fileSet>
-      <directory>${project.basedir}/../math-scala/target</directory>
+      <directory>${project.basedir}/../math-scala/scala-2.11/target</directory>
       <includes>
         <include>mahout-*2.11*.jar</include>
       </includes>

http://git-wip-us.apache.org/repos/asf/mahout/blob/9a4f9d36/distribution/src/main/assembly/scala-2.11_spark-2.1.xml
----------------------------------------------------------------------
diff --git a/distribution/src/main/assembly/scala-2.11_spark-2.1.xml 
b/distribution/src/main/assembly/scala-2.11_spark-2.1.xml
index 40a3566..a791763 100644
--- a/distribution/src/main/assembly/scala-2.11_spark-2.1.xml
+++ b/distribution/src/main/assembly/scala-2.11_spark-2.1.xml
@@ -116,7 +116,7 @@
       <outputDirectory/>
     </fileSet>
     <fileSet>
-      <directory>${project.basedir}/../math-scala/target</directory>
+      <directory>${project.basedir}/../math-scala/scala-2.11/target</directory>
       <includes>
         <include>mahout-*2.11*.jar</include>
       </includes>
@@ -128,7 +128,7 @@
       <outputDirectory/>
     </fileSet>
     <fileSet>
-      <directory>${project.basedir}/../spark/target</directory>
+      <directory>${project.basedir}/../spark/spark-2.1/target</directory>
       <includes>
         <include>mahout-*2.1-2.11*spark.jar</include>
         <include>mahout-*2.1-2.11*dependency-reduced.jar</include>

http://git-wip-us.apache.org/repos/asf/mahout/blob/9a4f9d36/viennacl-omp/linux-haswell.properties
----------------------------------------------------------------------
diff --git a/viennacl-omp/linux-haswell.properties 
b/viennacl-omp/linux-haswell.properties
deleted file mode 100644
index 3ee4494..0000000
--- a/viennacl-omp/linux-haswell.properties
+++ /dev/null
@@ -1,28 +0,0 @@
-platform=linux-x86_64
-platform.path.separator=:
-platform.source.suffix=.cpp
-platform.includepath.prefix=-I
-platform.includepath=
-platform.compiler=g++
-platform.compiler.cpp11=-std=c++11
-platform.compiler.default=
-platform.compiler.fastfpu=-msse3 -ffast-math
-platform.compiler.viennacl=-fopenmp -fpermissive
-platform.compiler.nodeprecated=-Wno-deprecated-declarations
-#build for haswell arch with for GCC >= 4.9.0
-platform.compiler.output=-Wl,-rpath,$ORIGIN/ -Wl,-z,noexecstack -Wl,-Bsymbolic 
-march=haswell -m64 -Wall -O3 -fPIC -shared -s -o\u0020
-#for GCC < 4.9.0 use -march=core-avx2 for haswell arch
-#platform.compiler.output=-Wl,-rpath,$ORIGIN/ -Wl,-z,noexecstack 
-Wl,-Bsymbolic -march=core-avx2 -m64 -Wall -Ofast -fPIC -shared -s -o\u0020
-#build for native:
-#platform.compiler.output=-Wl,-rpath,$ORIGIN/ -Wl,-z,noexecstack 
-Wl,-Bsymbolic -march=native -m64 -Wall -Ofast -fPIC -shared -s -o\u0020
-platform.linkpath.prefix=-L
-platform.linkpath.prefix2=-Wl,-rpath,
-platform.linkpath=
-platform.link.prefix=-l
-platform.link.suffix=
-platform.link=
-platform.framework.prefix=-F
-platform.framework.suffix=
-platform.framework=
-platform.library.prefix=lib
-platform.library.suffix=.so

http://git-wip-us.apache.org/repos/asf/mahout/blob/9a4f9d36/viennacl-omp/linux-x86_64-viennacl.properties
----------------------------------------------------------------------
diff --git a/viennacl-omp/linux-x86_64-viennacl.properties 
b/viennacl-omp/linux-x86_64-viennacl.properties
deleted file mode 100644
index e5de1fa..0000000
--- a/viennacl-omp/linux-x86_64-viennacl.properties
+++ /dev/null
@@ -1,24 +0,0 @@
-platform=linux-x86_64
-platform.path.separator=:
-platform.source.suffix=.cpp
-platform.includepath.prefix=-I
-platform.includepath=
-platform.compiler=g++
-platform.compiler.cpp11=-std=c++11
-platform.compiler.default=
-platform.compiler.fastfpu=-msse3 -ffast-math
-platform.compiler.viennacl=-fopenmp -fpermissive
-platform.compiler.nodeprecated=-Wno-deprecated-declarations
-# platform.compiler.output=-Wl,-rpath,$ORIGIN/ -Wl,-z,noexecstack 
-Wl,-Bsymbolic -march=x86-64 -m64 -Wall -O3 -fPIC -shared -s -o\u0020
-platform.compiler.output=-Wl,-rpath,$ORIGIN/ -Wl,-z,noexecstack -Wl,-Bsymbolic 
-march=native -m64 -Wall -Ofast -fPIC -shared -s -o\u0020
-platform.linkpath.prefix=-L
-platform.linkpath.prefix2=-Wl,-rpath,
-platform.linkpath=
-platform.link.prefix=-l
-platform.link.suffix=
-platform.link=
-platform.framework.prefix=-F
-platform.framework.suffix=
-platform.framework=
-platform.library.prefix=lib
-platform.library.suffix=.so

http://git-wip-us.apache.org/repos/asf/mahout/blob/9a4f9d36/viennacl-omp/pom.xml
----------------------------------------------------------------------
diff --git a/viennacl-omp/pom.xml b/viennacl-omp/pom.xml
index 756dab6..5829094 100644
--- a/viennacl-omp/pom.xml
+++ b/viennacl-omp/pom.xml
@@ -35,229 +35,6 @@
 
   <packaging>pom</packaging>
 
-  <build>
-    <plugins>
-      <!-- create test jar so other modules can reuse the native test utility 
classes. -->
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jar-plugin</artifactId>
-        <executions>
-          <execution>
-            <goals>
-              <goal>test-jar</goal>
-            </goals>
-            <phase>package</phase>
-          </execution>
-        </executions>
-      </plugin>
-
-      <plugin>
-        <artifactId>maven-javadoc-plugin</artifactId>
-      </plugin>
-
-      <plugin>
-        <artifactId>maven-source-plugin</artifactId>
-      </plugin>
-
-      <plugin>
-        <groupId>net.alchim31.maven</groupId>
-        <artifactId>scala-maven-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>add-scala-sources</id>
-            <phase>initialize</phase>
-            <goals>
-              <goal>add-source</goal>
-            </goals>
-          </execution>
-          <execution>
-            <id>scala-compile</id>
-            <phase>process-resources</phase>
-            <goals>
-              <goal>compile</goal>
-            </goals>
-          </execution>
-          <execution>
-            <id>scala-test-compile</id>
-            <phase>process-test-resources</phase>
-            <goals>
-              <goal>testCompile</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-
-      <!--this is what scalatest recommends to do to enable scala tests -->
-
-      <!-- disable surefire -->
-      <!-- disable surefire -->
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <skipTests>true</skipTests>
-        </configuration>
-      </plugin>
-      <!-- enable scalatest -->
-      <plugin>
-        <groupId>org.scalatest</groupId>
-        <artifactId>scalatest-maven-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>test</id>
-            <goals>
-              <goal>test</goal>
-            </goals>
-          </execution>
-        </executions>
-        <configuration>
-          <argLine>-Xmx4g</argLine>
-        </configuration>
-      </plugin>
-
-
-      <!--JavaCPP native build plugin-->
-      <!--  old-style way to get it to compile. -->
-      <!--based on https://github.com/bytedeco/javacpp/wiki/Maven-->
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>exec-maven-plugin</artifactId>
-        <version>1.2.1</version>
-        <executions>
-          <execution>
-            <id>javacpp</id>
-            <phase>process-classes</phase>
-            <goals>
-              <goal>exec</goal>
-            </goals>
-            <configuration>
-              <environmentVariables>
-                
<LD_LIBRARY_PATH>{project.basedir}/target/classes/org/apache/mahout/javacpp/linalg/linux-x86_64/
-                </LD_LIBRARY_PATH>
-              </environmentVariables>
-              <executable>java</executable>
-              <arguments>
-                <argument>-jar</argument>
-                <argument>${org.bytedeco:javacpp:jar}</argument>
-                <argument>-propertyfile</argument>
-                <argument>linux-x86_64-viennacl.properties</argument>
-                <argument>-classpath</argument>
-                
<argument>${project.build.outputDirectory}:${org.scala-lang:scala-library:jar}</argument>
-                
<argument>org.apache.mahout.viennacl.openmp.javacpp.CompressedMatrix</argument>
-                
<argument>org.apache.mahout.viennacl.openmp.javacpp.Context</argument>
-                
<argument>org.apache.mahout.viennacl.openmp.javacpp.MatrixBase</argument>
-                
<argument>org.apache.mahout.viennacl.openmp.javacpp.DenseRowMatrix</argument>
-                
<argument>org.apache.mahout.viennacl.openmp.javacpp.DenseColumnMatrix</argument>
-                
<argument>org.apache.mahout.viennacl.openmp.javacpp.MatMatProdExpression</argument>
-                
<argument>org.apache.mahout.viennacl.openmp.javacpp.ProdExpression</argument>
-                
<argument>org.apache.mahout.viennacl.openmp.javacpp.MatrixTransExpression</argument>
-                
<argument>org.apache.mahout.viennacl.openmp.javacpp.LinalgFunctions</argument>
-                
<argument>org.apache.mahout.viennacl.openmp.javacpp.Functions</argument>
-                
<argument>org.apache.mahout.viennacl.openmp.javacpp.VectorBase</argument>
-                
<argument>org.apache.mahout.viennacl.openmp.javacpp.VCLVector</argument>
-                
<argument>org.apache.mahout.viennacl.openmp.javacpp.VecMultExpression</argument>
-                <argument>org.apache.mahout.viennacl.openmp.OMPMMul</argument>
-                <argument>org.apache.mahout.viennacl.openmp.OMPMMul$</argument>
-              </arguments>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <version>2.3</version>
-        <executions>
-          <execution>
-            <goals>
-              <goal>properties</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>exec-maven-plugin</artifactId>
-        <version>1.2.1</version>
-      </plugin>
-
-      <!-- copy jars to top directory, which is MAHOUT_HOME -->
-      <plugin>
-        <artifactId>maven-antrun-plugin</artifactId>
-        <version>1.4</version>
-        <executions>
-          <execution>
-            <id>copy</id>
-            <!--<phase>package</phase>-->
-            <configuration>
-              <tasks>
-                <copy 
file="target/mahout-native-viennacl-omp_${scala.compat.version}-${version}.jar" 
tofile="../mahout-native-viennacl-omp_${scala.compat.version}-${version}.jar" />
-              </tasks>
-            </configuration>
-            <goals>
-              <goal>run</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <!-- delete jars on claen in top directory, which is MAHOUT_HOME -->
-      <plugin>
-        <artifactId>maven-clean-plugin</artifactId>
-        <version>3.0.0</version>
-        <configuration>
-          <filesets>
-            <fileset>
-              <directory>../</directory>
-              <includes>
-                <include>mahout-native-viennacl-omp*.jar</include>
-              </includes>
-              <followSymlinks>false</followSymlinks>
-            </fileset>
-          </filesets>
-        </configuration>
-      </plugin>
-    </plugins>
-
-
-
-  </build>
-
-  <dependencies>
-
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>mahout-math-scala_${scala.compat.version}</artifactId>
-    </dependency>
-
-    <!--  3rd-party -->
-    <dependency>
-      <groupId>log4j</groupId>
-      <artifactId>log4j</artifactId>
-    </dependency>
-
-    <!-- scala stuff -->
-    <dependency>
-      <groupId>org.scalatest</groupId>
-      <artifactId>scalatest_${scala.compat.version}</artifactId>
-    </dependency>
-
-    <!-- scala-library for annotations at compile time-->
-    <!--<dependency>-->
-    <!--<groupId>org.scala-lang</groupId>-->
-    <!--<artifactId>scala-library</artifactId>-->
-    <!--<version>${scala.version}</version>-->
-    <!--</dependency>-->
-
-
-    <dependency>
-      <groupId>org.bytedeco</groupId>
-      <artifactId>javacpp</artifactId>
-      <version>1.2.4</version>
-    </dependency>
-
-  </dependencies>
-
 
   <profiles>
     <profile>
@@ -310,5 +87,25 @@
         </plugins>
       </build>
     </profile>
+      <profile>
+          <id>all-scala</id>
+          <modules>
+              <module>scala-2.10</module>
+              <module>scala-2.11</module>
+          </modules>
+      </profile>
+      <profile>
+          <id>scala-2.10</id>
+          <modules>
+              <module>scala-2.10</module>
+          </modules>
+      </profile>
+      <profile>
+          <id>scala-2.11</id>
+          <modules>
+              <module>scala-2.11</module>
+          </modules>
+      </profile>
+
   </profiles>
 </project>

http://git-wip-us.apache.org/repos/asf/mahout/blob/9a4f9d36/viennacl-omp/scala-2.10/linux-haswell.properties
----------------------------------------------------------------------
diff --git a/viennacl-omp/scala-2.10/linux-haswell.properties 
b/viennacl-omp/scala-2.10/linux-haswell.properties
new file mode 100644
index 0000000..3ee4494
--- /dev/null
+++ b/viennacl-omp/scala-2.10/linux-haswell.properties
@@ -0,0 +1,28 @@
+platform=linux-x86_64
+platform.path.separator=:
+platform.source.suffix=.cpp
+platform.includepath.prefix=-I
+platform.includepath=
+platform.compiler=g++
+platform.compiler.cpp11=-std=c++11
+platform.compiler.default=
+platform.compiler.fastfpu=-msse3 -ffast-math
+platform.compiler.viennacl=-fopenmp -fpermissive
+platform.compiler.nodeprecated=-Wno-deprecated-declarations
+#build for haswell arch with for GCC >= 4.9.0
+platform.compiler.output=-Wl,-rpath,$ORIGIN/ -Wl,-z,noexecstack -Wl,-Bsymbolic 
-march=haswell -m64 -Wall -O3 -fPIC -shared -s -o\u0020
+#for GCC < 4.9.0 use -march=core-avx2 for haswell arch
+#platform.compiler.output=-Wl,-rpath,$ORIGIN/ -Wl,-z,noexecstack 
-Wl,-Bsymbolic -march=core-avx2 -m64 -Wall -Ofast -fPIC -shared -s -o\u0020
+#build for native:
+#platform.compiler.output=-Wl,-rpath,$ORIGIN/ -Wl,-z,noexecstack 
-Wl,-Bsymbolic -march=native -m64 -Wall -Ofast -fPIC -shared -s -o\u0020
+platform.linkpath.prefix=-L
+platform.linkpath.prefix2=-Wl,-rpath,
+platform.linkpath=
+platform.link.prefix=-l
+platform.link.suffix=
+platform.link=
+platform.framework.prefix=-F
+platform.framework.suffix=
+platform.framework=
+platform.library.prefix=lib
+platform.library.suffix=.so

http://git-wip-us.apache.org/repos/asf/mahout/blob/9a4f9d36/viennacl-omp/scala-2.10/linux-x86_64-viennacl.properties
----------------------------------------------------------------------
diff --git a/viennacl-omp/scala-2.10/linux-x86_64-viennacl.properties 
b/viennacl-omp/scala-2.10/linux-x86_64-viennacl.properties
new file mode 100644
index 0000000..e5de1fa
--- /dev/null
+++ b/viennacl-omp/scala-2.10/linux-x86_64-viennacl.properties
@@ -0,0 +1,24 @@
+platform=linux-x86_64
+platform.path.separator=:
+platform.source.suffix=.cpp
+platform.includepath.prefix=-I
+platform.includepath=
+platform.compiler=g++
+platform.compiler.cpp11=-std=c++11
+platform.compiler.default=
+platform.compiler.fastfpu=-msse3 -ffast-math
+platform.compiler.viennacl=-fopenmp -fpermissive
+platform.compiler.nodeprecated=-Wno-deprecated-declarations
+# platform.compiler.output=-Wl,-rpath,$ORIGIN/ -Wl,-z,noexecstack 
-Wl,-Bsymbolic -march=x86-64 -m64 -Wall -O3 -fPIC -shared -s -o\u0020
+platform.compiler.output=-Wl,-rpath,$ORIGIN/ -Wl,-z,noexecstack -Wl,-Bsymbolic 
-march=native -m64 -Wall -Ofast -fPIC -shared -s -o\u0020
+platform.linkpath.prefix=-L
+platform.linkpath.prefix2=-Wl,-rpath,
+platform.linkpath=
+platform.link.prefix=-l
+platform.link.suffix=
+platform.link=
+platform.framework.prefix=-F
+platform.framework.suffix=
+platform.framework=
+platform.library.prefix=lib
+platform.library.suffix=.so

http://git-wip-us.apache.org/repos/asf/mahout/blob/9a4f9d36/viennacl-omp/scala-2.10/pom.xml
----------------------------------------------------------------------
diff --git a/viennacl-omp/scala-2.10/pom.xml b/viennacl-omp/scala-2.10/pom.xml
index f78cfc1..d4610f1 100644
--- a/viennacl-omp/scala-2.10/pom.xml
+++ b/viennacl-omp/scala-2.10/pom.xml
@@ -18,16 +18,20 @@
 -->
 
 <project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.apache.mahout</groupId>
-        <artifactId>mahout-native-viennacl-omp</artifactId>
-        <version>0.13.2-SNAPSHOT</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
+  <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>mahout-native-viennacl-omp_2.10</artifactId>
-    <name>Mahout Native VienniaCL OpenCL OpenMP Bindings for Scala 2.10</name>
+  <parent>
+    <groupId>org.apache.mahout</groupId>
+    <artifactId>mahout</artifactId>
+    <version>0.13.2-SNAPSHOT</version>
+    <relativePath>../pom.xml</relativePath>
+  </parent>
+
+  <artifactId>mahout-native-viennacl-omp_2.10</artifactId>
+
+  <name>Mahout Native VienniaCL OpenMP Bindings</name>
+  <description>Native Structures and interfaces to be used from Mahout 
math-scala.
+  </description>
 
 
     <properties>
@@ -35,34 +39,282 @@
         <scala.version>2.10.4</scala.version>
     </properties>
 
-    <packaging>jar</packaging>
+  <packaging>jar</packaging>
 
-    <build>
-        <sourceDirectory>../src/main</sourceDirectory>
+  <build>
+    <plugins>
+      <!-- create test jar so other modules can reuse the native test utility 
classes. -->
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jar-plugin</artifactId>
+        <executions>
+          <execution>
+            <goals>
+              <goal>test-jar</goal>
+            </goals>
+            <phase>package</phase>
+          </execution>
+        </executions>
+      </plugin>
 
-        <plugins>
-           <plugin>
-                <artifactId>maven-antrun-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>copy</id>
-                        <phase>package</phase>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <!-- disable javacpp recompile, its wasteful and causes issues 
-->
-            <groupId>org.codehaus.mojo</groupId>
-            <artifactId>exec-maven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>javacpp</id>
-                        <phase/>
-                    </execution>
-                </executions>
-            </plugin>
+      <plugin>
+        <artifactId>maven-javadoc-plugin</artifactId>
+      </plugin>
 
-        </plugins>
-    </build>
+      <plugin>
+        <artifactId>maven-source-plugin</artifactId>
+      </plugin>
+
+      <plugin>
+        <groupId>net.alchim31.maven</groupId>
+        <artifactId>scala-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>add-scala-sources</id>
+            <phase>initialize</phase>
+            <goals>
+              <goal>add-source</goal>
+            </goals>
+          </execution>
+          <execution>
+            <id>scala-compile</id>
+            <phase>process-resources</phase>
+            <goals>
+              <goal>compile</goal>
+            </goals>
+          </execution>
+          <execution>
+            <id>scala-test-compile</id>
+            <phase>process-test-resources</phase>
+            <goals>
+              <goal>testCompile</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+
+      <!--this is what scalatest recommends to do to enable scala tests -->
+
+      <!-- disable surefire -->
+      <!-- disable surefire -->
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <skipTests>true</skipTests>
+        </configuration>
+      </plugin>
+      <!-- enable scalatest -->
+      <plugin>
+        <groupId>org.scalatest</groupId>
+        <artifactId>scalatest-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>test</id>
+            <goals>
+              <goal>test</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+          <argLine>-Xmx4g</argLine>
+        </configuration>
+      </plugin>
+
+
+      <!--JavaCPP native build plugin-->
+      <!--  old-style way to get it to compile. -->
+      <!--based on https://github.com/bytedeco/javacpp/wiki/Maven-->
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>exec-maven-plugin</artifactId>
+        <version>1.2.1</version>
+        <executions>
+          <execution>
+            <id>javacpp</id>
+            <phase>process-classes</phase>
+            <goals>
+              <goal>exec</goal>
+            </goals>
+            <configuration>
+              <environmentVariables>
+                
<LD_LIBRARY_PATH>{project.basedir}/target/classes/org/apache/mahout/javacpp/linalg/linux-x86_64/
+                </LD_LIBRARY_PATH>
+              </environmentVariables>
+              <executable>java</executable>
+              <arguments>
+                <argument>-jar</argument>
+                <argument>${org.bytedeco:javacpp:jar}</argument>
+                <argument>-propertyfile</argument>
+                <argument>linux-x86_64-viennacl.properties</argument>
+                <argument>-classpath</argument>
+                
<argument>${project.build.outputDirectory}:${org.scala-lang:scala-library:jar}</argument>
+                
<argument>org.apache.mahout.viennacl.openmp.javacpp.CompressedMatrix</argument>
+                
<argument>org.apache.mahout.viennacl.openmp.javacpp.Context</argument>
+                
<argument>org.apache.mahout.viennacl.openmp.javacpp.MatrixBase</argument>
+                
<argument>org.apache.mahout.viennacl.openmp.javacpp.DenseRowMatrix</argument>
+                
<argument>org.apache.mahout.viennacl.openmp.javacpp.DenseColumnMatrix</argument>
+                
<argument>org.apache.mahout.viennacl.openmp.javacpp.MatMatProdExpression</argument>
+                
<argument>org.apache.mahout.viennacl.openmp.javacpp.ProdExpression</argument>
+                
<argument>org.apache.mahout.viennacl.openmp.javacpp.MatrixTransExpression</argument>
+                
<argument>org.apache.mahout.viennacl.openmp.javacpp.LinalgFunctions</argument>
+                
<argument>org.apache.mahout.viennacl.openmp.javacpp.Functions</argument>
+                
<argument>org.apache.mahout.viennacl.openmp.javacpp.VectorBase</argument>
+                
<argument>org.apache.mahout.viennacl.openmp.javacpp.VCLVector</argument>
+                
<argument>org.apache.mahout.viennacl.openmp.javacpp.VecMultExpression</argument>
+                <argument>org.apache.mahout.viennacl.openmp.OMPMMul</argument>
+                <argument>org.apache.mahout.viennacl.openmp.OMPMMul$</argument>
+              </arguments>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <version>2.3</version>
+        <executions>
+          <execution>
+            <goals>
+              <goal>properties</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>exec-maven-plugin</artifactId>
+        <version>1.2.1</version>
+      </plugin>
+
+      <!-- copy jars to top directory, which is MAHOUT_HOME -->
+      <plugin>
+        <artifactId>maven-antrun-plugin</artifactId>
+        <version>1.4</version>
+        <executions>
+          <execution>
+            <id>copy</id>
+            <phase>package</phase>
+            <configuration>
+              <tasks>
+                <copy 
file="target/mahout-native-viennacl-omp_2.10-${project.version}.jar" 
tofile="../../mahout-native-viennacl-omp_2.10-${project.version}.jar" />
+              </tasks>
+            </configuration>
+            <goals>
+              <goal>run</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <!-- delete jars on claen in top directory, which is MAHOUT_HOME -->
+      <plugin>
+        <artifactId>maven-clean-plugin</artifactId>
+        <version>3.0.0</version>
+        <configuration>
+          <filesets>
+            <fileset>
+              <directory>../../</directory>
+              <includes>
+                <include>mahout-native-viennacl-omp_2.10*.jar</include>
+              </includes>
+              <followSymlinks>false</followSymlinks>
+            </fileset>
+          </filesets>
+        </configuration>
+      </plugin>
+    </plugins>
+
+
+
+  </build>
 
-</project>
\ No newline at end of file
+  <dependencies>
+
+    <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>mahout-math-scala_${scala.compat.version}</artifactId>
+    </dependency>
+
+    <!--  3rd-party -->
+    <dependency>
+      <groupId>log4j</groupId>
+      <artifactId>log4j</artifactId>
+    </dependency>
+
+    <!-- scala stuff -->
+    <dependency>
+      <groupId>org.scalatest</groupId>
+      <artifactId>scalatest_${scala.compat.version}</artifactId>
+    </dependency>
+
+    <!-- scala-library for annotations at compile time-->
+    <!--<dependency>-->
+    <!--<groupId>org.scala-lang</groupId>-->
+    <!--<artifactId>scala-library</artifactId>-->
+    <!--<version>${scala.version}</version>-->
+    <!--</dependency>-->
+
+
+    <dependency>
+      <groupId>org.bytedeco</groupId>
+      <artifactId>javacpp</artifactId>
+      <version>1.2.4</version>
+    </dependency>
+
+  </dependencies>
+
+
+  <profiles>
+    <profile>
+      <id>mahout-release</id>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>net.alchim31.maven</groupId>
+            <artifactId>scala-maven-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>generate-scaladoc</id>
+                <goals>
+                  <goal>doc</goal>
+                </goals>
+              </execution>
+              <execution>
+                <id>attach-scaladoc-jar</id>
+                <goals>
+                  <goal>doc-jar</goal>
+                </goals>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+    <profile>
+      <id>travis</id>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-surefire-plugin</artifactId>
+            <configuration>
+              <!-- Limit memory for unit tests in Travis -->
+              <argLine>-Xmx3g</argLine>
+              
<!--<argLine>-Djava.library.path=${project.build.directory}/libs/natives/linux-x86_64:${project.build.directory}/libs/natives/linux:${project.build.directory}/libs/natives/maxosx</argLine>-->
+            </configuration>
+          </plugin>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-failsafe-plugin</artifactId>
+            <configuration>
+              <!-- Limit memory for integration tests in Travis -->
+              <argLine>-Xmx3g</argLine>
+              
<!--<argLine>-Djava.library.path=${project.build.directory}/libs/natives/linux-x86_64:${project.build.directory}/libs/natives/linux:${project.build.directory}/libs/natives/maxosx</argLine>-->
+            </configuration>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+  </profiles>
+</project>

http://git-wip-us.apache.org/repos/asf/mahout/blob/9a4f9d36/viennacl-omp/scala-2.10/runs
----------------------------------------------------------------------
diff --git a/viennacl-omp/scala-2.10/runs b/viennacl-omp/scala-2.10/runs
new file mode 100644
index 0000000..a152244
--- /dev/null
+++ b/viennacl-omp/scala-2.10/runs
@@ -0,0 +1,32 @@
+original 
+row-major viennacl::matrix
+  + OCL matrix memory domain after assgn=2 
+- dense vcl mmul with fast_copy
+- mmul microbenchmark
+  +  Mahout multiplication time: 15699 ms. 
+  + ViennaCL/OpenCL multiplication time: 3625 ms. 
+  + ompA mem domain:1 
+  + ompB mem domain:1 
+  + ViennaCL/cpu/OpenMP multiplication time: 2838 ms. 
+
+with sys.ArrayCopy, all dense.
+ViennaCLSuite:
+- row-major viennacl::matrix
+  + OCL matrix memory domain after assgn=2 
+- dense vcl mmul with fast_copy
+- mmul microbenchmark
+  +  Mahout multiplication time: 15407 ms. 
+  + ViennaCL/OpenCL multiplication time: 3499 ms. 
+  + ompA mem domain:1 
+  + ompB mem domain:1 
+  + ViennaCL/cpu/OpenMP multiplication time: 2714 ms.
+
+DL latest
+ViennaCLSuite:
+- row-major viennacl::matrix
+  + OCL matrix memory domain after assgn=2 
+- dense vcl mmul with fast_copy
+- mmul microbenchmark
+  +  Mahout multiplication time: 16076 ms. 
+  + ViennaCL/OpenCL multiplication time: 3360 ms. 
+  + ViennaCL/cpu/OpenMP multiplication time: 2666 ms. 

http://git-wip-us.apache.org/repos/asf/mahout/blob/9a4f9d36/viennacl-omp/scala-2.10/src/main/java/org/apache/mahout/viennacl/openmp/javacpp/Functions.java
----------------------------------------------------------------------
diff --git 
a/viennacl-omp/scala-2.10/src/main/java/org/apache/mahout/viennacl/openmp/javacpp/Functions.java
 
b/viennacl-omp/scala-2.10/src/main/java/org/apache/mahout/viennacl/openmp/javacpp/Functions.java
new file mode 100644
index 0000000..c2bffe5
--- /dev/null
+++ 
b/viennacl-omp/scala-2.10/src/main/java/org/apache/mahout/viennacl/openmp/javacpp/Functions.java
@@ -0,0 +1,103 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.mahout.viennacl.openmp.javacpp;
+
+import org.bytedeco.javacpp.BytePointer;
+import org.bytedeco.javacpp.DoublePointer;
+import org.bytedeco.javacpp.IntPointer;
+import org.bytedeco.javacpp.annotation.*;
+
+import java.nio.DoubleBuffer;
+import java.nio.IntBuffer;
+
+
+@Properties(inherit = Context.class,
+        value = @Platform(
+                library = "jniViennaCL"
+        )
+)
+@Namespace("viennacl")
+public final class Functions {
+
+    private Functions() {
+    }
+
+    // This is (imo) an inconsistency in Vienna cl: almost all operations 
require MatrixBase, and
+    // fast_copy require type `matrix`, i.e., one of DenseRowMatrix or 
DenseColumnMatrix.
+    @Name("fast_copy")
+    public static native void fastCopy(DoublePointer srcBegin, DoublePointer 
srcEnd, @ByRef DenseRowMatrix dst);
+
+    @Name("fast_copy")
+    public static native void fastCopy(DoublePointer srcBegin, DoublePointer 
srcEnd, @ByRef DenseColumnMatrix dst);
+
+    @Name("fast_copy")
+    public static native void fastCopy(@ByRef DenseRowMatrix src, 
DoublePointer dst);
+
+    @Name("fast_copy")
+    public static native void fastCopy(@ByRef DenseColumnMatrix src, 
DoublePointer dst);
+
+    @Name("fast_copy")
+    public static native void fastCopy(@Const @ByRef VectorBase dst, @Const 
@ByRef VCLVector src);
+
+    @Name("fast_copy")
+    public static native void fastCopy(@Const @ByRef VCLVector src, @Const 
@ByRef VectorBase dst);
+
+
+    @ByVal
+    public static native MatrixTransExpression trans(@ByRef MatrixBase src);
+
+    @Name("backend::memory_read")
+    public static native void memoryReadInt(@Const @ByRef MemHandle src_buffer,
+                                  int bytes_to_read,
+                                  int offset,
+                                  IntPointer ptr,
+                                  boolean async);
+
+    @Name("backend::memory_read")
+    public static native void memoryReadDouble(@Const @ByRef MemHandle 
src_buffer,
+                                            int bytes_to_read,
+                                            int offset,
+                                            DoublePointer ptr,
+                                            boolean async);
+
+    @Name("backend::memory_read")
+    public static native void memoryReadInt(@Const @ByRef MemHandle src_buffer,
+                                            int bytes_to_read,
+                                            int offset,
+                                            IntBuffer ptr,
+                                            boolean async);
+
+    @Name("backend::memory_read")
+    public static native void memoryReadDouble(@Const @ByRef MemHandle 
src_buffer,
+                                               int bytes_to_read,
+                                               int offset,
+                                               DoubleBuffer ptr,
+                                               boolean async);
+
+    @Name("backend::memory_read")
+    public static native void memoryReadBytes(@Const @ByRef MemHandle 
src_buffer,
+                                              int bytes_to_read,
+                                              int offset,
+                                              BytePointer ptr,
+                                              boolean async);
+
+
+    static {
+        Context.loadLib();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/mahout/blob/9a4f9d36/viennacl-omp/scala-2.10/src/main/java/org/apache/mahout/viennacl/openmp/javacpp/LinalgFunctions.java
----------------------------------------------------------------------
diff --git 
a/viennacl-omp/scala-2.10/src/main/java/org/apache/mahout/viennacl/openmp/javacpp/LinalgFunctions.java
 
b/viennacl-omp/scala-2.10/src/main/java/org/apache/mahout/viennacl/openmp/javacpp/LinalgFunctions.java
new file mode 100644
index 0000000..c2a40d9
--- /dev/null
+++ 
b/viennacl-omp/scala-2.10/src/main/java/org/apache/mahout/viennacl/openmp/javacpp/LinalgFunctions.java
@@ -0,0 +1,86 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.mahout.viennacl.openmp.javacpp;
+
+import org.apache.mahout.viennacl.openmp.javacpp.*;
+import org.bytedeco.javacpp.annotation.*;
+
+
+@Properties(inherit = Context.class,
+        value = @Platform(
+                library = "jniViennaCL"
+        )
+)
+@Namespace("viennacl::linalg")
+public final class LinalgFunctions {
+
+    private LinalgFunctions() {
+    }
+
+    static {
+        Context.loadLib();
+    }
+
+
+    @ByVal
+    public static native MatMatProdExpression prod(@Const @ByRef MatrixBase a,
+                                                   @Const @ByRef MatrixBase b);
+
+    @ByVal
+    public static native ProdExpression prod(@Const @ByRef CompressedMatrix a,
+                                             @Const @ByRef CompressedMatrix b);
+
+    @ByVal
+    public static native MatVecProdExpression prod(@Const @ByRef MatrixBase a,
+                                                   @Const @ByRef VectorBase b);
+
+    @ByVal
+    public static native SrMatDnMatProdExpression prod(@Const @ByRef 
CompressedMatrix spMx,
+                                                       @Const @ByRef 
MatrixBase dMx);
+    @ByVal
+    @Name("prod")
+    public static native DenseColumnMatrix prodCm(@Const @ByRef MatrixBase a,
+                                                  @Const @ByRef MatrixBase b);
+    @ByVal
+    @Name("prod")
+    public static native DenseRowMatrix prodRm(@Const @ByRef MatrixBase a,
+                                               @Const @ByRef MatrixBase b);
+
+    @ByVal
+    @Name("prod")
+    public static native DenseRowMatrix prodRm(@Const @ByRef CompressedMatrix 
spMx,
+                                               @Const @ByRef MatrixBase dMx);
+
+
+//    @ByVal
+//    public static native MatrixProdExpression prod(@Const @ByRef 
DenseRowMatrix a,
+//                                                   @Const @ByRef 
DenseRowMatrix b);
+//
+//    @ByVal
+//    public static native MatrixProdExpression prod(@Const @ByRef 
DenseRowMatrix a,
+//                                                   @Const @ByRef 
DenseColumnMatrix b);
+//
+//    @ByVal
+//    public static native MatrixProdExpression prod(@Const @ByRef 
DenseColumnMatrix a,
+//                                                   @Const @ByRef 
DenseRowMatrix b);
+//
+//    @ByVal
+//    public static native MatrixProdExpression prod(@Const @ByRef 
DenseColumnMatrix a,
+//                                                   @Const @ByRef 
DenseColumnMatrix b);
+
+
+}

http://git-wip-us.apache.org/repos/asf/mahout/blob/9a4f9d36/viennacl-omp/scala-2.10/src/main/java/org/apache/mahout/viennacl/openmp/javacpp/MatrixTransExpression.scala
----------------------------------------------------------------------
diff --git 
a/viennacl-omp/scala-2.10/src/main/java/org/apache/mahout/viennacl/openmp/javacpp/MatrixTransExpression.scala
 
b/viennacl-omp/scala-2.10/src/main/java/org/apache/mahout/viennacl/openmp/javacpp/MatrixTransExpression.scala
new file mode 100644
index 0000000..82574b4
--- /dev/null
+++ 
b/viennacl-omp/scala-2.10/src/main/java/org/apache/mahout/viennacl/openmp/javacpp/MatrixTransExpression.scala
@@ -0,0 +1,34 @@
+/**
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  * http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+package org.apache.mahout.viennacl.openmp.javacpp;
+
+import org.bytedeco.javacpp.Pointer
+import org.bytedeco.javacpp.annotation.{Name, Namespace, Platform, Properties}
+
+
+@Properties(inherit = Array(classOf[Context]),
+  value = Array(new Platform(
+    include = Array("matrix.hpp"),
+    library = "jniViennaCL")
+  ))
+@Namespace("viennacl")
+@Name(Array("matrix_expression<const viennacl::matrix_base<double>, " +
+  "const viennacl::matrix_base<double>, " +
+  "viennacl::op_trans>"))
+class MatrixTransExpression extends Pointer {
+
+}

http://git-wip-us.apache.org/repos/asf/mahout/blob/9a4f9d36/viennacl-omp/scala-2.10/src/main/scala/org/apache/mahout/viennacl/openmp/OMPMMul.scala
----------------------------------------------------------------------
diff --git 
a/viennacl-omp/scala-2.10/src/main/scala/org/apache/mahout/viennacl/openmp/OMPMMul.scala
 
b/viennacl-omp/scala-2.10/src/main/scala/org/apache/mahout/viennacl/openmp/OMPMMul.scala
new file mode 100644
index 0000000..9a59999
--- /dev/null
+++ 
b/viennacl-omp/scala-2.10/src/main/scala/org/apache/mahout/viennacl/openmp/OMPMMul.scala
@@ -0,0 +1,449 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.mahout.viennacl.openmp
+
+import org.apache.mahout.logging._
+import org.apache.mahout.math
+import org.apache.mahout.math._
+import org.apache.mahout.math.backend.incore.MMulSolver
+import org.apache.mahout.math.flavor.{BackEnum, TraversingStructureEnum}
+import org.apache.mahout.math.function.Functions
+import org.apache.mahout.math.scalabindings.RLikeOps._
+import org.apache.mahout.math.scalabindings._
+import org.apache.mahout.viennacl.openmp.javacpp.Functions._
+import org.apache.mahout.viennacl.openmp.javacpp.LinalgFunctions._
+import org.apache.mahout.viennacl.openmp.javacpp.{CompressedMatrix, Context, 
DenseRowMatrix}
+
+import scala.collection.JavaConversions._
+
+object OMPMMul extends MMBinaryFunc {
+
+  private implicit val log = getLog(OMPMMul.getClass)
+
+  override def apply(a: Matrix, b: Matrix, r: Option[Matrix]): Matrix = {
+
+    require(a.ncol == b.nrow, "Incompatible matrix sizes in matrix 
multiplication.")
+
+    val (af, bf) = (a.getFlavor, b.getFlavor)
+    val backs = (af.getBacking, bf.getBacking)
+    val sd = (af.getStructure, math.scalabindings.densityAnalysis(a), 
bf.getStructure, densityAnalysis(b))
+
+
+    try {
+
+      val alg: MMulAlg = backs match {
+
+        // Both operands are jvm memory backs.
+        case (BackEnum.JVMMEM, BackEnum.JVMMEM) ⇒
+
+          sd match {
+
+            // Multiplication cases by a diagonal matrix.
+            case (TraversingStructureEnum.VECTORBACKED, _, 
TraversingStructureEnum.COLWISE, _)
+              if a.isInstanceOf[DiagonalMatrix] ⇒ jvmDiagCW
+            case (TraversingStructureEnum.VECTORBACKED, _, 
TraversingStructureEnum.SPARSECOLWISE, _)
+              if a.isInstanceOf[DiagonalMatrix] ⇒ jvmDiagCW
+            case (TraversingStructureEnum.VECTORBACKED, _, 
TraversingStructureEnum.ROWWISE, _)
+              if a.isInstanceOf[DiagonalMatrix] ⇒ jvmDiagRW
+            case (TraversingStructureEnum.VECTORBACKED, _, 
TraversingStructureEnum.SPARSEROWWISE, _)
+              if a.isInstanceOf[DiagonalMatrix] ⇒ jvmDiagRW
+
+            case (TraversingStructureEnum.COLWISE, _, 
TraversingStructureEnum.VECTORBACKED, _)
+              if b.isInstanceOf[DiagonalMatrix] ⇒ jvmCWDiag
+            case (TraversingStructureEnum.SPARSECOLWISE, _, 
TraversingStructureEnum.VECTORBACKED, _)
+              if b.isInstanceOf[DiagonalMatrix] ⇒ jvmCWDiag
+            case (TraversingStructureEnum.ROWWISE, _, 
TraversingStructureEnum.VECTORBACKED, _)
+              if b.isInstanceOf[DiagonalMatrix] ⇒ jvmRWDiag
+            case (TraversingStructureEnum.SPARSEROWWISE, _, 
TraversingStructureEnum.VECTORBACKED, _)
+              if b.isInstanceOf[DiagonalMatrix] ⇒ jvmRWDiag
+
+            // Dense-dense cases
+            case (TraversingStructureEnum.ROWWISE, true, 
TraversingStructureEnum.COLWISE, true) if a eq b.t ⇒ ompDRWAAt
+            case (TraversingStructureEnum.ROWWISE, true, 
TraversingStructureEnum.COLWISE, true) if a.t eq b ⇒ ompDRWAAt
+            case (TraversingStructureEnum.ROWWISE, true, 
TraversingStructureEnum.COLWISE, true) ⇒ ompRWCW
+            case (TraversingStructureEnum.ROWWISE, true, 
TraversingStructureEnum.ROWWISE, true) ⇒ jvmRWRW
+            case (TraversingStructureEnum.COLWISE, true, 
TraversingStructureEnum.COLWISE, true) ⇒ jvmCWCW
+            case (TraversingStructureEnum.COLWISE, true, 
TraversingStructureEnum.ROWWISE, true) if a eq b.t ⇒ jvmDCWAAt
+            case (TraversingStructureEnum.COLWISE, true, 
TraversingStructureEnum.ROWWISE, true) if a.t eq b ⇒ jvmDCWAAt
+            case (TraversingStructureEnum.COLWISE, true, 
TraversingStructureEnum.ROWWISE, true) ⇒ jvmCWRW
+
+            // Sparse row matrix x sparse row matrix (array of vectors)
+            case (TraversingStructureEnum.ROWWISE, false, 
TraversingStructureEnum.ROWWISE, false) ⇒ ompSparseRWRW
+            case (TraversingStructureEnum.ROWWISE, false, 
TraversingStructureEnum.COLWISE, false) ⇒ jvmSparseRWCW
+            case (TraversingStructureEnum.COLWISE, false, 
TraversingStructureEnum.ROWWISE, false) ⇒ jvmSparseCWRW
+            case (TraversingStructureEnum.COLWISE, false, 
TraversingStructureEnum.COLWISE, false) ⇒ jvmSparseCWCW
+
+            // Sparse matrix x sparse matrix (hashtable of vectors)
+            case (TraversingStructureEnum.SPARSEROWWISE, false, 
TraversingStructureEnum.SPARSEROWWISE, false) ⇒
+              ompSparseRowRWRW
+            case (TraversingStructureEnum.SPARSEROWWISE, false, 
TraversingStructureEnum.SPARSECOLWISE, false) ⇒
+              jvmSparseRowRWCW
+            case (TraversingStructureEnum.SPARSECOLWISE, false, 
TraversingStructureEnum.SPARSEROWWISE, false) ⇒
+              jvmSparseRowCWRW
+            case (TraversingStructureEnum.SPARSECOLWISE, false, 
TraversingStructureEnum.SPARSECOLWISE, false) ⇒
+              jvmSparseRowCWCW
+
+            // Sparse matrix x non-like
+            case (TraversingStructureEnum.SPARSEROWWISE, false, 
TraversingStructureEnum.ROWWISE, _) ⇒ ompSparseRowRWRW
+            case (TraversingStructureEnum.SPARSEROWWISE, false, 
TraversingStructureEnum.COLWISE, _) ⇒ jvmSparseRowRWCW
+            case (TraversingStructureEnum.SPARSECOLWISE, false, 
TraversingStructureEnum.ROWWISE, _) ⇒ jvmSparseRowCWRW
+            case (TraversingStructureEnum.SPARSECOLWISE, false, 
TraversingStructureEnum.COLWISE, _) ⇒ jvmSparseCWCW
+            case (TraversingStructureEnum.ROWWISE, _, 
TraversingStructureEnum.SPARSEROWWISE, false) ⇒ ompSparseRWRW
+            case (TraversingStructureEnum.ROWWISE, _, 
TraversingStructureEnum.SPARSECOLWISE, false) ⇒ jvmSparseRWCW
+            case (TraversingStructureEnum.COLWISE, _, 
TraversingStructureEnum.SPARSEROWWISE, false) ⇒ jvmSparseCWRW
+            case (TraversingStructureEnum.COLWISE, _, 
TraversingStructureEnum.SPARSECOLWISE, false) ⇒ jvmSparseRowCWCW
+
+            // Everything else including at least one sparse LHS or RHS 
argument
+            case (TraversingStructureEnum.ROWWISE, false, 
TraversingStructureEnum.ROWWISE, _) ⇒ ompSparseRWRW
+            case (TraversingStructureEnum.ROWWISE, false, 
TraversingStructureEnum.COLWISE, _) ⇒ jvmSparseRWCW
+            case (TraversingStructureEnum.COLWISE, false, 
TraversingStructureEnum.ROWWISE, _) ⇒ jvmSparseCWRW
+            case (TraversingStructureEnum.COLWISE, false, 
TraversingStructureEnum.COLWISE, _) ⇒ jvmSparseCWCW2flips
+
+            // Sparse methods are only effective if the first argument is 
sparse, so we need to do a swap.
+            case (_, _, _, false) ⇒ (a, b, r) ⇒ apply(b.t, a.t, r.map {
+              _.t
+            }).t
+
+            // Default jvm-jvm case.
+            // for some reason a SrarseRowMatrix DRM %*% SrarseRowMatrix DRM 
was dumping off to here
+            case _ ⇒ ompRWCW
+          }
+      }
+
+      alg(a, b, r)
+    } catch {
+      // TODO FASTHACK:  just revert to JVM if there is an exception..
+      //  eg. java.lang.nullPointerException if more openCL contexts
+      //  have been created than number of GPU cards.
+      //  better option wuold be to fall back to OpenCl First.
+      case ex: Exception =>
+        println(ex.getMessage + "falling back to JVM MMUL")
+        return MMul(a, b, r)
+    }
+  }
+
+  type MMulAlg = MMBinaryFunc
+
+  @inline
+  private def ompRWCW(a: Matrix, b: Matrix, r: Option[Matrix] = None): Matrix 
= {
+    println("ompRWCW")
+    //
+    //    require(r.forall(mxR ⇒ mxR.nrow == a.nrow && mxR.ncol == b.ncol))
+    //    val (m, n) = (a.nrow, b.ncol)
+    //
+    //    val mxR = r.getOrElse(if (densityAnalysis(a)) a.like(m, n) else 
b.like(m, n))
+    //
+    //    for (row ← 0 until mxR.nrow; col ← 0 until mxR.ncol) {
+    //      // this vector-vector should be sort of optimized, right?
+    //      mxR(row, col) = a(row, ::) dot b(::, col)
+    //    }
+    //    mxR
+
+    val hasElementsA = a.zSum() >  0.0
+    val hasElementsB = b.zSum() >  0.0
+
+    // A has a sparse matrix structure of unknown size.  We do not want to
+    // simply convert it to a Dense Matrix which may result in an OOM error.
+
+    // If it is empty use JVM MMul, since we can not convert it to a VCL CSR 
Matrix.
+    if (!hasElementsA)  {
+      println("Matrix a has zero elements can not convert to CSR")
+      return MMul(a, b, r)
+    }
+
+    // CSR matrices are efficient up to 50% non-zero
+    if (b.getFlavor.isDense) {
+      var ms = System.currentTimeMillis()
+      val oclCtx = new Context(Context.MAIN_MEMORY)
+      val oclA = toVclCmpMatrixAlt(a, oclCtx)
+      val oclB = toVclDenseRM(b, oclCtx)
+      val oclC = new DenseRowMatrix(prod(oclA, oclB))
+      val mxC = fromVclDenseRM(oclC)
+      ms = System.currentTimeMillis() - ms
+      debug(s"ViennaCL/OpenMP multiplication time: $ms ms.")
+
+      oclA.close()
+      oclB.close()
+      oclC.close()
+
+      mxC
+    } else {
+      // Fall back to JVM based MMul if either matrix is sparse and empty
+      if (!hasElementsA || !hasElementsB)  {
+        println("Matrix a or b has zero elements can not convert to CSR")
+        return MMul(a, b, r)
+      }
+
+      var ms = System.currentTimeMillis()
+      val hostClCtx = new Context(Context.MAIN_MEMORY)
+      val oclA = toVclCmpMatrixAlt(a, hostClCtx)
+      val oclB = toVclCmpMatrixAlt(b, hostClCtx)
+      val oclC = new CompressedMatrix(prod(oclA, oclB))
+      val mxC = fromVclCompressedMatrix(oclC)
+      ms = System.currentTimeMillis() - ms
+      debug(s"ViennaCL/OpenMP multiplication time: $ms ms.")
+
+      oclA.close()
+      oclB.close()
+      oclC.close()
+
+      mxC
+    }
+  }
+
+
+  @inline
+  private def jvmRWRW(a: Matrix, b: Matrix, r: Option[Matrix] = None): Matrix 
= {
+    log.info("Using jvmRWRW method")
+    // A bit hackish: currently, this relies a bit on the fact that like 
produces RW(?)
+    val bclone = b.like(b.ncol, b.nrow).t
+    for (brow ← b) bclone(brow.index(), ::) := brow
+
+    require(bclone.getFlavor.getStructure == TraversingStructureEnum.COLWISE 
|| bclone.getFlavor.getStructure ==
+      TraversingStructureEnum.SPARSECOLWISE, "COL wise conversion assumption 
of RHS is wrong, do over this code.")
+
+    ompRWCW(a, bclone, r)
+  }
+
+  private def jvmCWCW(a: Matrix, b: Matrix, r: Option[Matrix] = None): Matrix 
= {
+    log.info("Using jvmCWCW method")
+    jvmRWRW(b.t, a.t, r.map(_.t)).t
+  }
+
+  private def jvmCWRW(a: Matrix, b: Matrix, r: Option[Matrix] = None): Matrix 
= {
+    log.info("Using jvmCWRW method")
+    // This is a primary contender with Outer Prod sum algo.
+    // Here, we force-reorient both matrices and run RWCW.
+    // A bit hackish: currently, this relies a bit on the fact that clone 
always produces RW(?)
+    val aclone = a.cloned
+
+    require(aclone.getFlavor.getStructure == TraversingStructureEnum.ROWWISE 
|| aclone.getFlavor.getStructure ==
+      TraversingStructureEnum.SPARSEROWWISE, "Row wise conversion assumption 
of RHS is wrong, do over this code.")
+
+    jvmRWRW(aclone, b, r)
+  }
+
+  // left is Sparse right is any
+  private def ompSparseRWRW(a: Matrix, b: Matrix, r: Option[Matrix] = None): 
Matrix = {
+    log.info("Using ompSparseRWRW method")
+    val mxR = r.getOrElse(b.like(a.nrow, b.ncol))
+
+    /* Make sure that the matrix is not empty.  VCL {{compressed_matrix}}s must
+       have nnz > 0
+       N.B. This method is horribly inefficent. However there is a difference 
between
+       getNumNonDefaultElements() and getNumNonZeroElements() which we do not 
always
+       have access to. We created MAHOUT-1882 for this.
+    */
+
+    val hasElementsA = a.zSum() >  0.0
+    val hasElementsB = b.zSum() >  0.0
+
+    // A has a sparse matrix structure of unknown size.  We do not want to
+    // simply convert it to a Dense Matrix which may result in an OOM error.
+    // If it is empty use JVM MMul, since we can not convert it to a VCL CSR 
Matrix.
+    if (!hasElementsA)  {
+      log.warn("Matrix a has zero elements can not convert to CSR")
+      return MMul(a, b, r)
+    }
+
+    // CSR matrices are efficient up to 50% non-zero
+    if(b.getFlavor.isDense) {
+      var ms = System.currentTimeMillis()
+      val hostClCtx = new Context(Context.MAIN_MEMORY)
+      val oclA = toVclCmpMatrixAlt(a, hostClCtx)
+      val oclB = toVclDenseRM(b, hostClCtx)
+      val oclC = new DenseRowMatrix(prod(oclA, oclB))
+      val mxC = fromVclDenseRM(oclC)
+      ms = System.currentTimeMillis() - ms
+      log.debug(s"ViennaCL/OpenMP multiplication time: $ms ms.")
+
+      oclA.close()
+      oclB.close()
+      oclC.close()
+
+      mxC
+    } else {
+      // Fall back to JVM based MMul if either matrix is sparse and empty
+      if (!hasElementsA || !hasElementsB)  {
+        log.warn("Matrix a or b has zero elements can not convert to CSR")
+        return MMul(a, b, r)
+      }
+
+      var ms = System.currentTimeMillis()
+      val hostClCtx = new Context(Context.MAIN_MEMORY)
+      val oclA = toVclCmpMatrixAlt(a, hostClCtx)
+      val oclB = toVclCmpMatrixAlt(b, hostClCtx)
+      val oclC = new CompressedMatrix(prod(oclA, oclB))
+      val mxC = fromVclCompressedMatrix(oclC)
+      ms = System.currentTimeMillis() - ms
+      log.debug(s"ViennaCL/OpenMP multiplication time: $ms ms.")
+
+      oclA.close()
+      oclB.close()
+      oclC.close()
+
+      mxC
+    }
+
+  }
+
+  //sparse %*% dense
+  private def ompSparseRowRWRW(a: Matrix, b: Matrix, r: Option[Matrix] = 
None): Matrix = {
+    log.info("Using ompSparseRowRWRW method")
+    val hasElementsA = a.zSum() >  0
+
+    // A has a sparse matrix structure of unknown size.  We do not want to
+    // simply convert it to a Dense Matrix which may result in an OOM error.
+    // If it is empty fall back to  JVM MMul, since we can not convert it
+    // to a VCL CSR Matrix.
+    if (!hasElementsA)  {
+      log.warn("Matrix a has zero elements can not convert to CSR")
+      return MMul(a, b, r)
+    }
+
+    var ms = System.currentTimeMillis()
+    val hostClCtx = new Context(Context.MAIN_MEMORY)
+    val oclA = toVclCmpMatrixAlt(a, hostClCtx)
+    val oclB = toVclDenseRM(b, hostClCtx)
+    val oclC = new DenseRowMatrix(prod(oclA, oclB))
+    val mxC = fromVclDenseRM(oclC)
+    ms = System.currentTimeMillis() - ms
+    log.debug(s"ViennaCL/OpenMP multiplication time: $ms ms.")
+
+    oclA.close()
+    oclB.close()
+    oclC.close()
+
+    mxC
+  }
+
+  private def jvmSparseRowCWCW(a: Matrix, b: Matrix, r: Option[Matrix] = None) 
=
+    ompSparseRowRWRW(b.t, a.t, r.map(_.t)).t
+
+  private def jvmSparseRowCWCW2flips(a: Matrix, b: Matrix, r: Option[Matrix] = 
None) =
+    ompSparseRowRWRW(a cloned, b cloned, r)
+
+  private def jvmSparseRowRWCW(a: Matrix, b: Matrix, r: Option[Matrix]) =
+    ompSparseRowRWRW(a, b cloned, r)
+
+  private def jvmSparseRowCWRW(a: Matrix, b: Matrix, r: Option[Matrix]) =
+    ompSparseRowRWRW(a cloned, b, r)
+
+  private def jvmSparseRWCW(a: Matrix, b: Matrix, r: Option[Matrix] = None) =
+    ompSparseRWRW(a, b.cloned, r)
+
+  private def jvmSparseCWRW(a: Matrix, b: Matrix, r: Option[Matrix] = None) =
+    ompSparseRWRW(a cloned, b, r)
+
+  private def jvmSparseCWCW(a: Matrix, b: Matrix, r: Option[Matrix] = None) =
+    ompSparseRWRW(b.t, a.t, r.map(_.t)).t
+
+  private def jvmSparseCWCW2flips(a: Matrix, b: Matrix, r: Option[Matrix] = 
None) =
+    ompSparseRWRW(a cloned, b cloned, r)
+
+  private def jvmDiagRW(diagm:Matrix, b:Matrix, r:Option[Matrix] = 
None):Matrix = {
+    log.info("Using jvmDiagRW method")
+    val mxR = r.getOrElse(b.like(diagm.nrow, b.ncol))
+
+    for (del ← diagm.diagv.nonZeroes())
+      mxR(del.index, ::).assign(b(del.index, ::), Functions.plusMult(del))
+
+    mxR
+  }
+
+  private def jvmDiagCW(diagm: Matrix, b: Matrix, r: Option[Matrix] = None): 
Matrix = {
+    log.info("Using jvmDiagCW method")
+    val mxR = r.getOrElse(b.like(diagm.nrow, b.ncol))
+    for (bcol ← b.t) mxR(::, bcol.index()) := bcol * diagm.diagv
+    mxR
+  }
+
+  private def jvmCWDiag(a: Matrix, diagm: Matrix, r: Option[Matrix] = None) =
+    jvmDiagRW(diagm, a.t, r.map {_.t}).t
+
+  private def jvmRWDiag(a: Matrix, diagm: Matrix, r: Option[Matrix] = None) =
+    jvmDiagCW(diagm, a.t, r.map {_.t}).t
+
+  /** Dense column-wise AA' */
+  private def jvmDCWAAt(a:Matrix, b:Matrix, r:Option[Matrix] = None) = {
+    // a.t must be equiv. to b. Cloning must rewrite to row-wise.
+    ompDRWAAt(a.cloned,null,r)
+  }
+
+  /** Dense Row-wise AA' */
+  // We probably will not want to use this for the actual release unless A is 
cached already
+  // but adding for testing purposes.
+  private def ompDRWAAt(a:Matrix, b:Matrix, r:Option[Matrix] = None) = {
+    // a.t must be equiv to b.
+    log.info("Executing on OMP")
+    log.debug("AAt computation detected; passing off to OMP")
+
+    // Check dimensions if result is supplied.
+    require(r.forall(mxR ⇒ mxR.nrow == a.nrow && mxR.ncol == a.nrow))
+
+    val mxR = r.getOrElse(a.like(a.nrow, a.nrow))
+
+    var ms = System.currentTimeMillis()
+    val hostClCtx = new Context(Context.MAIN_MEMORY)
+    val oclA = toVclDenseRM(src = a, hostClCtx)
+    val oclAt = new DenseRowMatrix(trans(oclA))
+    val oclC = new DenseRowMatrix(prod(oclA, oclAt))
+
+    val mxC = fromVclDenseRM(oclC)
+    ms = System.currentTimeMillis() - ms
+    log.debug(s"ViennaCL/OpenMP multiplication time: $ms ms.")
+
+    oclA.close()
+    //oclApr.close()
+    oclAt.close()
+    oclC.close()
+
+    mxC
+
+  }
+
+  private def jvmOuterProdSum(a: Matrix, b: Matrix, r: Option[Matrix] = None): 
Matrix = {
+    log.info("Using jvmOuterProdSum method")
+    // Need to check whether this is already laid out for outer product 
computation, which may be faster than
+    // reorienting both matrices.
+    val (m, n) = (a.nrow, b.ncol)
+
+    // Prefer col-wise result iff a is dense and b is sparse. In all other 
cases default to row-wise.
+    val preferColWiseR = a.getFlavor.isDense && !b.getFlavor.isDense
+
+    val mxR = r.getOrElse {
+      (a.getFlavor.isDense, preferColWiseR) match {
+        case (false, false) ⇒ b.like(m, n)
+        case (false, true) ⇒ b.like(n, m).t
+        case (true, false) ⇒ a.like(m, n)
+        case (true, true) ⇒ a.like(n, m).t
+      }
+    }
+
+    // Loop outer products
+    if (preferColWiseR) {
+      // this means B is sparse and A is not, so we need to iterate over b 
values and update R columns with +=
+      // one at a time.
+      for ((acol, brow) ← a.t.zip(b); bel ← brow.nonZeroes) mxR(::, 
bel.index()) += bel * acol
+    } else {
+      for ((acol, brow) ← a.t.zip(b); ael ← acol.nonZeroes()) 
mxR(ael.index(), ::) += ael * brow
+    }
+
+    mxR
+  }
+}

http://git-wip-us.apache.org/repos/asf/mahout/blob/9a4f9d36/viennacl-omp/scala-2.10/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/CompressedMatrix.scala
----------------------------------------------------------------------
diff --git 
a/viennacl-omp/scala-2.10/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/CompressedMatrix.scala
 
b/viennacl-omp/scala-2.10/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/CompressedMatrix.scala
new file mode 100644
index 0000000..3c5a6eb
--- /dev/null
+++ 
b/viennacl-omp/scala-2.10/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/CompressedMatrix.scala
@@ -0,0 +1,135 @@
+/**
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  * http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+package org.apache.mahout.viennacl.openmp.javacpp
+
+import java.nio._
+
+import org.bytedeco.javacpp._
+import org.bytedeco.javacpp.annotation._
+
+import scala.collection.mutable.ArrayBuffer
+
+
+@Properties(inherit = Array(classOf[Context]),
+  value = Array(new Platform(
+    include = Array("compressed_matrix.hpp"),
+    library="jniViennaCL"
+  )))
+@Name(Array("viennacl::compressed_matrix<double>"))
+final class CompressedMatrix(defaultCtr: Boolean = true) extends Pointer {
+
+  protected val ptrs = new ArrayBuffer[Pointer]()
+
+  // call this after set or better TODO: yet wrap set() in a public method 
that will call this
+  def registerPointersForDeallocation(p:Pointer): Unit = {
+    ptrs += p
+  }
+
+  override def deallocate(deallocate: Boolean): Unit = {
+    super.deallocate(deallocate)
+     ptrs.foreach(_.close())
+  }
+
+  if (defaultCtr) allocate()
+
+  def this(nrow: Int, ncol: Int) {
+    this(false)
+    allocate(nrow, ncol, new Context)
+  }
+
+  def this(nrow: Int, ncol: Int, ctx: Context) {
+    this(false)
+    allocate(nrow, ncol, ctx)
+  }
+
+  def this(nrow: Int, ncol: Int, nonzeros: Int) {
+    this(false)
+    allocate(nrow, ncol, nonzeros, new Context)
+  }
+
+  def this(nrow: Int, ncol: Int, nonzeros: Int, ctx: Context) {
+    this(false)
+    allocate(nrow, ncol, nonzeros, ctx)
+  }
+
+  def this(pe: ProdExpression) {
+    this(false)
+    allocate(pe)
+  }
+
+  @native protected def allocate()
+
+  @native protected def allocate(nrow: Int, ncol: Int, nonzeros: Int, @ByVal 
ctx: Context)
+
+  @native protected def allocate(nrow: Int, ncol: Int, @ByVal ctx: Context)
+
+  @native protected def allocate(@Const @ByRef pe: ProdExpression)
+
+//  @native protected def allocate(db: DoubleBuffer)
+//
+//  @native protected def allocate(ib: IntBuffer)
+
+  // Warning: apparently there are differences in bit interpretation between 
OpenCL and everything
+  // else for unsigned int type. So, for OpenCL backend, rowJumper and 
colIndices have to be packed
+  // with reference to that cl_uint type that Vienna-CL defines.
+  @native def set(@Cast(Array("const void*")) rowJumper: IntBuffer,
+                  @Cast(Array("const void*")) colIndices: IntBuffer,
+                  @Const elements: DoubleBuffer,
+                  nrow: Int,
+                  ncol: Int,
+                  nonzeros: Int
+                 )
+
+  /** With javacpp pointers. */
+  @native def set(@Cast(Array("const void*")) rowJumper: IntPointer,
+                  @Cast(Array("const void*")) colIndices: IntPointer,
+                  @Const elements: DoublePointer,
+                  nrow: Int,
+                  ncol: Int,
+                  nonzeros: Int
+                 )
+
+  @Name(Array("operator="))
+  @native def :=(@Const @ByRef pe: ProdExpression)
+
+  @native def generate_row_block_information()
+
+  /** getters for the compressed_matrix size */
+  //const vcl_size_t & size1() const { return rows_; }
+  @native def size1: Int
+  //const vcl_size_t & size2() const { return cols_; }
+  @native def size2: Int
+  //const vcl_size_t & nnz() const { return nonzeros_; }
+  @native def nnz: Int
+  //const vcl_size_t & blocks1() const { return row_block_num_; }
+ // @native def blocks1: Int
+
+  /** getters for the compressed_matrix buffers */
+  //const handle_type & handle1() const { return row_buffer_; }
+  @native @Const @ByRef def handle1: MemHandle
+  //const handle_type & handle2() const { return col_buffer_; }
+  @native @Const @ByRef def handle2: MemHandle
+  //const handle_type & handle3() const { return row_blocks_; }
+  @native @Const @ByRef def handle3: MemHandle
+  //const handle_type & handle() const { return elements_; }
+  @native @Const @ByRef def handle: MemHandle
+
+}
+
+object CompressedMatrix {
+  Context.loadLib()
+}

http://git-wip-us.apache.org/repos/asf/mahout/blob/9a4f9d36/viennacl-omp/scala-2.10/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/Context.scala
----------------------------------------------------------------------
diff --git 
a/viennacl-omp/scala-2.10/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/Context.scala
 
b/viennacl-omp/scala-2.10/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/Context.scala
new file mode 100644
index 0000000..ae1b782
--- /dev/null
+++ 
b/viennacl-omp/scala-2.10/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/Context.scala
@@ -0,0 +1,58 @@
+package org.apache.mahout.viennacl.openmp.javacpp
+
+
+import org.bytedeco.javacpp.annotation._
+import org.bytedeco.javacpp.{Loader, Pointer}
+
+/**
+  * This assumes viennacl 1.7.1 is installed, which in ubuntu Xenial defaults 
to
+  * /usr/include/viennacl, and is installed via
+  * {{{
+  *   sudo apt-get install libviennacl-dev
+  * }}}
+  *
+  * @param mtype
+  */
+@Properties(Array(
+  new Platform(
+    includepath = Array("/usr/include/viennacl"),
+    include = Array("matrix.hpp", "compressed_matrix.hpp"),
+    define = Array("VIENNACL_WITH_OPENMP"),
+    compiler = Array("fastfpu","viennacl"),
+    link = Array("OpenCL"),
+    library = "jniViennaCL"
+  )))
+@Namespace("viennacl")
+@Name(Array("context"))
+final class Context(mtype: Int = Context.MEMORY_NOT_INITIALIZED) extends 
Pointer {
+
+  import Context._
+
+  if (mtype == MEMORY_NOT_INITIALIZED)
+    allocate()
+  else
+    allocate(mtype)
+
+  @native protected def allocate()
+
+  @native protected def allocate(@Cast(Array("viennacl::memory_types")) mtype: 
Int)
+
+  @Name(Array("memory_type"))
+  @Cast(Array("int"))
+  @native def memoryType: Int
+
+}
+
+object Context {
+
+  def loadLib() = Loader.load(classOf[Context])
+
+  loadLib()
+
+  /* Memory types. Ported from VCL header files. */
+  val MEMORY_NOT_INITIALIZED = 0
+  val MAIN_MEMORY = 1
+  val OPENCL_MEMORY = 2
+  val CUDA_MEMORY = 3
+
+}

http://git-wip-us.apache.org/repos/asf/mahout/blob/9a4f9d36/viennacl-omp/scala-2.10/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/DenseColumnMatrix.scala
----------------------------------------------------------------------
diff --git 
a/viennacl-omp/scala-2.10/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/DenseColumnMatrix.scala
 
b/viennacl-omp/scala-2.10/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/DenseColumnMatrix.scala
new file mode 100644
index 0000000..71bdab2
--- /dev/null
+++ 
b/viennacl-omp/scala-2.10/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/DenseColumnMatrix.scala
@@ -0,0 +1,95 @@
+/**
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  * http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+package org.apache.mahout.viennacl.openmp.javacpp
+
+import org.bytedeco.javacpp.DoublePointer
+import org.bytedeco.javacpp.annotation._
+
+/**
+  * ViennaCL dense matrix, column-major. This is an exact duplication of 
[[DenseRowMatrix]], and
+  * is only different in the materialized C++ template name. Unfortunately I 
so far have not figured
+  * out how to handle it with.
+  *
+  * Also, the [[Platform.library]] does not get inherited for some reason, and 
we really want to
+  * collect all class mappings in the same one libjni.so, so we have to repeat 
this `library` defi-
+  * nition in every mapped class in this package. (One .so per package 
convention).
+  */
+@Properties(inherit = Array(classOf[Context]),
+  value = Array(new Platform (
+    include=Array("matrix.hpp"),
+    library="jniViennaCL"
+  )))
+@Name(Array("viennacl::matrix<double,viennacl::column_major>"))
+final class DenseColumnMatrix(initDefault:Boolean = true) extends MatrixBase {
+
+  def this(nrow: Int, ncol: Int) {
+    this(false)
+    allocate(nrow, ncol, new Context())
+  }
+
+  def this(nrow: Int, ncol: Int, ctx: Context) {
+    this(false)
+    allocate(nrow, ncol, ctx)
+  }
+
+  def this(data: DoublePointer, nrow: Int, ncol: Int) {
+    this(false)
+    allocate(data, new Context(Context.MAIN_MEMORY).memoryType, nrow, ncol)
+    // We save it to deallocate it ad deallocation time.
+    ptrs += data
+  }
+
+  def this(data: DoublePointer, nrow: Int, ncol: Int, ctx: Context) {
+    this(false)
+    allocate(data, ctx.memoryType, nrow, ncol)
+    // We save it to deallocate it ad deallocation time.
+    ptrs += data
+  }
+
+  def this(me: MatMatProdExpression) {
+    this(false)
+    allocate(me)
+  }
+
+  def this(me: MatrixTransExpression) {
+    this(false)
+    allocate(me)
+  }
+
+
+  if (initDefault) allocate()
+
+  @native protected def allocate()
+
+  @native protected def allocate(nrow: Int, ncol: Int, @ByVal ctx: Context)
+
+  @native protected def allocate(data: DoublePointer,
+                                 @Cast(Array("viennacl::memory_types"))
+                                 memType: Int,
+                                 nrow: Int,
+                                 ncol: Int
+                                )
+
+  @native protected def allocate(@Const @ByRef me: MatMatProdExpression)
+
+  @native protected def allocate(@Const @ByRef me: MatrixTransExpression)
+
+}
+
+object DenseColumnMatrix {
+  Context.loadLib()
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/mahout/blob/9a4f9d36/viennacl-omp/scala-2.10/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/DenseRowMatrix.scala
----------------------------------------------------------------------
diff --git 
a/viennacl-omp/scala-2.10/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/DenseRowMatrix.scala
 
b/viennacl-omp/scala-2.10/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/DenseRowMatrix.scala
new file mode 100644
index 0000000..7bbd3a0
--- /dev/null
+++ 
b/viennacl-omp/scala-2.10/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/DenseRowMatrix.scala
@@ -0,0 +1,81 @@
+package org.apache.mahout.viennacl.openmp.javacpp
+
+import org.bytedeco.javacpp.DoublePointer
+import org.bytedeco.javacpp.annotation._
+
+/**
+  * ViennaCL dense matrix, row-major.
+  */
+@Properties(inherit = Array(classOf[Context]),
+  value = Array(new Platform(
+    library = "jniViennaCL"
+  )))
+@Name(Array("viennacl::matrix<double,viennacl::row_major>"))
+class DenseRowMatrix(initDefault: Boolean = true) extends MatrixBase {
+
+  def this(nrow: Int, ncol: Int) {
+    this(false)
+    allocate(nrow, ncol, new Context())
+  }
+
+  def this(nrow: Int, ncol: Int, ctx: Context) {
+    this(false)
+    allocate(nrow, ncol, ctx)
+  }
+
+  def this(data: DoublePointer, nrow: Int, ncol: Int) {
+    this(false)
+    allocate(data, new Context(Context.MAIN_MEMORY).memoryType, nrow, ncol)
+    // We save it to deallocate it ad deallocation time.
+    ptrs += data
+  }
+
+  def this(data: DoublePointer, nrow: Int, ncol: Int, ctx: Context) {
+    this(false)
+    allocate(data, ctx.memoryType, nrow, ncol)
+    // We save it to deallocate it ad deallocation time.
+    ptrs += data
+  }
+
+  def this(me: MatMatProdExpression) {
+    this(false)
+    allocate(me)
+  }
+
+  def this(me: MatrixTransExpression) {
+    this(false)
+    allocate(me)
+  }
+
+  // TODO: getting compilation errors here
+  def this(sd: SrMatDnMatProdExpression) {
+    this(false)
+    allocate(sd)
+  }
+
+  if (initDefault) allocate()
+
+  @native protected def allocate()
+
+  @native protected def allocate(nrow: Int, ncol: Int, @ByVal ctx: Context)
+
+  @native protected def allocate(data: DoublePointer,
+                                 @Cast(Array("viennacl::memory_types"))
+                                 memType: Int,
+                                 nrow: Int,
+                                 ncol: Int
+                                )
+
+  @native protected def allocate(@Const @ByRef me: MatMatProdExpression)
+
+  @native protected def allocate(@Const @ByRef me: MatrixTransExpression)
+
+  // TODO: Compilation errors here
+  @native protected def allocate(@Const @ByRef me: SrMatDnMatProdExpression)
+
+}
+
+
+object DenseRowMatrix {
+  Context.loadLib()
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/mahout/blob/9a4f9d36/viennacl-omp/scala-2.10/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/MatMatProdExpression.scala
----------------------------------------------------------------------
diff --git 
a/viennacl-omp/scala-2.10/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/MatMatProdExpression.scala
 
b/viennacl-omp/scala-2.10/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/MatMatProdExpression.scala
new file mode 100644
index 0000000..c15bbd9
--- /dev/null
+++ 
b/viennacl-omp/scala-2.10/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/MatMatProdExpression.scala
@@ -0,0 +1,33 @@
+/**
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  * http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+package org.apache.mahout.viennacl.openmp.javacpp
+
+import org.bytedeco.javacpp.Pointer
+import org.bytedeco.javacpp.annotation.{Name, Namespace, Platform, Properties}
+
+
+@Properties(inherit = Array(classOf[Context]),
+  value = Array(new Platform(
+    library = "jniViennaCL")
+  ))
+@Namespace("viennacl")
+@Name(Array("matrix_expression<const viennacl::matrix_base<double>, " +
+  "const viennacl::matrix_base<double>, " +
+  "viennacl::op_mat_mat_prod>"))
+class MatMatProdExpression extends Pointer {
+
+}

http://git-wip-us.apache.org/repos/asf/mahout/blob/9a4f9d36/viennacl-omp/scala-2.10/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/MatVecProdExpression.scala
----------------------------------------------------------------------
diff --git 
a/viennacl-omp/scala-2.10/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/MatVecProdExpression.scala
 
b/viennacl-omp/scala-2.10/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/MatVecProdExpression.scala
new file mode 100644
index 0000000..4435232
--- /dev/null
+++ 
b/viennacl-omp/scala-2.10/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/MatVecProdExpression.scala
@@ -0,0 +1,33 @@
+/**
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  * http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+package org.apache.mahout.viennacl.openmp.javacpp
+
+import org.bytedeco.javacpp.Pointer
+import org.bytedeco.javacpp.annotation.{Name, Namespace, Platform, Properties}
+
+
+@Properties(inherit = Array(classOf[Context]),
+  value = Array(new Platform(
+    library = "jniViennaCL")
+  ))
+@Namespace("viennacl")
+@Name(Array("vector_expression<const viennacl::matrix_base<double>, " +
+  "const viennacl::vector_base<double>, " +
+  "viennacl::op_prod>"))
+class MatVecProdExpression extends Pointer {
+
+}

Reply via email to