ViennaCL - The Vienna Computing Library: viennacl/linalg/misc_operations.hpp Source File

ViennaCL - The Vienna Computing Library 1.7.1 Free open-source GPU-accelerated linear algebra and solver library. |

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
misc_operations.hpp
Go to the documentation of this file.
1 #ifndef VIENNACL_LINALG_MISC_OPERATIONS_HPP_
2 #define VIENNACL_LINALG_MISC_OPERATIONS_HPP_
3
4 /* =========================================================================
5 Copyright (c) 2010-2016, Institute for Microelectronics,
6 Institute for Analysis and Scientific Computing,
7 TU Wien.
8 Portions of this software are copyright by UChicago Argonne, LLC.
9
10 -----------------
11 ViennaCL - The Vienna Computing Library
12 -----------------
13
14 Project Head: Karl Rupp rupp@iue.tuwien.ac.at
15
16 (A list of authors and contributors can be found in the manual)
17
18 License: MIT (X11), see file LICENSE in the base directory
19 ============================================================================= */
20
25 #include "viennacl/forwards.h"
26 #include "viennacl/scalar.hpp"
27 #include "viennacl/vector.hpp"
28 #include "viennacl/matrix.hpp"
29 #include "viennacl/tools/tools.hpp"
30 #include "viennacl/linalg/host_based/misc_operations.hpp"
31
32 #ifdef VIENNACL_WITH_OPENCL
33 #include "viennacl/linalg/opencl/misc_operations.hpp"
34 #endif
35
36 #ifdef VIENNACL_WITH_CUDA
37 #include "viennacl/linalg/cuda/misc_operations.hpp"
38 #endif
39
40 namespace viennacl
41 {
42 namespace linalg
43 {
44
45 namespace detail
46 {
47
48 template<typename ScalarType>
49 void level_scheduling_substitute(vector<ScalarType> & vec,
50 viennacl::backend::mem_handle const & row_index_array,
51 viennacl::backend::mem_handle const & row_buffer,
52 viennacl::backend::mem_handle const & col_buffer,
53 viennacl::backend::mem_handle const & element_buffer,
54 vcl_size_t num_rows
55 )
56 {
57 assert( viennacl::traits::handle(vec).get_active_handle_id() == row_index_array.get_active_handle_id() && bool("Incompatible memory domains"));
58 assert( viennacl::traits::handle(vec).get_active_handle_id() == row_buffer.get_active_handle_id() && bool("Incompatible memory domains"));
59 assert( viennacl::traits::handle(vec).get_active_handle_id() == col_buffer.get_active_handle_id() && bool("Incompatible memory domains"));
60 assert( viennacl::traits::handle(vec).get_active_handle_id() == element_buffer.get_active_handle_id() && bool("Incompatible memory domains"));
61
62 switch (viennacl::traits::handle(vec).get_active_handle_id())
63 {
64 case viennacl::MAIN_MEMORY:
65 viennacl::linalg::host_based::detail::level_scheduling_substitute(vec, row_index_array, row_buffer, col_buffer, element_buffer, num_rows);
66 break;
67 #ifdef VIENNACL_WITH_OPENCL
68 case viennacl::OPENCL_MEMORY:
69 viennacl::linalg::opencl::detail::level_scheduling_substitute(vec, row_index_array, row_buffer, col_buffer, element_buffer, num_rows);
70 break;
71 #endif
72 #ifdef VIENNACL_WITH_CUDA
73 case viennacl::CUDA_MEMORY:
74 viennacl::linalg::cuda::detail::level_scheduling_substitute(vec, row_index_array, row_buffer, col_buffer, element_buffer, num_rows);
75 break;
76 #endif
77 case viennacl::MEMORY_NOT_INITIALIZED:
78 throw memory_exception("not initialised!");
79 default:
80 throw memory_exception("not implemented");
81 }
82 }
83
84
85
86
87 } //namespace detail
88
89
90 } //namespace linalg
91 } //namespace viennacl
92
93
94 #endif
viennacl::memory_exception
Exception class in case of memory errors.
Definition: forwards.h:572
matrix.hpp
Implementation of the dense matrix class.
tools.hpp
Various little tools used here and there in ViennaCL.
viennacl::OPENCL_MEMORY
Definition: forwards.h:349
forwards.h
This file provides the forward declarations for the main types used within ViennaCL.
viennacl::linalg::detail::level_scheduling_substitute
void level_scheduling_substitute(viennacl::vector< NumericT > &vec, std::list< viennacl::backend::mem_handle > const &row_index_arrays, std::list< viennacl::backend::mem_handle > const &row_buffers, std::list< viennacl::backend::mem_handle > const &col_buffers, std::list< viennacl::backend::mem_handle > const &element_buffers, std::list< vcl_size_t > const &row_elimination_num_list)
Definition: common.hpp:224
misc_operations.hpp
Implementations of miscellaneous operations on the CPU using a single thread or OpenMP.
viennacl::MEMORY_NOT_INITIALIZED
Definition: forwards.h:347
viennacl::CUDA_MEMORY
Definition: forwards.h:350
misc_operations.hpp
Implementations of operations using compressed_matrix and OpenCL.
viennacl::vcl_size_t
std::size_t vcl_size_t
Definition: forwards.h:75
viennacl::linalg::opencl::detail::level_scheduling_substitute
void level_scheduling_substitute(vector< NumericT > &x, viennacl::backend::mem_handle const &row_index_array, viennacl::backend::mem_handle const &row_buffer, viennacl::backend::mem_handle const &col_buffer, viennacl::backend::mem_handle const &element_buffer, vcl_size_t num_rows)
Definition: misc_operations.hpp:45
viennacl::vector< ScalarType >
viennacl::MAIN_MEMORY
Definition: forwards.h:348
vector.hpp
The vector type with operator-overloads and proxy classes is defined here. Linear algebra operations ...
viennacl::linalg::cuda::detail::level_scheduling_substitute
void level_scheduling_substitute(vector< NumericT > &vec, viennacl::backend::mem_handle const &row_index_array, viennacl::backend::mem_handle const &row_buffer, viennacl::backend::mem_handle const &col_buffer, viennacl::backend::mem_handle const &element_buffer, vcl_size_t num_rows)
Definition: misc_operations.hpp:68
viennacl::backend::mem_handle
Main abstraction class for multiple memory domains. Represents a buffer in either main RAM...
Definition: mem_handle.hpp:89
viennacl::traits::handle
viennacl::backend::mem_handle & handle(T &obj)
Returns the generic memory handle of an object. Non-const version.
Definition: handle.hpp:41
viennacl::linalg::host_based::detail::level_scheduling_substitute
void level_scheduling_substitute(vector< NumericT > &vec, viennacl::backend::mem_handle const &row_index_array, viennacl::backend::mem_handle const &row_buffer, viennacl::backend::mem_handle const &col_buffer, viennacl::backend::mem_handle const &element_buffer, vcl_size_t num_rows)
Definition: misc_operations.hpp:42
misc_operations.hpp
Implementations of miscellaneous operations using CUDA.
scalar.hpp
Implementation of the ViennaCL scalar class.
viennacl::backend::mem_handle::get_active_handle_id
memory_types get_active_handle_id() const
Returns an ID for the currently active memory buffer. Other memory buffers might contain old or no da...
Definition: mem_handle.hpp:118