Zoltan2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
Zoltan2_BasicKokkosIdentifierAdapter.hpp
Go to the documentation of this file.
1 // @HEADER
2 //
3 // ***********************************************************************
4 //
5 // Zoltan2: A package of combinatorial algorithms for scientific computing
6 // Copyright 2012 Sandia Corporation
7 //
8 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9 // the U.S. Government retains certain rights in this software.
10 //
11 // Redistribution and use in source and binary forms, with or without
12 // modification, are permitted provided that the following conditions are
13 // met:
14 //
15 // 1. Redistributions of source code must retain the above copyright
16 // notice, this list of conditions and the following disclaimer.
17 //
18 // 2. Redistributions in binary form must reproduce the above copyright
19 // notice, this list of conditions and the following disclaimer in the
20 // documentation and/or other materials provided with the distribution.
21 //
22 // 3. Neither the name of the Corporation nor the names of the
23 // contributors may be used to endorse or promote products derived from
24 // this software without specific prior written permission.
25 //
26 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37 //
38 // Questions? Contact Karen Devine (kddevin@sandia.gov)
39 // Erik Boman (egboman@sandia.gov)
40 // Siva Rajamanickam (srajama@sandia.gov)
41 //
42 // ***********************************************************************
43 //
44 // @HEADER
45 
50 #ifndef _ZOLTAN2_BASICKOKKOSIDENTIFIERADAPTER_HPP_
51 #define _ZOLTAN2_BASICKOKKOSIDENTIFIERADAPTER_HPP_
52 
53 #include <Kokkos_Core.hpp>
55 #include <Zoltan2_StridedData.hpp>
56 
57 using Kokkos::ALL;
58 
59 namespace Zoltan2 {
60 
83 template <typename User>
85 
86 public:
88  typedef typename InputTraits<User>::lno_t lno_t;
89  typedef typename InputTraits<User>::gno_t gno_t;
92  typedef typename node_t::device_type device_t;
93  typedef User user_t;
94 
109  Kokkos::View<gno_t*, device_t> &ids,
110  Kokkos::View<scalar_t**, device_t> &weights);
111 
113  // The Adapter interface.
115 
116  size_t getLocalNumIDs() const override {
117  return idsView_.extent(0);
118  }
119 
120  void getIDsView(const gno_t *&ids) const override {
121  auto kokkosIds = idsView_.view_host();
122  ids = kokkosIds.data();
123  }
124 
125  void getIDsKokkosView(Kokkos::View<const gno_t *, device_t> &ids) const override {
126  ids = idsView_.view_device();
127  }
128 
129  int getNumWeightsPerID() const override {
130  return weightsView_.extent(1);
131  }
132 
133  void getWeightsView(const scalar_t *&wgt, int &stride,
134  int idx = 0) const override
135  {
136  auto h_wgts_2d = weightsView_.view_host();
137 
138  wgt = Kokkos::subview(h_wgts_2d, Kokkos::ALL, idx).data();
139  stride = 1;
140  }
141 
142  void getWeightsKokkosView(Kokkos::View<scalar_t **, device_t> &wgts) const override {
143  wgts = weightsView_.template view<device_t>();
144  }
145 
146 private:
147  Kokkos::DualView<gno_t *, device_t> idsView_;
148  Kokkos::DualView<scalar_t **, device_t> weightsView_;
149 };
150 
152 // Definitions
154 
155 template <typename User>
157  Kokkos::View<gno_t *, device_t> &ids,
158  Kokkos::View<scalar_t **, device_t> &weights)
159 {
160  idsView_ = Kokkos::DualView<gno_t *, device_t>("idsView_", ids.extent(0));
161  Kokkos::deep_copy(idsView_.h_view, ids);
162 
163  weightsView_ = Kokkos::DualView<scalar_t **, device_t>("weightsView_",
164  weights.extent(0),
165  weights.extent(1));
166  Kokkos::deep_copy(weightsView_.h_view, weights);
167 
168  weightsView_.modify_host();
169  weightsView_.sync_host();
170  weightsView_.template sync<device_t>();
171 
172  idsView_.modify_host();
173  idsView_.sync_host();
174  idsView_.template sync<device_t>();
175 }
176 
177 } //namespace Zoltan2
178 
179 #endif
void getIDsKokkosView(Kokkos::View< const gno_t *, device_t > &ids) const override
IdentifierAdapter defines the interface for identifiers.
typename InputTraits< User >::scalar_t scalar_t
static ArrayRCP< ArrayRCP< zscalar_t > > weights
default_part_t part_t
The data type to represent part numbers.
Defines the IdentifierAdapter interface.
int getNumWeightsPerID() const override
Returns the number of weights per object. Number of weights per object should be zero or greater...
This class represents a collection of global Identifiers and their associated weights, if any.
typename InputTraits< User >::gno_t gno_t
default_lno_t lno_t
The ordinal type (e.g., int, long, int64_t) that represents local counts and local indices...
default_gno_t gno_t
The ordinal type (e.g., int, long, int64_t) that can represent global counts and identifiers.
BasicKokkosIdentifierAdapter(Kokkos::View< gno_t *, device_t > &ids, Kokkos::View< scalar_t **, device_t > &weights)
Constructor.
default_node_t node_t
The Kokkos node type. This is only meaningful for users of Tpetra objects.
void getWeightsKokkosView(Kokkos::View< scalar_t **, device_t > &wgts) const override
Provide kokkos view of weights.
void getWeightsView(const scalar_t *&wgt, int &stride, int idx=0) const override
Provide pointer to a weight array with stride.
size_t getLocalNumIDs() const override
Returns the number of objects on this process.
default_scalar_t scalar_t
The data type for weights and coordinates.
void getIDsView(const gno_t *&ids) const override
Provide a pointer to this process&#39; identifiers.
This file defines the StridedData class.