(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;
+}
+

Reply via email to