http://git-wip-us.apache.org/repos/asf/mahout/blob/9a4f9d36/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/CompressedMatrix.scala ---------------------------------------------------------------------- diff --git a/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/CompressedMatrix.scala b/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/CompressedMatrix.scala deleted file mode 100644 index 3c5a6eb..0000000 --- a/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/CompressedMatrix.scala +++ /dev/null @@ -1,135 +0,0 @@ -/** - * 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/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/Context.scala ---------------------------------------------------------------------- diff --git a/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/Context.scala b/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/Context.scala deleted file mode 100644 index ae1b782..0000000 --- a/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/Context.scala +++ /dev/null @@ -1,58 +0,0 @@ -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/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/DenseColumnMatrix.scala ---------------------------------------------------------------------- diff --git a/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/DenseColumnMatrix.scala b/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/DenseColumnMatrix.scala deleted file mode 100644 index 71bdab2..0000000 --- a/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/DenseColumnMatrix.scala +++ /dev/null @@ -1,95 +0,0 @@ -/** - * 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/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/DenseRowMatrix.scala ---------------------------------------------------------------------- diff --git a/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/DenseRowMatrix.scala b/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/DenseRowMatrix.scala deleted file mode 100644 index 7bbd3a0..0000000 --- a/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/DenseRowMatrix.scala +++ /dev/null @@ -1,81 +0,0 @@ -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/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/MatMatProdExpression.scala ---------------------------------------------------------------------- diff --git a/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/MatMatProdExpression.scala b/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/MatMatProdExpression.scala deleted file mode 100644 index c15bbd9..0000000 --- a/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/MatMatProdExpression.scala +++ /dev/null @@ -1,33 +0,0 @@ -/** - * 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/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/MatVecProdExpression.scala ---------------------------------------------------------------------- diff --git a/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/MatVecProdExpression.scala b/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/MatVecProdExpression.scala deleted file mode 100644 index 4435232..0000000 --- a/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/MatVecProdExpression.scala +++ /dev/null @@ -1,33 +0,0 @@ -/** - * 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 { - -} http://git-wip-us.apache.org/repos/asf/mahout/blob/9a4f9d36/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/MatrixBase.scala ---------------------------------------------------------------------- diff --git a/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/MatrixBase.scala b/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/MatrixBase.scala deleted file mode 100644 index 00823b6..0000000 --- a/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/MatrixBase.scala +++ /dev/null @@ -1,75 +0,0 @@ -/** - * 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._ - -import scala.collection.mutable.ArrayBuffer - - -@Properties(inherit = Array(classOf[Context]), - value = Array(new Platform( - library = "jniViennaCL" - ))) -@Name(Array("viennacl::matrix_base<double>")) -class MatrixBase extends Pointer { - - protected val ptrs = new ArrayBuffer[Pointer]() - - override def deallocate(deallocate: Boolean): Unit = { - super.deallocate(deallocate) - ptrs.foreach(_.close()) - } - - @Name(Array("operator=")) - @native def :=(@Const @ByRef src: DenseRowMatrix) - - @Name(Array("operator=")) - @native def :=(@Const @ByRef src: DenseColumnMatrix) - - @Name(Array("size1")) - @native - def nrow: Int - - @Name(Array("size2")) - @native - def ncol: Int - - @Name(Array("row_major")) - @native - def isRowMajor: Boolean - - @Name(Array("internal_size1")) - @native - def internalnrow: Int - - @Name(Array("internal_size2")) - @native - def internalncol: Int - - @Name(Array("memory_domain")) - @native - def memoryDomain: Int - - @Name(Array("switch_memory_context")) - @native - def switchMemoryContext(@ByRef ctx: Context) - - - -} http://git-wip-us.apache.org/repos/asf/mahout/blob/9a4f9d36/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/MemHandle.scala ---------------------------------------------------------------------- diff --git a/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/MemHandle.scala b/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/MemHandle.scala deleted file mode 100644 index 938a262..0000000 --- a/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/MemHandle.scala +++ /dev/null @@ -1,34 +0,0 @@ -/** - * 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._ - - -@Properties(inherit = Array(classOf[Context]), - value = Array(new Platform( - library = "jniViennaCL") - )) -@Namespace("viennacl::backend") -@Name(Array("mem_handle")) -class MemHandle extends Pointer { - - allocate() - - @native def allocate() -} http://git-wip-us.apache.org/repos/asf/mahout/blob/9a4f9d36/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/ProdExpression.scala ---------------------------------------------------------------------- diff --git a/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/ProdExpression.scala b/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/ProdExpression.scala deleted file mode 100644 index 315a03c..0000000 --- a/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/ProdExpression.scala +++ /dev/null @@ -1,33 +0,0 @@ -/** - * 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::compressed_matrix<double>, " + - "const viennacl::compressed_matrix<double>, " + - "viennacl::op_prod>")) -class ProdExpression extends Pointer { - -} http://git-wip-us.apache.org/repos/asf/mahout/blob/9a4f9d36/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/SrMatDnMatProdExpression.scala ---------------------------------------------------------------------- diff --git a/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/SrMatDnMatProdExpression.scala b/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/SrMatDnMatProdExpression.scala deleted file mode 100644 index e9c7bac..0000000 --- a/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/SrMatDnMatProdExpression.scala +++ /dev/null @@ -1,33 +0,0 @@ -/** - * 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::compressed_matrix<double>, " + - "const viennacl::matrix_base<double>, " + - "viennacl::op_prod>")) -class SrMatDnMatProdExpression extends Pointer { - -} http://git-wip-us.apache.org/repos/asf/mahout/blob/9a4f9d36/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/VCLVector.scala ---------------------------------------------------------------------- diff --git a/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/VCLVector.scala b/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/VCLVector.scala deleted file mode 100644 index 33947ec..0000000 --- a/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/VCLVector.scala +++ /dev/null @@ -1,124 +0,0 @@ -package org.apache.mahout.viennacl.openmp.javacpp - -import org.bytedeco.javacpp._ -import org.bytedeco.javacpp.annotation._ - - -@Properties(inherit = Array(classOf[Context]), - value = Array(new Platform( - library="jniViennaCL" - ))) -@Name(Array("viennacl::vector<double>")) -final class VCLVector(defaultCtr: Boolean = true) extends VectorBase { - - if (defaultCtr) allocate() - - def this(){ - this(false) - allocate() - } - - def this(size: Int) { - this(false) - allocate(size, new Context(Context.MAIN_MEMORY)) - } - - def this(size: Int, ctx: Context ) { - this(false) - allocate(size, ctx) - } - - def this(@Const @ByRef ve: VecMultExpression) { - this(false) - allocate(ve) - } - - def this(@Const @ByRef vmp: MatVecProdExpression) { - this(false) - allocate(vmp) - } - -// conflicting with the next signature as MemHandle is a pointer and so is a DoublePointer.. -// leave out for now. -// -// def this(h: MemHandle , vec_size: Int, vec_start: Int = 0, vec_stride: Int = 1) { -// this(false) -// allocate(h, vec_size, vec_start, vec_stride) -// } - - def this(ptr_to_mem: DoublePointer, - @Cast(Array("viennacl::memory_types"))mem_type : Int, - vec_size: Int) { - - this(false) - allocate(ptr_to_mem, mem_type, vec_size, 0, 1) - ptrs += ptr_to_mem - } - - def this(ptr_to_mem: DoublePointer, - @Cast(Array("viennacl::memory_types"))mem_type : Int, - vec_size: Int, - start: Int, - stride: Int) { - - this(false) - allocate(ptr_to_mem, mem_type, vec_size, start, stride) - ptrs += ptr_to_mem - } - - def this(@Const @ByRef vc: VCLVector) { - this(false) - allocate(vc) - } - def this(@Const @ByRef vb: VectorBase) { - this(false) - allocate(vb) - } - - @native protected def allocate() - - @native protected def allocate(size: Int) - - @native protected def allocate(size: Int, @ByVal ctx: Context) - - @native protected def allocate(@Const @ByRef ve: VecMultExpression) - - @native protected def allocate(@Const @ByRef ve: MatVecProdExpression) - - @native protected def allocate(@Const @ByRef vb: VCLVector) - - @native protected def allocate(@Const @ByRef vb: VectorBase) - - -// @native protected def allocate(h: MemHandle , vec_size: Int, -// vec_start: Int, -// vec_stride: Int) - - @native protected def allocate(ptr_to_mem: DoublePointer, - @Cast(Array("viennacl::memory_types"))mem_type : Int, - vec_size: Int, - start: Int, - stride: Int) - - @Name(Array("viennacl::vector<double>::self_type")) - def selfType:VectorBase = this.asInstanceOf[VectorBase] - - - @native def switch_memory_context(@ByVal context: Context): Unit - -// Swaps the handles of two vectors by swapping the OpenCL handles only, no data copy. -// @native def fast_swap(@ByVal other: VCLVector): VectorBase - -// add this operator in for tests many more can be added -// @Name(Array("operator*")) -// @native @ByPtr def *(i: Int): VectorMultExpression - - - -} - -object VCLVector { - Context.loadLib() -} - - http://git-wip-us.apache.org/repos/asf/mahout/blob/9a4f9d36/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/VecMultExpression.scala ---------------------------------------------------------------------- diff --git a/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/VecMultExpression.scala b/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/VecMultExpression.scala deleted file mode 100644 index 7562de5..0000000 --- a/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/VecMultExpression.scala +++ /dev/null @@ -1,32 +0,0 @@ -/** - * 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::vector_base<double>," + - "const double, viennacl::op_mult >")) -class VecMultExpression extends Pointer { - -} http://git-wip-us.apache.org/repos/asf/mahout/blob/9a4f9d36/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/VectorBase.scala ---------------------------------------------------------------------- diff --git a/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/VectorBase.scala b/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/VectorBase.scala deleted file mode 100644 index 8efd377..0000000 --- a/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/javacpp/VectorBase.scala +++ /dev/null @@ -1,55 +0,0 @@ -/** - * 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._ -import org.bytedeco.javacpp.annotation._ - -import scala.collection.mutable.ArrayBuffer - - -@Properties(inherit = Array(classOf[Context]), - value = Array(new Platform( - library="jniViennaCL" - ))) -@Name(Array("viennacl::vector_base<double>")) -class VectorBase extends Pointer { - - protected val ptrs = new ArrayBuffer[Pointer]() - - override def deallocate(deallocate: Boolean): Unit = { - super.deallocate(deallocate) - ptrs.foreach(_.close()) - } - - // size of the vec elements - @native @Const def size(): Int - - // size of the vec elements + padding - @native @Const def internal_size(): Int - - // handle to the vec element buffer - @native @Const @ByRef def handle: MemHandle - -// // add this operator in for tests many more can be added -// @Name(Array("operator* ")) -// @native def *(i: Int): VectorMultExpression - - -} - - http://git-wip-us.apache.org/repos/asf/mahout/blob/9a4f9d36/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/package.scala ---------------------------------------------------------------------- diff --git a/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/package.scala b/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/package.scala deleted file mode 100644 index 89af010..0000000 --- a/viennacl-omp/src/main/scala/org/apache/mahout/viennacl/openmp/package.scala +++ /dev/null @@ -1,434 +0,0 @@ -package org.apache.mahout.viennacl - -import java.nio._ - -import org.apache.mahout.math._ -import scalabindings._ -import RLikeOps._ - -import scala.collection.JavaConversions._ -import org.apache.mahout.viennacl.openmp.javacpp.DenseRowMatrix -import org.apache.mahout.viennacl.openmp.javacpp._ -import org.bytedeco.javacpp.{DoublePointer, IntPointer} - - - -package object openmp { - - type IntConvertor = Int => Int - - def toVclDenseRM(src: Matrix, vclCtx: Context = new Context(Context.MAIN_MEMORY)): DenseRowMatrix = { - vclCtx.memoryType match { - case Context.MAIN_MEMORY â - val vclMx = new DenseRowMatrix( - data = repackRowMajor(src, src.nrow, src.ncol), - nrow = src.nrow, - ncol = src.ncol, - ctx = vclCtx - ) - vclMx - case _ â - val vclMx = new DenseRowMatrix(src.nrow, src.ncol, vclCtx) - fastCopy(src, vclMx) - vclMx - } - } - - - /** - * Convert a dense row VCL matrix to mahout matrix. - * - * @param src - * @return - */ - def fromVclDenseRM(src: DenseRowMatrix): Matrix = { - val nrowIntern = src.internalnrow - val ncolIntern = src.internalncol - - // A technical debt here: - - // We do double copying here, this is obviously suboptimal, but hopefully we'll compensate - // this with gains from running superlinear algorithms in VCL. - val dbuff = new DoublePointer(nrowIntern * ncolIntern) - Functions.fastCopy(src, dbuff) - var srcOffset = 0 - val ncol = src.ncol - val rows = for (irow â 0 until src.nrow) yield { - - val rowvec = new Array[Double](ncol) - dbuff.position(srcOffset).get(rowvec) - - srcOffset += ncolIntern - rowvec - } - - // Always! use shallow = true to avoid yet another copying. - new DenseMatrix(rows.toArray, true) - } - - def fastCopy(mxSrc: Matrix, dst: DenseRowMatrix) = { - val nrowIntern = dst.internalnrow - val ncolIntern = dst.internalncol - - assert(nrowIntern >= mxSrc.nrow && ncolIntern >= mxSrc.ncol) - - val rmajorData = repackRowMajor(mxSrc, nrowIntern, ncolIntern) - Functions.fastCopy(rmajorData, new DoublePointer(rmajorData).position(rmajorData.limit()), dst) - - rmajorData.close() - } - - private def repackRowMajor(mx: Matrix, nrowIntern: Int, ncolIntern: Int): DoublePointer = { - - assert(mx.nrow <= nrowIntern && mx.ncol <= ncolIntern) - - val dbuff = new DoublePointer(nrowIntern * ncolIntern) - - mx match { - case dm: DenseMatrix â - val valuesF = classOf[DenseMatrix].getDeclaredField("values") - valuesF.setAccessible(true) - val values = valuesF.get(dm).asInstanceOf[Array[Array[Double]]] - var dstOffset = 0 - for (irow â 0 until mx.nrow) { - val rowarr = values(irow) - dbuff.position(dstOffset).put(rowarr, 0, rowarr.size min ncolIntern) - dstOffset += ncolIntern - } - dbuff.position(0) - case _ â - // Naive copying. Could be sped up for a DenseMatrix. TODO. - for (row â mx) { - val dstOffset = row.index * ncolIntern - for (el â row.nonZeroes) dbuff.put(dstOffset + el.index, el) - } - } - - dbuff - } - - /** - * - * @param mxSrc - * @param ctx - * @return - */ - def toVclCmpMatrixAlt(mxSrc: Matrix, ctx: Context): CompressedMatrix = { - - // use repackCSR(matrix, ctx) to convert all ints to unsigned ints if Context is Ocl - // val (jumpers, colIdcs, els) = repackCSRAlt(mxSrc) - val (jumpers, colIdcs, els) = repackCSR(mxSrc, ctx) - - val compMx = new CompressedMatrix(mxSrc.nrow, mxSrc.ncol, els.capacity().toInt, ctx) - compMx.set(jumpers, colIdcs, els, mxSrc.nrow, mxSrc.ncol, els.capacity().toInt) - compMx - } - - private def repackCSRAlt(mx: Matrix): (IntPointer, IntPointer, DoublePointer) = { - val nzCnt = mx.map(_.getNumNonZeroElements).sum - val jumpers = new IntPointer(mx.nrow + 1L) - val colIdcs = new IntPointer(nzCnt + 0L) - val els = new DoublePointer(nzCnt) - var posIdx = 0 - - var sortCols = false - - // Row-wise loop. Rows may not necessarily come in order. But we have to have them in-order. - for (irow â 0 until mx.nrow) { - - val row = mx(irow, ::) - jumpers.put(irow.toLong, posIdx) - - // Remember row start index in case we need to restart conversion of this row if out-of-order - // column index is detected - val posIdxStart = posIdx - - // Retry loop: normally we are done in one pass thru it unless we need to re-run it because - // out-of-order column was detected. - var done = false - while (!done) { - - // Is the sorting mode on? - if (sortCols) { - - // Sorting of column indices is on. So do it. - row.nonZeroes() - // Need to convert to a strict collection out of iterator - .map(el â el.index â el.get) - // Sorting requires Sequence api - .toSeq - // Sort by column index - .sortBy(_._1) - // Flush to the CSR buffers. - .foreach { case (index, v) â - colIdcs.put(posIdx.toLong, index) - els.put(posIdx.toLong, v) - posIdx += 1 - } - - // Never need to retry if we are already in the sorting mode. - done = true - - } else { - - // Try to run unsorted conversion here, switch lazily to sorted if out-of-order column is - // detected. - var lastCol = 0 - val nzIter = row.nonZeroes().iterator() - var abortNonSorted = false - - while (nzIter.hasNext && !abortNonSorted) { - - val el = nzIter.next() - val index = el.index - - if (index < lastCol) { - - // Out of order detected: abort inner loop, reset posIdx and retry with sorting on. - abortNonSorted = true - sortCols = true - posIdx = posIdxStart - - } else { - - // Still in-order: save element and column, continue. - els.put(posIdx, el) - colIdcs.put(posIdx.toLong, index) - posIdx += 1 - - // Remember last column seen. - lastCol = index - } - } // inner non-sorted - - // Do we need to re-run this row with sorting? - done = !abortNonSorted - - } // if (sortCols) - - } // while (!done) retry loop - - } // row-wise loop - - // Make sure Mahout matrix did not cheat on non-zero estimate. - assert(posIdx == nzCnt) - - jumpers.put(mx.nrow.toLong, nzCnt) - - (jumpers, colIdcs, els) - } - - // same as repackCSRAlt except converts to jumpers, colIdcs to unsigned ints before setting - private def repackCSR(mx: Matrix, context: Context): (IntPointer, IntPointer, DoublePointer) = { - val nzCnt = mx.map(_.getNumNonZeroElements).sum - val jumpers = new IntPointer(mx.nrow + 1L) - val colIdcs = new IntPointer(nzCnt + 0L) - val els = new DoublePointer(nzCnt) - var posIdx = 0 - - var sortCols = false - - def convertInt: IntConvertor = if(context.memoryType == Context.OPENCL_MEMORY) { - int2cl_uint - } else { - i: Int => i: Int - } - - // Row-wise loop. Rows may not necessarily come in order. But we have to have them in-order. - for (irow â 0 until mx.nrow) { - - val row = mx(irow, ::) - jumpers.put(irow.toLong, posIdx) - - // Remember row start index in case we need to restart conversion of this row if out-of-order - // column index is detected - val posIdxStart = posIdx - - // Retry loop: normally we are done in one pass thru it unless we need to re-run it because - // out-of-order column was detected. - var done = false - while (!done) { - - // Is the sorting mode on? - if (sortCols) { - - // Sorting of column indices is on. So do it. - row.nonZeroes() - // Need to convert to a strict collection out of iterator - .map(el â el.index â el.get) - // Sorting requires Sequence api - .toIndexedSeq - // Sort by column index - .sortBy(_._1) - // Flush to the CSR buffers. - .foreach { case (index, v) â - // convert to cl_uint if context is OCL - colIdcs.put(posIdx.toLong, convertInt(index)) - els.put(posIdx.toLong, v) - posIdx += 1 - } - - // Never need to retry if we are already in the sorting mode. - done = true - - } else { - - // Try to run unsorted conversion here, switch lazily to sorted if out-of-order column is - // detected. - var lastCol = 0 - val nzIter = row.nonZeroes().iterator() - var abortNonSorted = false - - while (nzIter.hasNext && !abortNonSorted) { - - val el = nzIter.next() - val index = el.index - - if (index < lastCol) { - - // Out of order detected: abort inner loop, reset posIdx and retry with sorting on. - abortNonSorted = true - sortCols = true - posIdx = posIdxStart - - } else { - - // Still in-order: save element and column, continue. - els.put(posIdx, el) - // convert to cl_uint if context is OCL - colIdcs.put(posIdx.toLong, convertInt(index)) - posIdx += 1 - - // Remember last column seen. - lastCol = index - } - } // inner non-sorted - - // Do we need to re-run this row with sorting? - done = !abortNonSorted - - } // if (sortCols) - - } // while (!done) retry loop - - } // row-wise loop - - // Make sure Mahout matrix did not cheat on non-zero estimate. - assert(posIdx == nzCnt) - - // convert to cl_uint if context is OCL - jumpers.put(mx.nrow.toLong, convertInt(nzCnt)) - - (jumpers, colIdcs, els) - } - - - - def fromVclCompressedMatrix(src: CompressedMatrix): Matrix = { - val m = src.size1 - val n = src.size2 - val NNz = src.nnz - - val row_ptr_handle = src.handle1 - val col_idx_handle = src.handle2 - val element_handle = src.handle - - val row_ptr = new IntPointer((m + 1).toLong) - val col_idx = new IntPointer(NNz.toLong) - val values = new DoublePointer(NNz.toLong) - - Functions.memoryReadInt(row_ptr_handle, 0, (m + 1) * 4, row_ptr, false) - Functions.memoryReadInt(col_idx_handle, 0, NNz * 4, col_idx, false) - Functions.memoryReadDouble(element_handle, 0, NNz * 8, values, false) - - val rowPtr = row_ptr.asBuffer() - val colIdx = col_idx.asBuffer() - val vals = values.asBuffer() - - rowPtr.rewind() - colIdx.rewind() - vals.rewind() - - - val srMx = new SparseRowMatrix(m, n) - - // read the values back into the matrix - var j = 0 - // row wise, copy any non-zero elements from row(i-1,::) - for (i <- 1 to m) { - // for each nonzero element, set column col(idx(j) value to vals(j) - while (j < rowPtr.get(i)) { - srMx(i - 1, colIdx.get(j)) = vals.get(j) - j += 1 - } - } - srMx - } - - def toVclVec(vec: Vector, ctx: Context): VCLVector = { - - vec match { - case vec: DenseVector => { - val valuesF = classOf[DenseVector].getDeclaredField("values") - valuesF.setAccessible(true) - val values = valuesF.get(vec).asInstanceOf[Array[Double]] - val el_ptr = new DoublePointer(values.length.toLong) - el_ptr.put(values, 0, values.length) - - new VCLVector(el_ptr, ctx.memoryType, values.length) - } - - case vec: SequentialAccessSparseVector => { - val it = vec.iterateNonZero - val size = vec.size() - val el_ptr = new DoublePointer(size.toLong) - while (it.hasNext) { - val el: Vector.Element = it.next - el_ptr.put(el.index, el.get()) - } - new VCLVector(el_ptr, ctx.memoryType, size) - } - - case vec: RandomAccessSparseVector => { - val it = vec.iterateNonZero - val size = vec.size() - val el_ptr = new DoublePointer(size.toLong) - while (it.hasNext) { - val el: Vector.Element = it.next - el_ptr.put(el.index, el.get()) - } - new VCLVector(el_ptr, ctx.memoryType, size) - } - case _ => throw new IllegalArgumentException("Vector sub-type not supported.") - } - - } - - def fromVClVec(vclVec: VCLVector): Vector = { - val size = vclVec.size - val element_handle = vclVec.handle - val ele_ptr = new DoublePointer(size) - Functions.memoryReadDouble(element_handle, 0, size * 8, ele_ptr, false) - - // for now just assume its dense since we only have one flavor of - // VCLVector - val mVec = new DenseVector(size) - for (i <- 0 until size) { - mVec.setQuick(i, ele_ptr.get(i + 0L)) - } - - mVec - } - - - // TODO: Fix this? cl_uint must be an unsigned int per each machine's representation of such. - // this is currently not working anyways. - // cl_uint is needed for OpenCl sparse Buffers - // per https://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/scalarDataTypes.html - // it is simply an unsigned int, so strip the sign. - def int2cl_uint(i: Int): Int = { - ((i >>> 1) << 1) + (i & 1) - } - - -} http://git-wip-us.apache.org/repos/asf/mahout/blob/9a4f9d36/viennacl-omp/src/test/scala/org/apache/mahout/viennacl/omp/ViennaCLSuiteOMP.scala ---------------------------------------------------------------------- diff --git a/viennacl-omp/src/test/scala/org/apache/mahout/viennacl/omp/ViennaCLSuiteOMP.scala b/viennacl-omp/src/test/scala/org/apache/mahout/viennacl/omp/ViennaCLSuiteOMP.scala deleted file mode 100644 index af29e3c..0000000 --- a/viennacl-omp/src/test/scala/org/apache/mahout/viennacl/omp/ViennaCLSuiteOMP.scala +++ /dev/null @@ -1,249 +0,0 @@ -package org.apache.mahout.viennacl.openmp - -import org.apache.mahout.math._ -import scalabindings._ -import RLikeOps._ -import org.bytedeco.javacpp.DoublePointer -import org.scalatest.{FunSuite, Matchers} -import org.apache.mahout.viennacl.openmp.javacpp._ -import org.apache.mahout.viennacl.openmp.javacpp.Functions._ -import org.apache.mahout.viennacl.openmp.javacpp.LinalgFunctions._ - -import scala.util.Random - -class ViennaCLSuiteOMP extends FunSuite with Matchers { - - test("row-major viennacl::matrix") { - - // Just to make sure the javacpp library is loaded: - Context.loadLib() - - val m = 20 - val n = 30 - val data = new DoublePointer(m * n) - val buff = data.asBuffer() - // Fill with some noise - while (buff.remaining() > 0) buff.put(Random.nextDouble()) - - // Create row-major matrix with OpenCL - val hostClCtx = new Context(Context.MAIN_MEMORY) - val cpuMx = new DenseRowMatrix(data = data, nrow = m, ncol = n, hostClCtx) - // And free. - cpuMx.close() - - } - - - test("mmul microbenchmark") { - val memCtx = new Context(Context.MAIN_MEMORY) - - val m = 3000 - val n = 3000 - val s = 1000 - - val r = new Random(1234) - - // Dense row-wise - val mxA = new DenseMatrix(m, s) - val mxB = new DenseMatrix(s, n) - - // add some data - mxA := { (_, _, _) => r.nextDouble() } - mxB := { (_, _, _) => r.nextDouble() } - - var ms = System.currentTimeMillis() - mxA %*% mxB - ms = System.currentTimeMillis() - ms - info(s"Mahout multiplication time: $ms ms.") - - import LinalgFunctions._ - - // openMP/cpu time, including copying: - { - ms = System.currentTimeMillis() - val ompA = toVclDenseRM(mxA, memCtx) - val ompB = toVclDenseRM(mxB, memCtx) - val ompC = new DenseRowMatrix(prod(ompA, ompB)) - val mxC = fromVclDenseRM(ompC) - ms = System.currentTimeMillis() - ms - info(s"ViennaCL/cpu/OpenMP multiplication time: $ms ms.") - - ompA.close() - ompB.close() - ompC.close() - } - - } - - test("trans") { - - val ompCtx = new Context(Context.MAIN_MEMORY) - - - val m = 20 - val n = 30 - - val r = new Random(1234) - - // Dense row-wise - val mxA = new DenseMatrix(m, n) - - // add some data - mxA := { (_, _, _) => r.nextDouble() } - - - // Test transposition in OpenMP - { - val ompA = toVclDenseRM(src = mxA, ompCtx) - val ompAt = new DenseRowMatrix(trans(ompA)) - - val mxAt = fromVclDenseRM(ompAt) - ompA.close() - ompAt.close() - - (mxAt - mxA.t).norm / m / n should be < 1e-16 - } - - } - - test("sparse mmul microbenchmark") { - - val ompCtx = new Context(Context.MAIN_MEMORY) - - val m = 3000 - val n = 3000 - val s = 1000 - - val r = new Random(1234) - - // sparse row-wise - val mxA = new SparseRowMatrix(m, s, false) - val mxB = new SparseRowMatrix(s, n, true) - - // add some sparse data with 20% density - mxA := { (_, _, v) => if (r.nextDouble() < .20) r.nextDouble() else v } - mxB := { (_, _, v) => if (r.nextDouble() < .20) r.nextDouble() else v } - - var ms = System.currentTimeMillis() - val mxC = mxA %*% mxB - ms = System.currentTimeMillis() - ms - info(s"Mahout Sparse multiplication time: $ms ms.") - - - // Test multiplication in OpenMP - { - ms = System.currentTimeMillis() - // val ompA = toVclCompressedMatrix(src = mxA, ompCtx) - // val ompB = toVclCompressedMatrix(src = mxB, ompCtx) - - val ompA = toVclCmpMatrixAlt(mxA, ompCtx) - val ompB = toVclCmpMatrixAlt(mxB, ompCtx) - - val ompC = new CompressedMatrix(prod(ompA, ompB)) - - ms = System.currentTimeMillis() - ms - info(s"ViennaCL/cpu/OpenMP Sparse multiplication time: $ms ms.") - - val ompMxC = fromVclCompressedMatrix(ompC) - (mxC - ompMxC).norm / mxC.nrow / mxC.ncol should be < 1e-10 - - ompA.close() - ompB.close() - ompC.close() - - } - - } - - test("VCL Dense Matrix %*% Dense vector - no OpenCl") { - - val ompCtx = new Context(Context.MAIN_MEMORY) - - - val m = 3000 - val s = 1000 - - val r = new Random(1234) - - // Dense row-wise - val mxA = new DenseMatrix(m, s) - val dvecB = new DenseVector(s) - - // add some random data - mxA := { (_,_,_) => r.nextDouble() } - dvecB := { (_,_) => r.nextDouble() } - - //test in matrix %*% vec - var ms = System.currentTimeMillis() - val mDvecC = mxA %*% dvecB - ms = System.currentTimeMillis() - ms - info(s"Mahout dense matrix %*% dense vector multiplication time: $ms ms.") - - - //Test multiplication in OpenMP - { - - ms = System.currentTimeMillis() - val ompMxA = toVclDenseRM(mxA, ompCtx) - val ompVecB = toVclVec(dvecB, ompCtx) - - val ompVecC = new VCLVector(prod(ompMxA, ompVecB)) - val ompDvecC = fromVClVec(ompVecC) - - ms = System.currentTimeMillis() - ms - info(s"ViennaCL/cpu/OpenMP dense matrix %*% dense vector multiplication time: $ms ms.") - (ompDvecC.toColMatrix - mDvecC.toColMatrix).norm / s should be < 1e-10 - - ompMxA.close() - ompVecB.close() - ompVecC.close() - } - - } - - - test("Sparse %*% Dense mmul microbenchmark") { - val memCtx = new Context(Context.MAIN_MEMORY) - - val m = 3000 - val n = 3000 - val s = 1000 - - val r = new Random(1234) - - // Dense row-wise - val mxSr = new SparseMatrix(m, s) - val mxDn = new DenseMatrix(s, n) - - // add some data - mxSr := { (_, _, v) => if (r.nextDouble() < .20) r.nextDouble() else v } - mxDn := { (_, _, _) => r.nextDouble() } - - var ms = System.currentTimeMillis() - mxSr %*% mxDn - ms = System.currentTimeMillis() - ms - info(s"Mahout multiplication time: $ms ms.") - - import LinalgFunctions._ - - - // openMP/cpu time, including copying: - { - ms = System.currentTimeMillis() - val ompA = toVclCmpMatrixAlt(mxSr, memCtx) - val ompB = toVclDenseRM(mxDn, memCtx) - val ompC = new DenseRowMatrix(prod(ompA, ompB)) - val mxC = fromVclDenseRM(ompC) - ms = System.currentTimeMillis() - ms - info(s"ViennaCL/cpu/OpenMP multiplication time: $ms ms.") - - ompA.close() - ompB.close() - ompC.close() - } - - } - - - -} http://git-wip-us.apache.org/repos/asf/mahout/blob/9a4f9d36/viennacl/linux-haswell.properties ---------------------------------------------------------------------- diff --git a/viennacl/linux-haswell.properties b/viennacl/linux-haswell.properties deleted file mode 100644 index 3ee4494..0000000 --- a/viennacl/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/linux-x86_64-viennacl.properties ---------------------------------------------------------------------- diff --git a/viennacl/linux-x86_64-viennacl.properties b/viennacl/linux-x86_64-viennacl.properties deleted file mode 100644 index e5de1fa..0000000 --- a/viennacl/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/pom.xml ---------------------------------------------------------------------- diff --git a/viennacl/pom.xml b/viennacl/pom.xml index d099365..8f7aaa5 100644 --- a/viennacl/pom.xml +++ b/viennacl/pom.xml @@ -27,231 +27,14 @@ <relativePath>../pom.xml</relativePath> </parent> - <artifactId>mahout-native-viennacl</artifactId> <name>Mahout Native VienniaCL OpenCL Bindings</name> <description>Native Structures and interfaces to be used from Mahout math-scala. </description> - <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 --> - <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.opencl.javacpp.CompressedMatrix</argument> - <argument>org.apache.mahout.viennacl.opencl.javacpp.Context</argument> - <argument>org.apache.mahout.viennacl.opencl.javacpp.MatrixBase</argument> - <argument>org.apache.mahout.viennacl.opencl.javacpp.DenseRowMatrix</argument> - <argument>org.apache.mahout.viennacl.opencl.javacpp.DenseColumnMatrix</argument> - <argument>org.apache.mahout.viennacl.opencl.javacpp.MatMatProdExpression</argument> - <argument>org.apache.mahout.viennacl.opencl.javacpp.ProdExpression</argument> - <argument>org.apache.mahout.viennacl.opencl.javacpp.SrMatDnMatProdExpression</argument> - <argument>org.apache.mahout.viennacl.opencl.javacpp.MatrixTransExpression</argument> - <argument>org.apache.mahout.viennacl.opencl.javacpp.LinalgFunctions</argument> - <argument>org.apache.mahout.viennacl.opencl.javacpp.Functions</argument> - <argument>org.apache.mahout.viennacl.opencl.javacpp.VectorBase</argument> - <argument>org.apache.mahout.viennacl.opencl.javacpp.VCLVector</argument> - <argument>org.apache.mahout.viennacl.opencl.javacpp.VecMultExpression</argument> - <argument>org.apache.mahout.viennacl.opencl.javacpp.MemHandle</argument> - <argument>org.apache.mahout.viennacl.opencl.GPUMMul</argument> - <argument>org.apache.mahout.viennacl.opencl.GPUMMul$</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_${scala.compat.version}-${project.version}.jar" tofile="../mahout-native-viennacl_${scala.compat.version}-${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_*.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> - - <dependency> - <groupId>org.bytedeco</groupId> - <artifactId>javacpp</artifactId> - <version>1.2.4</version> - </dependency> - - </dependencies> - - <profiles> <profile> <id>mahout-release</id> @@ -310,5 +93,18 @@ <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/scala-2.10/linux-haswell.properties ---------------------------------------------------------------------- diff --git a/viennacl/scala-2.10/linux-haswell.properties b/viennacl/scala-2.10/linux-haswell.properties new file mode 100644 index 0000000..3ee4494 --- /dev/null +++ b/viennacl/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/scala-2.10/linux-x86_64-viennacl.properties ---------------------------------------------------------------------- diff --git a/viennacl/scala-2.10/linux-x86_64-viennacl.properties b/viennacl/scala-2.10/linux-x86_64-viennacl.properties new file mode 100644 index 0000000..e5de1fa --- /dev/null +++ b/viennacl/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/scala-2.10/pom.xml ---------------------------------------------------------------------- diff --git a/viennacl/scala-2.10/pom.xml b/viennacl/scala-2.10/pom.xml index 61a9ffb..d886955 100644 --- a/viennacl/scala-2.10/pom.xml +++ b/viennacl/scala-2.10/pom.xml @@ -18,51 +18,293 @@ --> <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</artifactId> - <version>0.13.2-SNAPSHOT</version> - <relativePath>../pom.xml</relativePath> - </parent> + <modelVersion>4.0.0</modelVersion> - <artifactId>mahout-native-viennacl_2.10</artifactId> - <name>Mahout Native VienniaCL OpenCL Bindings for Scala 2.10 bindings</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_2.10</artifactId> + + <name>Mahout Native VienniaCL OpenCL Scala 2.10 Bindings</name> + <description>Native Structures and interfaces to be used from Mahout math-scala. + </description> <properties> <scala.compat.version>2.10</scala.compat.version> <scala.version>2.10.4</scala.version> </properties> + <packaging>jar</packaging> - <packaging>jar</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> - <build> - <sourceDirectory>../src/</sourceDirectory> + <plugin> + <artifactId>maven-javadoc-plugin</artifactId> + </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-source-plugin</artifactId> + </plugin> - </plugins> - </build> + <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 --> + <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.opencl.javacpp.CompressedMatrix</argument> + <argument>org.apache.mahout.viennacl.opencl.javacpp.Context</argument> + <argument>org.apache.mahout.viennacl.opencl.javacpp.MatrixBase</argument> + <argument>org.apache.mahout.viennacl.opencl.javacpp.DenseRowMatrix</argument> + <argument>org.apache.mahout.viennacl.opencl.javacpp.DenseColumnMatrix</argument> + <argument>org.apache.mahout.viennacl.opencl.javacpp.MatMatProdExpression</argument> + <argument>org.apache.mahout.viennacl.opencl.javacpp.ProdExpression</argument> + <argument>org.apache.mahout.viennacl.opencl.javacpp.SrMatDnMatProdExpression</argument> + <argument>org.apache.mahout.viennacl.opencl.javacpp.MatrixTransExpression</argument> + <argument>org.apache.mahout.viennacl.opencl.javacpp.LinalgFunctions</argument> + <argument>org.apache.mahout.viennacl.opencl.javacpp.Functions</argument> + <argument>org.apache.mahout.viennacl.opencl.javacpp.VectorBase</argument> + <argument>org.apache.mahout.viennacl.opencl.javacpp.VCLVector</argument> + <argument>org.apache.mahout.viennacl.opencl.javacpp.VecMultExpression</argument> + <argument>org.apache.mahout.viennacl.opencl.javacpp.MemHandle</argument> + <argument>org.apache.mahout.viennacl.opencl.GPUMMul</argument> + <argument>org.apache.mahout.viennacl.opencl.GPUMMul$</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_2.10-${project.version}.jar" tofile="../../mahout-native-viennacl_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_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> + + <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>-Xmx4g</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>-Xmx4g</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/scala-2.10/src/main/java/org/apache/mahout/viennacl/opencl/javacpp/Functions.java ---------------------------------------------------------------------- diff --git a/viennacl/scala-2.10/src/main/java/org/apache/mahout/viennacl/opencl/javacpp/Functions.java b/viennacl/scala-2.10/src/main/java/org/apache/mahout/viennacl/opencl/javacpp/Functions.java new file mode 100644 index 0000000..1c14f97 --- /dev/null +++ b/viennacl/scala-2.10/src/main/java/org/apache/mahout/viennacl/opencl/javacpp/Functions.java @@ -0,0 +1,104 @@ +/** + * 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.opencl.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(); + } + +}