(nojira) add native-viennaCL module to codebase. closes apache/mahout#241
Project: http://git-wip-us.apache.org/repos/asf/mahout/repo Commit: http://git-wip-us.apache.org/repos/asf/mahout/commit/f7c1f802 Tree: http://git-wip-us.apache.org/repos/asf/mahout/tree/f7c1f802 Diff: http://git-wip-us.apache.org/repos/asf/mahout/diff/f7c1f802 Branch: refs/heads/master Commit: f7c1f8026296bae1eab9768564a871ea1dd6583b Parents: 1fca074 Author: Andrew Palumbo <[email protected]> Authored: Wed Jun 8 17:37:01 2016 -0400 Committer: Andrew Palumbo <[email protected]> Committed: Wed Jun 8 17:39:19 2016 -0400 ---------------------------------------------------------------------- LICENSE.txt | 29 + math-scala/pom.xml | 5 + .../scalabindings/viennacl/ViennaCLTests.scala | 40 + native-viennaCL/pom.xml | 249 ++ native-viennaCL/src/main/cpp/HelloNative.h | 10 + .../src/main/cpp/libviennacl/CMakeLists.txt | 40 + .../main/cpp/libviennacl/include/viennacl.hpp | 617 +++ .../src/main/cpp/libviennacl/src/backend.cpp | 46 + .../src/main/cpp/libviennacl/src/backend.cu | 46 + .../src/main/cpp/libviennacl/src/blas1.cpp | 420 ++ .../src/main/cpp/libviennacl/src/blas1.cu | 420 ++ .../src/main/cpp/libviennacl/src/blas1_cuda.cu | 264 ++ .../src/main/cpp/libviennacl/src/blas1_host.cpp | 293 ++ .../src/main/cpp/libviennacl/src/blas1_host.cu | 293 ++ .../main/cpp/libviennacl/src/blas1_opencl.cpp | 297 ++ .../main/cpp/libviennacl/src/blas1_opencl.cu | 297 ++ .../src/main/cpp/libviennacl/src/blas2.cpp | 231 + .../src/main/cpp/libviennacl/src/blas2.cu | 231 + .../src/main/cpp/libviennacl/src/blas2_cuda.cu | 204 + .../src/main/cpp/libviennacl/src/blas2_host.cpp | 219 + .../src/main/cpp/libviennacl/src/blas2_host.cu | 219 + .../main/cpp/libviennacl/src/blas2_opencl.cpp | 219 + .../main/cpp/libviennacl/src/blas2_opencl.cu | 219 + .../src/main/cpp/libviennacl/src/blas3.cpp | 272 ++ .../src/main/cpp/libviennacl/src/blas3.cu | 272 ++ .../src/main/cpp/libviennacl/src/blas3.hpp | 60 + .../src/main/cpp/libviennacl/src/blas3_cuda.cu | 133 + .../src/main/cpp/libviennacl/src/blas3_host.cpp | 131 + .../src/main/cpp/libviennacl/src/blas3_host.cu | 131 + .../main/cpp/libviennacl/src/blas3_opencl.cpp | 136 + .../main/cpp/libviennacl/src/blas3_opencl.cu | 136 + .../main/cpp/libviennacl/src/init_matrix.hpp | 101 + .../main/cpp/libviennacl/src/init_vector.hpp | 101 + .../cpp/libviennacl/src/viennacl_private.hpp | 141 + .../src/main/cpp/viennacl/backend/cpu_ram.hpp | 171 + .../src/main/cpp/viennacl/backend/cuda.hpp | 206 + .../main/cpp/viennacl/backend/mem_handle.hpp | 250 ++ .../src/main/cpp/viennacl/backend/memory.hpp | 628 +++ .../src/main/cpp/viennacl/backend/opencl.hpp | 151 + .../src/main/cpp/viennacl/backend/util.hpp | 268 ++ .../src/main/cpp/viennacl/circulant_matrix.hpp | 359 ++ .../viennacl/compressed_compressed_matrix.hpp | 619 +++ .../src/main/cpp/viennacl/compressed_matrix.hpp | 1178 ++++++ .../src/main/cpp/viennacl/context.hpp | 88 + .../src/main/cpp/viennacl/coordinate_matrix.hpp | 506 +++ .../src/main/cpp/viennacl/detail/matrix_def.hpp | 270 ++ .../src/main/cpp/viennacl/detail/vector_def.hpp | 349 ++ .../device_specific/builtin_database/common.hpp | 219 + .../devices/accelerator/fallback.hpp | 85 + .../builtin_database/devices/cpu/fallback.hpp | 84 + .../devices/gpu/amd/evergreen/cedar.hpp | 64 + .../devices/gpu/amd/evergreen/cypress.hpp | 65 + .../devices/gpu/amd/northern_islands/barts.hpp | 64 + .../gpu/amd/northern_islands/devastator.hpp | 64 + .../gpu/amd/northern_islands/scrapper.hpp | 64 + .../devices/gpu/amd/southern_islands/tahiti.hpp | 84 + .../devices/gpu/amd/volcanic_islands/hawaii.hpp | 84 + .../builtin_database/devices/gpu/fallback.hpp | 84 + .../gpu/nvidia/fermi/geforce_gt_540m.hpp | 59 + .../gpu/nvidia/fermi/geforce_gtx_470.hpp | 83 + .../gpu/nvidia/fermi/geforce_gtx_580.hpp | 84 + .../devices/gpu/nvidia/fermi/tesla_c2050.hpp | 84 + .../devices/gpu/nvidia/kepler/tesla_k20m.hpp | 84 + .../gpu/nvidia/maxwell/geforce_gtx_750_ti.hpp | 85 + .../gpu/nvidia/tesla/geforce_gtx_260.hpp | 84 + .../builtin_database/matrix_product.hpp | 244 ++ .../cpp/viennacl/device_specific/execute.hpp | 55 + .../device_specific/execution_handler.hpp | 102 + .../cpp/viennacl/device_specific/forwards.h | 294 ++ .../device_specific/lazy_program_compiler.hpp | 74 + .../viennacl/device_specific/mapped_objects.hpp | 512 +++ .../templates/matrix_product_template.hpp | 859 ++++ .../device_specific/templates/template_base.hpp | 596 +++ .../device_specific/templates/utils.hpp | 105 + .../viennacl/device_specific/tree_parsing.hpp | 512 +++ .../main/cpp/viennacl/device_specific/utils.hpp | 568 +++ .../src/main/cpp/viennacl/ell_matrix.hpp | 362 ++ native-viennaCL/src/main/cpp/viennacl/fft.hpp | 282 ++ .../src/main/cpp/viennacl/forwards.h | 1032 +++++ .../src/main/cpp/viennacl/hankel_matrix.hpp | 343 ++ .../src/main/cpp/viennacl/hyb_matrix.hpp | 442 ++ .../src/main/cpp/viennacl/io/matrix_market.hpp | 440 ++ .../src/main/cpp/viennacl/linalg/amg.hpp | 398 ++ .../main/cpp/viennacl/linalg/amg_operations.hpp | 238 ++ .../src/main/cpp/viennacl/linalg/bicgstab.hpp | 598 +++ .../src/main/cpp/viennacl/linalg/bisect.hpp | 179 + .../src/main/cpp/viennacl/linalg/bisect_gpu.hpp | 173 + .../src/main/cpp/viennacl/linalg/cg.hpp | 440 ++ .../linalg/circulant_matrix_operations.hpp | 75 + .../cpp/viennacl/linalg/cuda/amg_operations.hpp | 821 ++++ .../linalg/cuda/bisect_kernel_calls.hpp | 166 + .../linalg/cuda/bisect_kernel_large.hpp | 928 ++++ .../linalg/cuda/bisect_kernel_large_multi.hpp | 277 ++ .../linalg/cuda/bisect_kernel_large_onei.hpp | 180 + .../linalg/cuda/bisect_kernel_small.hpp | 261 ++ .../cpp/viennacl/linalg/cuda/bisect_util.hpp | 613 +++ .../main/cpp/viennacl/linalg/cuda/common.hpp | 250 ++ .../cpp/viennacl/linalg/cuda/direct_solve.hpp | 412 ++ .../cpp/viennacl/linalg/cuda/fft_operations.hpp | 858 ++++ .../cpp/viennacl/linalg/cuda/ilu_operations.hpp | 666 +++ .../linalg/cuda/iterative_operations.hpp | 2049 +++++++++ .../viennacl/linalg/cuda/matrix_operations.hpp | 2725 ++++++++++++ .../linalg/cuda/matrix_operations_col.hpp | 1847 ++++++++ .../linalg/cuda/matrix_operations_prod.hpp | 2887 +++++++++++++ .../linalg/cuda/matrix_operations_row.hpp | 1468 +++++++ .../viennacl/linalg/cuda/misc_operations.hpp | 91 + .../cpp/viennacl/linalg/cuda/nmf_operations.hpp | 152 + .../viennacl/linalg/cuda/scalar_operations.hpp | 375 ++ .../linalg/cuda/sparse_matrix_operations.hpp | 2809 +++++++++++++ .../cuda/sparse_matrix_operations_solve.hpp | 761 ++++ .../main/cpp/viennacl/linalg/cuda/spgemm.hpp | 793 ++++ .../cpp/viennacl/linalg/cuda/spgemm_rmerge.hpp | 669 +++ .../viennacl/linalg/cuda/vector_operations.hpp | 3252 ++++++++++++++ .../cpp/viennacl/linalg/detail/amg/amg_base.hpp | 208 + .../detail/bisect/bisect_kernel_calls.hpp | 191 + .../linalg/detail/bisect/bisect_large.hpp | 142 + .../linalg/detail/bisect/bisect_small.hpp | 96 + .../viennacl/linalg/detail/bisect/config.hpp | 44 + .../linalg/detail/bisect/gerschgorin.hpp | 94 + .../viennacl/linalg/detail/bisect/structs.hpp | 182 + .../cpp/viennacl/linalg/detail/bisect/util.hpp | 106 + .../viennacl/linalg/detail/ilu/block_ilu.hpp | 617 +++ .../linalg/detail/ilu/chow_patel_ilu.hpp | 316 ++ .../cpp/viennacl/linalg/detail/ilu/common.hpp | 263 ++ .../cpp/viennacl/linalg/detail/ilu/ilu0.hpp | 379 ++ .../cpp/viennacl/linalg/detail/ilu/ilut.hpp | 597 +++ .../cpp/viennacl/linalg/detail/op_applier.hpp | 103 + .../cpp/viennacl/linalg/detail/op_executor.hpp | 86 + .../linalg/detail/spai/block_matrix.hpp | 86 + .../linalg/detail/spai/block_vector.hpp | 77 + .../cpp/viennacl/linalg/detail/spai/fspai.hpp | 402 ++ .../main/cpp/viennacl/linalg/detail/spai/qr.hpp | 497 +++ .../linalg/detail/spai/small_matrix.hpp | 113 + .../linalg/detail/spai/spai-dynamic.hpp | 687 +++ .../viennacl/linalg/detail/spai/spai-static.hpp | 192 + .../cpp/viennacl/linalg/detail/spai/spai.hpp | 832 ++++ .../viennacl/linalg/detail/spai/spai_tag.hpp | 143 + .../linalg/detail/spai/sparse_vector.hpp | 85 + .../main/cpp/viennacl/linalg/direct_solve.hpp | 580 +++ .../src/main/cpp/viennacl/linalg/eig.hpp | 29 + .../main/cpp/viennacl/linalg/fft_operations.hpp | 481 +++ .../src/main/cpp/viennacl/linalg/gmres.hpp | 738 ++++ .../linalg/hankel_matrix_operations.hpp | 66 + .../linalg/host_based/amg_operations.hpp | 1123 +++++ .../cpp/viennacl/linalg/host_based/common.hpp | 149 + .../viennacl/linalg/host_based/direct_solve.hpp | 307 ++ .../linalg/host_based/fft_operations.hpp | 856 ++++ .../linalg/host_based/ilu_operations.hpp | 672 +++ .../linalg/host_based/iterative_operations.hpp | 880 ++++ .../linalg/host_based/matrix_operations.hpp | 2052 +++++++++ .../linalg/host_based/misc_operations.hpp | 80 + .../linalg/host_based/nmf_operations.hpp | 247 ++ .../linalg/host_based/scalar_operations.hpp | 162 + .../host_based/sparse_matrix_operations.hpp | 2081 +++++++++ .../linalg/host_based/spgemm_vector.hpp | 705 ++++ .../linalg/host_based/vector_operations.hpp | 1188 ++++++ .../src/main/cpp/viennacl/linalg/ichol.hpp | 228 + .../src/main/cpp/viennacl/linalg/ilu.hpp | 33 + .../main/cpp/viennacl/linalg/ilu_operations.hpp | 334 ++ .../src/main/cpp/viennacl/linalg/inner_prod.hpp | 186 + .../viennacl/linalg/iterative_operations.hpp | 425 ++ .../main/cpp/viennacl/linalg/jacobi_precond.hpp | 141 + .../src/main/cpp/viennacl/linalg/lanczos.hpp | 515 +++ .../src/main/cpp/viennacl/linalg/lu.hpp | 227 + .../cpp/viennacl/linalg/matrix_operations.hpp | 1303 ++++++ .../src/main/cpp/viennacl/linalg/maxmin.hpp | 152 + .../cpp/viennacl/linalg/misc_operations.hpp | 94 + .../cpp/viennacl/linalg/mixed_precision_cg.hpp | 199 + .../src/main/cpp/viennacl/linalg/nmf.hpp | 91 + .../src/main/cpp/viennacl/linalg/norm_1.hpp | 104 + .../src/main/cpp/viennacl/linalg/norm_2.hpp | 140 + .../main/cpp/viennacl/linalg/norm_frobenius.hpp | 73 + .../src/main/cpp/viennacl/linalg/norm_inf.hpp | 108 + .../viennacl/linalg/opencl/amg_operations.hpp | 458 ++ .../linalg/opencl/bisect_kernel_calls.hpp | 177 + .../main/cpp/viennacl/linalg/opencl/common.hpp | 102 + .../cpp/viennacl/linalg/opencl/direct_solve.hpp | 153 + .../viennacl/linalg/opencl/fft_operations.hpp | 350 ++ .../viennacl/linalg/opencl/ilu_operations.hpp | 260 ++ .../linalg/opencl/iterative_operations.hpp | 945 +++++ .../cpp/viennacl/linalg/opencl/kernels/amg.hpp | 393 ++ .../viennacl/linalg/opencl/kernels/bisect.hpp | 2645 ++++++++++++ .../kernels/compressed_compressed_matrix.hpp | 110 + .../linalg/opencl/kernels/compressed_matrix.hpp | 1703 ++++++++ .../linalg/opencl/kernels/coordinate_matrix.hpp | 405 ++ .../linalg/opencl/kernels/ell_matrix.hpp | 221 + .../cpp/viennacl/linalg/opencl/kernels/fft.hpp | 311 ++ .../linalg/opencl/kernels/hyb_matrix.hpp | 240 ++ .../cpp/viennacl/linalg/opencl/kernels/ilu.hpp | 505 +++ .../linalg/opencl/kernels/iterative.hpp | 1619 +++++++ .../viennacl/linalg/opencl/kernels/matrix.hpp | 1193 ++++++ .../linalg/opencl/kernels/matrix_element.hpp | 138 + .../linalg/opencl/kernels/matrix_solve.hpp | 180 + .../cpp/viennacl/linalg/opencl/kernels/nmf.hpp | 99 + .../viennacl/linalg/opencl/kernels/scalar.hpp | 283 ++ .../cpp/viennacl/linalg/opencl/kernels/scan.hpp | 194 + .../linalg/opencl/kernels/sliced_ell_matrix.hpp | 135 + .../cpp/viennacl/linalg/opencl/kernels/spai.hpp | 631 +++ .../cpp/viennacl/linalg/opencl/kernels/svd.hpp | 703 ++++ .../viennacl/linalg/opencl/kernels/vector.hpp | 867 ++++ .../linalg/opencl/kernels/vector_element.hpp | 163 + .../linalg/opencl/matrix_operations.hpp | 1019 +++++ .../viennacl/linalg/opencl/misc_operations.hpp | 69 + .../viennacl/linalg/opencl/nmf_operations.hpp | 139 + .../linalg/opencl/scalar_operations.hpp | 205 + .../linalg/opencl/sparse_matrix_operations.hpp | 1244 ++++++ .../opencl/vandermonde_matrix_operations.hpp | 68 + .../linalg/opencl/vector_operations.hpp | 1263 ++++++ .../src/main/cpp/viennacl/linalg/power_iter.hpp | 129 + .../src/main/cpp/viennacl/linalg/prod.hpp | 370 ++ .../cpp/viennacl/linalg/qr-method-common.hpp | 188 + .../src/main/cpp/viennacl/linalg/qr-method.hpp | 833 ++++ .../src/main/cpp/viennacl/linalg/qr.hpp | 669 +++ .../main/cpp/viennacl/linalg/row_scaling.hpp | 204 + .../cpp/viennacl/linalg/scalar_operations.hpp | 242 ++ .../src/main/cpp/viennacl/linalg/spai.hpp | 292 ++ .../linalg/sparse_matrix_operations.hpp | 421 ++ .../src/main/cpp/viennacl/linalg/sum.hpp | 136 + .../src/main/cpp/viennacl/linalg/svd.hpp | 533 +++ .../linalg/toeplitz_matrix_operations.hpp | 78 + .../src/main/cpp/viennacl/linalg/tql2.hpp | 262 ++ .../linalg/vandermonde_matrix_operations.hpp | 71 + .../cpp/viennacl/linalg/vector_operations.hpp | 1304 ++++++ .../src/main/cpp/viennacl/matrix.hpp | 3968 ++++++++++++++++++ .../src/main/cpp/viennacl/matrix_proxy.hpp | 595 +++ .../src/main/cpp/viennacl/meta/enable_if.hpp | 43 + .../src/main/cpp/viennacl/meta/predicate.hpp | 534 +++ .../src/main/cpp/viennacl/meta/result_of.hpp | 631 +++ .../src/main/cpp/viennacl/meta/tag_of.hpp | 390 ++ .../cpp/viennacl/misc/bandwidth_reduction.hpp | 38 + .../main/cpp/viennacl/misc/cuthill_mckee.hpp | 611 +++ .../viennacl/misc/gibbs_poole_stockmeyer.hpp | 426 ++ .../src/main/cpp/viennacl/ocl/backend.hpp | 358 ++ .../src/main/cpp/viennacl/ocl/command_queue.hpp | 92 + .../src/main/cpp/viennacl/ocl/context.hpp | 820 ++++ .../src/main/cpp/viennacl/ocl/device.hpp | 1496 +++++++ .../src/main/cpp/viennacl/ocl/device_utils.hpp | 191 + .../src/main/cpp/viennacl/ocl/enqueue.hpp | 148 + .../src/main/cpp/viennacl/ocl/error.hpp | 687 +++ .../src/main/cpp/viennacl/ocl/forwards.h | 63 + .../src/main/cpp/viennacl/ocl/handle.hpp | 228 + .../src/main/cpp/viennacl/ocl/kernel.hpp | 805 ++++ .../src/main/cpp/viennacl/ocl/local_mem.hpp | 51 + .../src/main/cpp/viennacl/ocl/platform.hpp | 145 + .../src/main/cpp/viennacl/ocl/program.hpp | 86 + .../src/main/cpp/viennacl/ocl/utils.hpp | 85 + native-viennaCL/src/main/cpp/viennacl/range.hpp | 76 + .../src/main/cpp/viennacl/scalar.hpp | 874 ++++ .../src/main/cpp/viennacl/scheduler/execute.hpp | 290 ++ .../cpp/viennacl/scheduler/execute_axbx.hpp | 381 ++ .../viennacl/scheduler/execute_elementwise.hpp | 410 ++ .../scheduler/execute_generic_dispatcher.hpp | 134 + .../scheduler/execute_matrix_dispatcher.hpp | 185 + .../viennacl/scheduler/execute_matrix_prod.hpp | 406 ++ .../scheduler/execute_scalar_assign.hpp | 192 + .../scheduler/execute_scalar_dispatcher.hpp | 131 + .../cpp/viennacl/scheduler/execute_util.hpp | 324 ++ .../scheduler/execute_vector_dispatcher.hpp | 200 + .../src/main/cpp/viennacl/scheduler/forwards.h | 830 ++++ .../src/main/cpp/viennacl/scheduler/io.hpp | 268 ++ .../src/main/cpp/viennacl/scheduler/preset.hpp | 105 + native-viennaCL/src/main/cpp/viennacl/slice.hpp | 77 + .../src/main/cpp/viennacl/sliced_ell_matrix.hpp | 383 ++ .../src/main/cpp/viennacl/toeplitz_matrix.hpp | 384 ++ .../src/main/cpp/viennacl/tools/adapter.hpp | 421 ++ .../src/main/cpp/viennacl/tools/entry_proxy.hpp | 234 ++ .../cpp/viennacl/tools/matrix_generation.hpp | 146 + .../cpp/viennacl/tools/matrix_size_deducer.hpp | 204 + .../src/main/cpp/viennacl/tools/random.hpp | 84 + .../src/main/cpp/viennacl/tools/sha1.hpp | 237 ++ .../src/main/cpp/viennacl/tools/shared_ptr.hpp | 179 + .../src/main/cpp/viennacl/tools/timer.hpp | 123 + .../src/main/cpp/viennacl/tools/tools.hpp | 315 ++ .../src/main/cpp/viennacl/traits/clear.hpp | 62 + .../src/main/cpp/viennacl/traits/context.hpp | 65 + .../src/main/cpp/viennacl/traits/fill.hpp | 68 + .../src/main/cpp/viennacl/traits/handle.hpp | 270 ++ .../src/main/cpp/viennacl/traits/row_major.hpp | 50 + .../src/main/cpp/viennacl/traits/size.hpp | 442 ++ .../src/main/cpp/viennacl/traits/start.hpp | 102 + .../src/main/cpp/viennacl/traits/stride.hpp | 72 + .../main/cpp/viennacl/vandermonde_matrix.hpp | 342 ++ .../src/main/cpp/viennacl/vector.hpp | 3235 ++++++++++++++ .../src/main/cpp/viennacl/vector_proxy.hpp | 340 ++ .../src/main/cpp/viennacl/version.hpp | 31 + .../apache/mahout/javaCppTest/HelloNative.scala | 28 + .../mahout/javaCppTest/ViennaMatrix.scala | 34 + .../apache/mahout/javaCppTest/ViennaSvd.scala | 8 + .../mahout/javaCppTest/ViennaVector.scala | 8 + .../javaCppTest/HelloNativeTestSuite.scala | 15 + pom.xml | 1 + runtests.sh | 1 + 292 files changed, 120789 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mahout/blob/f7c1f802/LICENSE.txt ---------------------------------------------------------------------- diff --git a/LICENSE.txt b/LICENSE.txt index 8ce7fff..dcc3c4e 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -799,3 +799,32 @@ The following license applies to the H2O package identification within third-party archives. Copyright 2012 0xdata, Inc + +================================================================ +The following applies to the ViennaCL library and files in the native-ViennaCL module +================================================================ + + Copyright (c) 2010-2016 Institute for Microelectronics, + Institute for Analysis and Scientific Computing, TU Wien. + Portions of this software are copyright by UChicago Argonne, LLC. + Argonne National Laboratory, with facilities in the state of Illinois, + is owned by The United States Government, and operated by UChicago Argonne, LLC + under provision of a contract with the Department of Energy. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. http://git-wip-us.apache.org/repos/asf/mahout/blob/f7c1f802/math-scala/pom.xml ---------------------------------------------------------------------- diff --git a/math-scala/pom.xml b/math-scala/pom.xml index 280a7a1..de96b03 100644 --- a/math-scala/pom.xml +++ b/math-scala/pom.xml @@ -122,6 +122,11 @@ <artifactId>mahout-math</artifactId> </dependency> + <!--<dependency>--> + <!--<groupId>org.apache.mahout</groupId>--> + <!--<artifactId>mahout-native-viennacl_2.10</artifactId>--> + <!--</dependency>--> + <dependency> <groupId>com.esotericsoftware.kryo</groupId> <artifactId>kryo</artifactId> http://git-wip-us.apache.org/repos/asf/mahout/blob/f7c1f802/math-scala/src/test/scala/org/apache/mahout/math/scalabindings/viennacl/ViennaCLTests.scala ---------------------------------------------------------------------- diff --git a/math-scala/src/test/scala/org/apache/mahout/math/scalabindings/viennacl/ViennaCLTests.scala b/math-scala/src/test/scala/org/apache/mahout/math/scalabindings/viennacl/ViennaCLTests.scala new file mode 100644 index 0000000..aa7466e --- /dev/null +++ b/math-scala/src/test/scala/org/apache/mahout/math/scalabindings/viennacl/ViennaCLTests.scala @@ -0,0 +1,40 @@ +/* + * 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.math.scalabindings.viennacl + + +import org.apache.mahout.logging._ +import org.apache.mahout.math._ +import org.apache.mahout.math.scalabindings.RLikeOps._ +import org.apache.mahout.test.MahoutSuite +import org.scalatest.FunSuite +//import org.apache.mahout.javaCppTest._ + +import scala.math._ + +class ViennaCLTests extends FunSuite with MahoutSuite { + + private final implicit val log = getLog(classOf[ViennaCLTests]) + +// test("HelloNative"){ +// val nTest = new HelloNative +// +// nTest.set_property("Hello Native") +// assert(nTest.get_property() == "Hello Native") +// } + +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/mahout/blob/f7c1f802/native-viennaCL/pom.xml ---------------------------------------------------------------------- diff --git a/native-viennaCL/pom.xml b/native-viennaCL/pom.xml new file mode 100644 index 0000000..a144adc --- /dev/null +++ b/native-viennaCL/pom.xml @@ -0,0 +1,249 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + 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. +--> + +<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</artifactId> + <version>0.12.2-SNAPSHOT</version> + <relativePath>../pom.xml</relativePath> + </parent> + + <!--<artifactId>mahout-native-viennacl_${scala.compat.version}</artifactId>--> + <artifactId>mahout-native-viennacl_2.10</artifactId> + + <name>Mahout Native VienniaCL Bindings</name> + <description>Native Structures and interfaces to be used from Mahout math-scala. + </description> + + <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> + + <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> + </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> + <executable>java</executable> + <arguments> + <argument>-jar</argument> + <argument>${org.bytedeco:javacpp:jar}</argument> + <argument>-classpath</argument> + <argument>${project.build.outputDirectory}</argument> + <argument>-Xcompiler</argument> + <argument>-I${basedir}/src/main/cpp</argument> + <!--<argument>-I${basedir}/src/main/cpp/viennacl</argument>--> + <!--<argument>-I${basedir}/src/main/cpp/viennacl/linalg</argument>--> + <!--<argument>-I${basedir}/src/main/cpp/libviennacl/include</argument>--> + <!--<argument>-I${basedir}/src/main/cpp/libviennacl/include/src</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> + + </plugins> + + </build> + + <dependencies> + + <!-- 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.1</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/f7c1f802/native-viennaCL/src/main/cpp/HelloNative.h ---------------------------------------------------------------------- diff --git a/native-viennaCL/src/main/cpp/HelloNative.h b/native-viennaCL/src/main/cpp/HelloNative.h new file mode 100644 index 0000000..d101f94 --- /dev/null +++ b/native-viennaCL/src/main/cpp/HelloNative.h @@ -0,0 +1,10 @@ +#include <string> + +namespace HelloNative { + class HelloNative { + public: + const std::string& get_property() { return property; } + void set_property(const std::string& property) { this->property = property; } + std::string property; + }; +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/mahout/blob/f7c1f802/native-viennaCL/src/main/cpp/libviennacl/CMakeLists.txt ---------------------------------------------------------------------- diff --git a/native-viennaCL/src/main/cpp/libviennacl/CMakeLists.txt b/native-viennaCL/src/main/cpp/libviennacl/CMakeLists.txt new file mode 100644 index 0000000..d2f83e5 --- /dev/null +++ b/native-viennaCL/src/main/cpp/libviennacl/CMakeLists.txt @@ -0,0 +1,40 @@ + +include_directories(${PROJECT_SOURCE_DIR}/libviennacl/include/) + +if(ENABLE_CUDA) + + if(ENABLE_OPENCL) + set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} "-DVIENNACL_WITH_OPENCL") #set flags before setting executable! + cuda_add_library(viennacl SHARED src/backend.cu + src/blas1.cu src/blas1_host.cu src/blas1_cuda.cu src/blas1_opencl.cu + src/blas2.cu src/blas2_host.cu src/blas2_cuda.cu src/blas2_opencl.cu + src/blas3.cu src/blas3_host.cu src/blas3_cuda.cu src/blas3_opencl.cu) + set_target_properties(viennacl PROPERTIES COMPILE_FLAGS "-DVIENNACL_WITH_OPENCL -DVIENNACL_WITH_CUDA") + target_link_libraries(viennacl ${OPENCL_LIBRARIES}) + else(ENABLE_OPENCL) + cuda_add_library(viennacl SHARED src/backend.cu + src/blas1.cu src/blas1_host.cu src/blas1_cuda.cu + src/blas2.cu src/blas2_host.cu src/blas2_cuda.cu + src/blas3.cu src/blas3_host.cu src/blas3_cuda.cu) + set_target_properties(viennacl PROPERTIES COMPILE_FLAGS "-DVIENNACL_WITH_CUDA") + endif(ENABLE_OPENCL) +else(ENABLE_CUDA) + if(ENABLE_OPENCL) + add_library(viennacl SHARED src/backend.cpp + src/blas1.cpp src/blas1_host.cpp src/blas1_opencl.cpp + src/blas2.cpp src/blas2_host.cpp src/blas2_opencl.cpp + src/blas3.cpp src/blas3_host.cpp src/blas3_opencl.cpp) + set_target_properties(viennacl PROPERTIES COMPILE_FLAGS "-DVIENNACL_WITH_OPENCL") + target_link_libraries(viennacl ${OPENCL_LIBRARIES}) + else(ENABLE_OPENCL) + add_library(viennacl SHARED src/backend.cpp + src/blas1.cpp src/blas1_host.cpp + src/blas2.cpp src/blas2_host.cpp + src/blas3.cpp src/blas3_host.cpp) + endif(ENABLE_OPENCL) +endif(ENABLE_CUDA) + +# Special linkage for OpenMP under MinGW: +if(ENABLE_OPENMP AND MINGW) + target_link_libraries(viennacl gomp) +endif(ENABLE_OPENMP AND MINGW) http://git-wip-us.apache.org/repos/asf/mahout/blob/f7c1f802/native-viennaCL/src/main/cpp/libviennacl/include/viennacl.hpp ---------------------------------------------------------------------- diff --git a/native-viennaCL/src/main/cpp/libviennacl/include/viennacl.hpp b/native-viennaCL/src/main/cpp/libviennacl/include/viennacl.hpp new file mode 100644 index 0000000..0b7b97a --- /dev/null +++ b/native-viennaCL/src/main/cpp/libviennacl/include/viennacl.hpp @@ -0,0 +1,617 @@ +#ifndef VIENNACL_VIENNACL_HPP +#define VIENNACL_VIENNACL_HPP + +/* ========================================================================= + Copyright (c) 2010-2014, Institute for Microelectronics, + Institute for Analysis and Scientific Computing, + TU Wien. + Portions of this software are copyright by UChicago Argonne, LLC. + + ----------------- + ViennaCL - The Vienna Computing Library + ----------------- + + Project Head: Karl Rupp [email protected] + + (A list of authors and contributors can be found in the PDF manual) + + License: MIT (X11), see file LICENSE in the base directory +============================================================================= */ + +#include <stdlib.h> + +#ifdef VIENNACL_WITH_OPENCL +#ifdef __APPLE__ +#include <OpenCL/cl.h> +#else +#include <CL/cl.h> +#endif +#endif + + +// Extra export declarations when building with Visual Studio: +#if defined(_MSC_VER) + #if defined(viennacl_EXPORTS) + #define VIENNACL_EXPORTED_FUNCTION __declspec(dllexport) + #else + #define VIENNACL_EXPORTED_FUNCTION __declspec(dllimport) + #endif /* viennacl_EXPORTS */ +#else /* defined (_MSC_VER) */ + #define VIENNACL_EXPORTED_FUNCTION +#endif + + +#ifdef __cplusplus +extern "C" { +#endif + +typedef int ViennaCLInt; + + +/************** Enums ***************/ + +typedef enum +{ + ViennaCLInvalidBackend, // for catching uninitialized and invalid values + ViennaCLCUDA, + ViennaCLOpenCL, + ViennaCLHost +} ViennaCLBackendTypes; + +typedef enum +{ + ViennaCLInvalidOrder, // for catching uninitialized and invalid values + ViennaCLRowMajor, + ViennaCLColumnMajor +} ViennaCLOrder; + +typedef enum +{ + ViennaCLInvalidTranspose, // for catching uninitialized and invalid values + ViennaCLNoTrans, + ViennaCLTrans +} ViennaCLTranspose; + +typedef enum +{ + ViennaCLInvalidUplo, // for catching uninitialized and invalid values + ViennaCLUpper, + ViennaCLLower +} ViennaCLUplo; + +typedef enum +{ + ViennaCLInvalidDiag, // for catching uninitialized and invalid values + ViennaCLUnit, + ViennaCLNonUnit +} ViennaCLDiag; + +typedef enum +{ + ViennaCLInvalidPrecision, // for catching uninitialized and invalid values + ViennaCLFloat, + ViennaCLDouble +} ViennaCLPrecision; + +// Error codes: +typedef enum +{ + ViennaCLSuccess = 0, + ViennaCLGenericFailure +} ViennaCLStatus; + + +/************* Backend Management ******************/ + +/** @brief Generic backend for CUDA, OpenCL, host-based stuff */ +struct ViennaCLBackend_impl; +typedef ViennaCLBackend_impl* ViennaCLBackend; + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLBackendCreate(ViennaCLBackend * backend); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLBackendSetOpenCLContextID(ViennaCLBackend backend, ViennaCLInt context_id); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLBackendDestroy(ViennaCLBackend * backend); + +/******** User Types **********/ + +struct ViennaCLHostScalar_impl; +typedef ViennaCLHostScalar_impl* ViennaCLHostScalar; + +struct ViennaCLScalar_impl; +typedef ViennaCLScalar_impl* ViennaCLScalar; + +struct ViennaCLVector_impl; +typedef ViennaCLVector_impl* ViennaCLVector; + +struct ViennaCLMatrix_impl; +typedef ViennaCLMatrix_impl* ViennaCLMatrix; + + +/******************** BLAS Level 1 ***********************/ + +// IxASUM + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLiamax(ViennaCLInt *alpha, ViennaCLVector x); + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLCUDAiSamax(ViennaCLBackend backend, ViennaCLInt n, + ViennaCLInt *alpha, + float *x, ViennaCLInt offx, ViennaCLInt incx); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLCUDAiDamax(ViennaCLBackend backend, ViennaCLInt n, + ViennaCLInt *alpha, + double *x, ViennaCLInt offx, ViennaCLInt incx); + +#ifdef VIENNACL_WITH_OPENCL +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLOpenCLiSamax(ViennaCLBackend backend, ViennaCLInt n, + ViennaCLInt *alpha, + cl_mem x, ViennaCLInt offx, ViennaCLInt incx); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLOpenCLiDamax(ViennaCLBackend backend, ViennaCLInt n, + ViennaCLInt *alpha, + cl_mem x, ViennaCLInt offx, ViennaCLInt incx); +#endif + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLHostiSamax(ViennaCLBackend backend, ViennaCLInt n, + ViennaCLInt *alpha, + float *x, ViennaCLInt offx, ViennaCLInt incx); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLHostiDamax(ViennaCLBackend backend, ViennaCLInt n, + ViennaCLInt *alpha, + double *x, ViennaCLInt offx, ViennaCLInt incx); + + +// xASUM + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLasum(ViennaCLHostScalar *alpha, ViennaCLVector x); + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLCUDASasum(ViennaCLBackend backend, ViennaCLInt n, + float *alpha, + float *x, ViennaCLInt offx, ViennaCLInt incx); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLCUDADasum(ViennaCLBackend backend, ViennaCLInt n, + double *alpha, + double *x, ViennaCLInt offx, ViennaCLInt incx); + +#ifdef VIENNACL_WITH_OPENCL +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLOpenCLSasum(ViennaCLBackend backend, ViennaCLInt n, + float *alpha, + cl_mem x, ViennaCLInt offx, ViennaCLInt incx); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLOpenCLDasum(ViennaCLBackend backend, ViennaCLInt n, + double *alpha, + cl_mem x, ViennaCLInt offx, ViennaCLInt incx); +#endif + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLHostSasum(ViennaCLBackend backend, ViennaCLInt n, + float *alpha, + float *x, ViennaCLInt offx, ViennaCLInt incx); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLHostDasum(ViennaCLBackend backend, ViennaCLInt n, + double *alpha, + double *x, ViennaCLInt offx, ViennaCLInt incx); + + + +// xAXPY + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLaxpy(ViennaCLHostScalar alpha, ViennaCLVector x, ViennaCLVector y); + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLCUDASaxpy(ViennaCLBackend backend, ViennaCLInt n, + float alpha, + float *x, ViennaCLInt offx, ViennaCLInt incx, + float *y, ViennaCLInt offy, ViennaCLInt incy); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLCUDADaxpy(ViennaCLBackend backend, ViennaCLInt n, + double alpha, + double *x, ViennaCLInt offx, ViennaCLInt incx, + double *y, ViennaCLInt offy, ViennaCLInt incy); + +#ifdef VIENNACL_WITH_OPENCL +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLOpenCLSaxpy(ViennaCLBackend backend, ViennaCLInt n, + float alpha, + cl_mem x, ViennaCLInt offx, ViennaCLInt incx, + cl_mem y, ViennaCLInt offy, ViennaCLInt incy); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLOpenCLDaxpy(ViennaCLBackend backend, ViennaCLInt n, + double alpha, + cl_mem x, ViennaCLInt offx, ViennaCLInt incx, + cl_mem y, ViennaCLInt offy, ViennaCLInt incy); +#endif + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLHostSaxpy(ViennaCLBackend backend, ViennaCLInt n, + float alpha, + float *x, ViennaCLInt offx, ViennaCLInt incx, + float *y, ViennaCLInt offy, ViennaCLInt incy); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLHostDaxpy(ViennaCLBackend backend, ViennaCLInt n, + double alpha, + double *x, ViennaCLInt offx, ViennaCLInt incx, + double *y, ViennaCLInt offy, ViennaCLInt incy); + + +// xCOPY + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLcopy(ViennaCLVector x, ViennaCLVector y); + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLCUDAScopy(ViennaCLBackend backend, ViennaCLInt n, + float *x, ViennaCLInt offx, ViennaCLInt incx, + float *y, ViennaCLInt offy, ViennaCLInt incy); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLCUDADcopy(ViennaCLBackend backend, ViennaCLInt n, + double *x, ViennaCLInt offx, ViennaCLInt incx, + double *y, ViennaCLInt offy, ViennaCLInt incy); + +#ifdef VIENNACL_WITH_OPENCL +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLOpenCLScopy(ViennaCLBackend backend, ViennaCLInt n, + cl_mem x, ViennaCLInt offx, ViennaCLInt incx, + cl_mem y, ViennaCLInt offy, ViennaCLInt incy); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLOpenCLDcopy(ViennaCLBackend backend, ViennaCLInt n, + cl_mem x, ViennaCLInt offx, ViennaCLInt incx, + cl_mem y, ViennaCLInt offy, ViennaCLInt incy); +#endif + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLHostScopy(ViennaCLBackend backend, ViennaCLInt n, + float *x, ViennaCLInt offx, ViennaCLInt incx, + float *y, ViennaCLInt offy, ViennaCLInt incy); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLHostDcopy(ViennaCLBackend backend, ViennaCLInt n, + double *x, ViennaCLInt offx, ViennaCLInt incx, + double *y, ViennaCLInt offy, ViennaCLInt incy); + +// xDOT + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLdot(ViennaCLHostScalar *alpha, ViennaCLVector x, ViennaCLVector y); + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLCUDASdot(ViennaCLBackend backend, ViennaCLInt n, + float *alpha, + float *x, ViennaCLInt offx, ViennaCLInt incx, + float *y, ViennaCLInt offy, ViennaCLInt incy); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLCUDADdot(ViennaCLBackend backend, ViennaCLInt n, + double *alpha, + double *x, ViennaCLInt offx, ViennaCLInt incx, + double *y, ViennaCLInt offy, ViennaCLInt incy); + +#ifdef VIENNACL_WITH_OPENCL +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLOpenCLSdot(ViennaCLBackend backend, ViennaCLInt n, + float *alpha, + cl_mem x, ViennaCLInt offx, ViennaCLInt incx, + cl_mem y, ViennaCLInt offy, ViennaCLInt incy); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLOpenCLDdot(ViennaCLBackend backend, ViennaCLInt n, + double *alpha, + cl_mem x, ViennaCLInt offx, ViennaCLInt incx, + cl_mem y, ViennaCLInt offy, ViennaCLInt incy); +#endif + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLHostSdot(ViennaCLBackend backend, ViennaCLInt n, + float *alpha, + float *x, ViennaCLInt offx, ViennaCLInt incx, + float *y, ViennaCLInt offy, ViennaCLInt incy); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLHostDdot(ViennaCLBackend backend, ViennaCLInt n, + double *alpha, + double *x, ViennaCLInt offx, ViennaCLInt incx, + double *y, ViennaCLInt offy, ViennaCLInt incy); + +// xNRM2 + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLnrm2(ViennaCLHostScalar *alpha, ViennaCLVector x); + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLCUDASnrm2(ViennaCLBackend backend, ViennaCLInt n, + float *alpha, + float *x, ViennaCLInt offx, ViennaCLInt incx); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLCUDADnrm2(ViennaCLBackend backend, ViennaCLInt n, + double *alpha, + double *x, ViennaCLInt offx, ViennaCLInt incx); + +#ifdef VIENNACL_WITH_OPENCL +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLOpenCLSnrm2(ViennaCLBackend backend, ViennaCLInt n, + float *alpha, + cl_mem x, ViennaCLInt offx, ViennaCLInt incx); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLOpenCLDnrm2(ViennaCLBackend backend, ViennaCLInt n, + double *alpha, + cl_mem x, ViennaCLInt offx, ViennaCLInt incx); +#endif + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLHostSnrm2(ViennaCLBackend backend, ViennaCLInt n, + float *alpha, + float *x, ViennaCLInt offx, ViennaCLInt incx); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLHostDnrm2(ViennaCLBackend backend, ViennaCLInt n, + double *alpha, + double *x, ViennaCLInt offx, ViennaCLInt incx); + + +// xROT + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLrot(ViennaCLVector x, ViennaCLVector y, + ViennaCLHostScalar c, ViennaCLHostScalar s); + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLCUDASrot(ViennaCLBackend backend, ViennaCLInt n, + float *x, ViennaCLInt offx, ViennaCLInt incx, + float *y, ViennaCLInt offy, ViennaCLInt incy, + float c, float s); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLCUDADrot(ViennaCLBackend backend, ViennaCLInt n, + double *x, ViennaCLInt offx, ViennaCLInt incx, + double *y, ViennaCLInt offy, ViennaCLInt incy, + double c, double s); + +#ifdef VIENNACL_WITH_OPENCL +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLOpenCLSrot(ViennaCLBackend backend, ViennaCLInt n, + cl_mem x, ViennaCLInt offx, ViennaCLInt incx, + cl_mem y, ViennaCLInt offy, ViennaCLInt incy, + float c, float s); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLOpenCLDrot(ViennaCLBackend backend, ViennaCLInt n, + cl_mem x, ViennaCLInt offx, ViennaCLInt incx, + cl_mem y, ViennaCLInt offy, ViennaCLInt incy, + double c, double s); +#endif + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLHostSrot(ViennaCLBackend backend, ViennaCLInt n, + float *x, ViennaCLInt offx, ViennaCLInt incx, + float *y, ViennaCLInt offy, ViennaCLInt incy, + float c, float s); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLHostDrot(ViennaCLBackend backend, ViennaCLInt n, + double *x, ViennaCLInt offx, ViennaCLInt incx, + double *y, ViennaCLInt offy, ViennaCLInt incy, + double c, double s); + + + +// xSCAL + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLscal(ViennaCLHostScalar alpha, ViennaCLVector x); + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLCUDASscal(ViennaCLBackend backend, ViennaCLInt n, + float alpha, + float *x, ViennaCLInt offx, ViennaCLInt incx); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLCUDADscal(ViennaCLBackend backend, ViennaCLInt n, + double alpha, + double *x, ViennaCLInt offx, ViennaCLInt incx); + +#ifdef VIENNACL_WITH_OPENCL +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLOpenCLSscal(ViennaCLBackend backend, ViennaCLInt n, + float alpha, + cl_mem x, ViennaCLInt offx, ViennaCLInt incx); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLOpenCLDscal(ViennaCLBackend backend, ViennaCLInt n, + double alpha, + cl_mem x, ViennaCLInt offx, ViennaCLInt incx); +#endif + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLHostSscal(ViennaCLBackend backend, ViennaCLInt n, + float alpha, + float *x, ViennaCLInt offx, ViennaCLInt incx); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLHostDscal(ViennaCLBackend backend, ViennaCLInt n, + double alpha, + double *x, ViennaCLInt offx, ViennaCLInt incx); + + +// xSWAP + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLswap(ViennaCLVector x, ViennaCLVector y); + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLCUDASswap(ViennaCLBackend backend, ViennaCLInt n, + float *x, ViennaCLInt offx, ViennaCLInt incx, + float *y, ViennaCLInt offy, ViennaCLInt incy); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLCUDADswap(ViennaCLBackend backend, ViennaCLInt n, + double *x, ViennaCLInt offx, ViennaCLInt incx, + double *y, ViennaCLInt offy, ViennaCLInt incy); + +#ifdef VIENNACL_WITH_OPENCL +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLOpenCLSswap(ViennaCLBackend backend, ViennaCLInt n, + cl_mem x, ViennaCLInt offx, ViennaCLInt incx, + cl_mem y, ViennaCLInt offy, ViennaCLInt incy); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLOpenCLDswap(ViennaCLBackend backend, ViennaCLInt n, + cl_mem x, ViennaCLInt offx, ViennaCLInt incx, + cl_mem y, ViennaCLInt offy, ViennaCLInt incy); +#endif + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLHostSswap(ViennaCLBackend backend, ViennaCLInt n, + float *x, ViennaCLInt offx, ViennaCLInt incx, + float *y, ViennaCLInt offy, ViennaCLInt incy); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLHostDswap(ViennaCLBackend backend, ViennaCLInt n, + double *x, ViennaCLInt offx, ViennaCLInt incx, + double *y, ViennaCLInt offy, ViennaCLInt incy); + + + +/******************** BLAS Level 2 ***********************/ + +// xGEMV: y <- alpha * Ax + beta * y + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLgemv(ViennaCLHostScalar alpha, ViennaCLMatrix A, ViennaCLVector x, ViennaCLHostScalar beta, ViennaCLVector y); + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLCUDASgemv(ViennaCLBackend backend, + ViennaCLOrder order, ViennaCLTranspose transA, + ViennaCLInt m, ViennaCLInt n, float alpha, float *A, ViennaCLInt offA_row, ViennaCLInt offA_col, ViennaCLInt incA_row, ViennaCLInt incA_col, ViennaCLInt lda, + float *x, ViennaCLInt offx, ViennaCLInt incx, + float beta, + float *y, ViennaCLInt offy, ViennaCLInt incy); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLCUDADgemv(ViennaCLBackend backend, + ViennaCLOrder order, ViennaCLTranspose transA, + ViennaCLInt m, ViennaCLInt n, double alpha, double *A, ViennaCLInt offA_row, ViennaCLInt offA_col, ViennaCLInt incA_row, ViennaCLInt incA_col, ViennaCLInt lda, + double *x, ViennaCLInt offx, ViennaCLInt incx, + double beta, + double *y, ViennaCLInt offy, ViennaCLInt incy); + +#ifdef VIENNACL_WITH_OPENCL +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLOpenCLSgemv(ViennaCLBackend backend, + ViennaCLOrder order, ViennaCLTranspose transA, + ViennaCLInt m, ViennaCLInt n, float alpha, cl_mem A, ViennaCLInt offA_row, ViennaCLInt offA_col, ViennaCLInt incA_row, ViennaCLInt incA_col, ViennaCLInt lda, + cl_mem x, ViennaCLInt offx, ViennaCLInt incx, + float beta, + cl_mem y, ViennaCLInt offy, ViennaCLInt incy); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLOpenCLDgemv(ViennaCLBackend backend, + ViennaCLOrder order, ViennaCLTranspose transA, + ViennaCLInt m, ViennaCLInt n, double alpha, cl_mem A, ViennaCLInt offA_row, ViennaCLInt offA_col, ViennaCLInt incA_row, ViennaCLInt incA_col, ViennaCLInt lda, + cl_mem x, ViennaCLInt offx, ViennaCLInt incx, + double beta, + cl_mem y, ViennaCLInt offy, ViennaCLInt incy); +#endif + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLHostSgemv(ViennaCLBackend backend, + ViennaCLOrder order, ViennaCLTranspose transA, + ViennaCLInt m, ViennaCLInt n, float alpha, float *A, ViennaCLInt offA_row, ViennaCLInt offA_col, ViennaCLInt incA_row, ViennaCLInt incA_col, ViennaCLInt lda, + float *x, ViennaCLInt offx, ViennaCLInt incx, + float beta, + float *y, ViennaCLInt offy, ViennaCLInt incy); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLHostDgemv(ViennaCLBackend backend, + ViennaCLOrder order, ViennaCLTranspose transA, + ViennaCLInt m, ViennaCLInt n, double alpha, double *A, ViennaCLInt offA_row, ViennaCLInt offA_col, ViennaCLInt incA_row, ViennaCLInt incA_col, ViennaCLInt lda, + double *x, ViennaCLInt offx, ViennaCLInt incx, + double beta, + double *y, ViennaCLInt offy, ViennaCLInt incy); + +// xTRSV: Ax <- x + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLtrsv(ViennaCLMatrix A, ViennaCLVector x, ViennaCLUplo uplo); + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLCUDAStrsv(ViennaCLBackend backend, + ViennaCLUplo uplo, ViennaCLOrder order, ViennaCLTranspose transA, ViennaCLDiag diag, + ViennaCLInt n, float *A, ViennaCLInt offA_row, ViennaCLInt offA_col, ViennaCLInt incA_row, ViennaCLInt incA_col, ViennaCLInt lda, + float *x, ViennaCLInt offx, ViennaCLInt incx); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLCUDADtrsv(ViennaCLBackend backend, + ViennaCLUplo uplo, ViennaCLOrder order, ViennaCLTranspose transA, ViennaCLDiag diag, + ViennaCLInt n, double *A, ViennaCLInt offA_row, ViennaCLInt offA_col, ViennaCLInt incA_row, ViennaCLInt incA_col, ViennaCLInt lda, + double *x, ViennaCLInt offx, ViennaCLInt incx); + +#ifdef VIENNACL_WITH_OPENCL +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLOpenCLStrsv(ViennaCLBackend backend, + ViennaCLUplo uplo, ViennaCLOrder order, ViennaCLTranspose transA, ViennaCLDiag diag, + ViennaCLInt n, cl_mem A, ViennaCLInt offA_row, ViennaCLInt offA_col, ViennaCLInt incA_row, ViennaCLInt incA_col, ViennaCLInt lda, + cl_mem x, ViennaCLInt offx, ViennaCLInt incx); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLOpenCLDtrsv(ViennaCLBackend backend, + ViennaCLUplo uplo, ViennaCLOrder order, ViennaCLTranspose transA, ViennaCLDiag diag, + ViennaCLInt n, cl_mem A, ViennaCLInt offA_row, ViennaCLInt offA_col, ViennaCLInt incA_row, ViennaCLInt incA_col, ViennaCLInt lda, + cl_mem x, ViennaCLInt offx, ViennaCLInt incx); +#endif + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLHostStrsv(ViennaCLBackend backend, + ViennaCLUplo uplo, ViennaCLOrder order, ViennaCLTranspose transA, ViennaCLDiag diag, + ViennaCLInt n, float *A, ViennaCLInt offA_row, ViennaCLInt offA_col, ViennaCLInt incA_row, ViennaCLInt incA_col, ViennaCLInt lda, + float *x, ViennaCLInt offx, ViennaCLInt incx); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLHostDtrsv(ViennaCLBackend backend, + ViennaCLUplo uplo, ViennaCLOrder order, ViennaCLTranspose transA, ViennaCLDiag diag, + ViennaCLInt n, double *A, ViennaCLInt offA_row, ViennaCLInt offA_col, ViennaCLInt incA_row, ViennaCLInt incA_col, ViennaCLInt lda, + double *x, ViennaCLInt offx, ViennaCLInt incx); + + +// xGER: A <- alpha * x * y + A + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLger(ViennaCLHostScalar alpha, ViennaCLVector x, ViennaCLVector y, ViennaCLMatrix A); + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLCUDASger(ViennaCLBackend backend, + ViennaCLOrder order, + ViennaCLInt m, ViennaCLInt n, + float alpha, + float *x, ViennaCLInt offx, ViennaCLInt incx, + float *y, ViennaCLInt offy, ViennaCLInt incy, + float *A, ViennaCLInt offA_row, ViennaCLInt offA_col, ViennaCLInt incA_row, ViennaCLInt incA_col, ViennaCLInt lda); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLCUDADger(ViennaCLBackend backend, + ViennaCLOrder order, + ViennaCLInt m, ViennaCLInt n, + double alpha, + double *x, ViennaCLInt offx, ViennaCLInt incx, + double *y, ViennaCLInt offy, ViennaCLInt incy, + double *A, ViennaCLInt offA_row, ViennaCLInt offA_col, ViennaCLInt incA_row, ViennaCLInt incA_col, ViennaCLInt lda); + +#ifdef VIENNACL_WITH_OPENCL +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLOpenCLSger(ViennaCLBackend backend, + ViennaCLOrder order, + ViennaCLInt m, ViennaCLInt n, + float alpha, + cl_mem x, ViennaCLInt offx, ViennaCLInt incx, + cl_mem y, ViennaCLInt offy, ViennaCLInt incy, + cl_mem A, ViennaCLInt offA_row, ViennaCLInt offA_col, ViennaCLInt incA_row, ViennaCLInt incA_col, ViennaCLInt lda); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLOpenCLDger(ViennaCLBackend backend, + ViennaCLOrder order, + ViennaCLInt m, ViennaCLInt n, + double alpha, + cl_mem x, ViennaCLInt offx, ViennaCLInt incx, + cl_mem y, ViennaCLInt offy, ViennaCLInt incy, + cl_mem A, ViennaCLInt offA_row, ViennaCLInt offA_col, ViennaCLInt incA_row, ViennaCLInt incA_col, ViennaCLInt lda); +#endif + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLHostSger(ViennaCLBackend backend, + ViennaCLOrder order, + ViennaCLInt m, ViennaCLInt n, + float alpha, + float *x, ViennaCLInt offx, ViennaCLInt incx, + float *y, ViennaCLInt offy, ViennaCLInt incy, + float *A, ViennaCLInt offA_row, ViennaCLInt offA_col, ViennaCLInt incA_row, ViennaCLInt incA_col, ViennaCLInt lda); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLHostDger(ViennaCLBackend backend, + ViennaCLOrder order, + ViennaCLInt m, ViennaCLInt n, + double alpha, + double *x, ViennaCLInt offx, ViennaCLInt incx, + double *y, ViennaCLInt offy, ViennaCLInt incy, + double *A, ViennaCLInt offA_row, ViennaCLInt offA_col, ViennaCLInt incA_row, ViennaCLInt incA_col, ViennaCLInt lda); + + + +/******************** BLAS Level 3 ***********************/ + +// xGEMM: C <- alpha * AB + beta * C + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLgemm(ViennaCLHostScalar alpha, ViennaCLMatrix A, ViennaCLMatrix B, ViennaCLHostScalar beta, ViennaCLMatrix C); + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLCUDASgemm(ViennaCLBackend backend, + ViennaCLOrder orderA, ViennaCLTranspose transA, + ViennaCLOrder orderB, ViennaCLTranspose transB, + ViennaCLOrder orderC, + ViennaCLInt m, ViennaCLInt n, ViennaCLInt k, + float alpha, + float *A, ViennaCLInt offA_row, ViennaCLInt offA_col, ViennaCLInt incA_row, ViennaCLInt incA_col, ViennaCLInt lda, + float *B, ViennaCLInt offB_row, ViennaCLInt offB_col, ViennaCLInt incB_row, ViennaCLInt incB_col, ViennaCLInt ldb, + float beta, + float *C, ViennaCLInt offC_row, ViennaCLInt offC_col, ViennaCLInt incC_row, ViennaCLInt incC_col, ViennaCLInt ldc); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLCUDADgemm(ViennaCLBackend backend, + ViennaCLOrder orderA, ViennaCLTranspose transA, + ViennaCLOrder orderB, ViennaCLTranspose transB, + ViennaCLOrder orderC, + ViennaCLInt m, ViennaCLInt n, ViennaCLInt k, + double alpha, + double *A, ViennaCLInt offA_row, ViennaCLInt offA_col, ViennaCLInt incA_row, ViennaCLInt incA_col, ViennaCLInt lda, + double *B, ViennaCLInt offB_row, ViennaCLInt offB_col, ViennaCLInt incB_row, ViennaCLInt incB_col, ViennaCLInt ldb, + double beta, + double *C, ViennaCLInt offC_row, ViennaCLInt offC_col, ViennaCLInt incC_row, ViennaCLInt incC_col, ViennaCLInt ldc); + +#ifdef VIENNACL_WITH_OPENCL +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLOpenCLSgemm(ViennaCLBackend backend, + ViennaCLOrder orderA, ViennaCLTranspose transA, + ViennaCLOrder orderB, ViennaCLTranspose transB, + ViennaCLOrder orderC, + ViennaCLInt m, ViennaCLInt n, ViennaCLInt k, + float alpha, + cl_mem A, ViennaCLInt offA_row, ViennaCLInt offA_col, ViennaCLInt incA_row, ViennaCLInt incA_col, ViennaCLInt lda, + cl_mem B, ViennaCLInt offB_row, ViennaCLInt offB_col, ViennaCLInt incB_row, ViennaCLInt incB_col, ViennaCLInt ldb, + float beta, + cl_mem C, ViennaCLInt offC_row, ViennaCLInt offC_col, ViennaCLInt incC_row, ViennaCLInt incC_col, ViennaCLInt ldc); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLOpenCLDgemm(ViennaCLBackend backend, + ViennaCLOrder orderA, ViennaCLTranspose transA, + ViennaCLOrder orderB, ViennaCLTranspose transB, + ViennaCLOrder orderC, + ViennaCLInt m, ViennaCLInt n, ViennaCLInt k, + double alpha, + cl_mem A, ViennaCLInt offA_row, ViennaCLInt offA_col, ViennaCLInt incA_row, ViennaCLInt incA_col, ViennaCLInt lda, + cl_mem B, ViennaCLInt offB_row, ViennaCLInt offB_col, ViennaCLInt incB_row, ViennaCLInt incB_col, ViennaCLInt ldb, + double beta, + cl_mem C, ViennaCLInt offC_row, ViennaCLInt offC_col, ViennaCLInt incC_row, ViennaCLInt incC_col, ViennaCLInt ldc); +#endif + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLHostSgemm(ViennaCLBackend backend, + ViennaCLOrder orderA, ViennaCLTranspose transA, + ViennaCLOrder orderB, ViennaCLTranspose transB, + ViennaCLOrder orderC, + ViennaCLInt m, ViennaCLInt n, ViennaCLInt k, + float alpha, + float *A, ViennaCLInt offA_row, ViennaCLInt offA_col, ViennaCLInt incA_row, ViennaCLInt incA_col, ViennaCLInt lda, + float *B, ViennaCLInt offB_row, ViennaCLInt offB_col, ViennaCLInt incB_row, ViennaCLInt incB_col, ViennaCLInt ldb, + float beta, + float *C, ViennaCLInt offC_row, ViennaCLInt offC_col, ViennaCLInt incC_row, ViennaCLInt incC_col, ViennaCLInt ldc); +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLHostDgemm(ViennaCLBackend backend, + ViennaCLOrder orderA, ViennaCLTranspose transA, + ViennaCLOrder orderB, ViennaCLTranspose transB, + ViennaCLOrder orderC, + ViennaCLInt m, ViennaCLInt n, ViennaCLInt k, + double alpha, + double *A, ViennaCLInt offA_row, ViennaCLInt offA_col, ViennaCLInt incA_row, ViennaCLInt incA_col, ViennaCLInt lda, + double *B, ViennaCLInt offB_row, ViennaCLInt offB_col, ViennaCLInt incB_row, ViennaCLInt incB_col, ViennaCLInt ldb, + double beta, + double *C, ViennaCLInt offC_row, ViennaCLInt offC_col, ViennaCLInt incC_row, ViennaCLInt incC_col, ViennaCLInt ldc); + +// xTRSM: Triangular solves with multiple right hand sides + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLtrsm(ViennaCLMatrix A, ViennaCLUplo uplo, ViennaCLDiag diag, ViennaCLMatrix B); + +#ifdef __cplusplus +} +#endif + + +#endif http://git-wip-us.apache.org/repos/asf/mahout/blob/f7c1f802/native-viennaCL/src/main/cpp/libviennacl/src/backend.cpp ---------------------------------------------------------------------- diff --git a/native-viennaCL/src/main/cpp/libviennacl/src/backend.cpp b/native-viennaCL/src/main/cpp/libviennacl/src/backend.cpp new file mode 100644 index 0000000..c9f6bf4 --- /dev/null +++ b/native-viennaCL/src/main/cpp/libviennacl/src/backend.cpp @@ -0,0 +1,46 @@ +/* ========================================================================= + Copyright (c) 2010-2014, Institute for Microelectronics, + Institute for Analysis and Scientific Computing, + TU Wien. + Portions of this software are copyright by UChicago Argonne, LLC. + + ----------------- + ViennaCL - The Vienna Computing Library + ----------------- + + Project Head: Karl Rupp [email protected] + + (A list of authors and contributors can be found in the PDF manual) + + License: MIT (X11), see file LICENSE in the base directory +============================================================================= */ + +// include necessary system headers +#include <iostream> + +#include "viennacl.hpp" +#include "viennacl_private.hpp" + + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLBackendCreate(ViennaCLBackend * backend) +{ + *backend = new ViennaCLBackend_impl(); + + return ViennaCLSuccess; +} + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLBackendSetOpenCLContextID(ViennaCLBackend backend, ViennaCLInt context_id) +{ + backend->opencl_backend.context_id = context_id; + + return ViennaCLSuccess; +} + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLBackendDestroy(ViennaCLBackend * backend) +{ + delete *backend; + *backend = NULL; + + return ViennaCLSuccess; +} + http://git-wip-us.apache.org/repos/asf/mahout/blob/f7c1f802/native-viennaCL/src/main/cpp/libviennacl/src/backend.cu ---------------------------------------------------------------------- diff --git a/native-viennaCL/src/main/cpp/libviennacl/src/backend.cu b/native-viennaCL/src/main/cpp/libviennacl/src/backend.cu new file mode 100644 index 0000000..c9f6bf4 --- /dev/null +++ b/native-viennaCL/src/main/cpp/libviennacl/src/backend.cu @@ -0,0 +1,46 @@ +/* ========================================================================= + Copyright (c) 2010-2014, Institute for Microelectronics, + Institute for Analysis and Scientific Computing, + TU Wien. + Portions of this software are copyright by UChicago Argonne, LLC. + + ----------------- + ViennaCL - The Vienna Computing Library + ----------------- + + Project Head: Karl Rupp [email protected] + + (A list of authors and contributors can be found in the PDF manual) + + License: MIT (X11), see file LICENSE in the base directory +============================================================================= */ + +// include necessary system headers +#include <iostream> + +#include "viennacl.hpp" +#include "viennacl_private.hpp" + + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLBackendCreate(ViennaCLBackend * backend) +{ + *backend = new ViennaCLBackend_impl(); + + return ViennaCLSuccess; +} + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLBackendSetOpenCLContextID(ViennaCLBackend backend, ViennaCLInt context_id) +{ + backend->opencl_backend.context_id = context_id; + + return ViennaCLSuccess; +} + +VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLBackendDestroy(ViennaCLBackend * backend) +{ + delete *backend; + *backend = NULL; + + return ViennaCLSuccess; +} +
