Zoltan2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
BasicKokkosIdentifierInput.cpp
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 //
46 // Basic testing of Zoltan2::BasicKokkosIdentifierAdapter
47 
48 #include <Kokkos_Core.hpp>
49 #include <Teuchos_DefaultComm.hpp>
50 #include <Teuchos_RCP.hpp>
51 #include <Teuchos_CommHelpers.hpp>
53 #include <Zoltan2_TestHelpers.hpp>
54 
55 int main(int narg, char *arg[]) {
56 
57  Tpetra::ScopeGuard tscope(&narg, &arg);
58  Teuchos::RCP<const Teuchos::Comm<int> > comm = Tpetra::getDefaultComm();
59 
61 
62  int rank = comm->getRank();
63  int nprocs = comm->getSize();
64  int fail = 0, gfail = 0;
65 
66  // Create global identifiers with weights
67  zlno_t numLocalIds = 10;
68  const int nWeights = 2;
69 
70  Kokkos::View<zgno_t *, typename znode_t::device_type>
71  myIds(Kokkos::ViewAllocateWithoutInitializing("myIds"), numLocalIds);
72  zgno_t myFirstId = rank * numLocalIds * numLocalIds;
73  Kokkos::View<zscalar_t **, typename znode_t::device_type>
74  weights(Kokkos::ViewAllocateWithoutInitializing("weights"),
75  numLocalIds, nWeights);
76 
77  Kokkos::parallel_for(
78  Kokkos::RangePolicy<typename znode_t::execution_space,
79  zlno_t> (0, numLocalIds), KOKKOS_LAMBDA (zlno_t i) {
80  myIds(i) = zgno_t(myFirstId + i);
81  weights(i, 0) = 1.0;
82  weights(i, 1) = (nprocs - rank) / (i + 1);
83  });
84 
86 
87  if (!fail && ia.getLocalNumIDs() != size_t(numLocalIds)) {
88  fail = 4;
89  }
90  if (!fail && ia.getNumWeightsPerID() != nWeights) {
91  fail = 5;
92  }
93 
94  Kokkos::View<const zgno_t *, typename znode_t::device_type> globalIdsIn;
95  Kokkos::View<zscalar_t **, typename znode_t::device_type> weightsIn;
96 
97  ia.getIDsKokkosView(globalIdsIn);
98 
99  ia.getWeightsKokkosView(weightsIn);
100 
101  auto host_globalIdsIn = Kokkos::create_mirror_view(globalIdsIn);
102  Kokkos::deep_copy(host_globalIdsIn, globalIdsIn);
103  auto host_weightsIn = Kokkos::create_mirror_view(weightsIn);
104  Kokkos::deep_copy(host_weightsIn, weightsIn);
105  auto host_weights = Kokkos::create_mirror_view(weights);
106  Kokkos::deep_copy(host_weights, weights);
107 
108  auto host_w0 = Kokkos::subview(host_weightsIn, Kokkos::ALL, 0);
109  auto host_w1 = Kokkos::subview(host_weightsIn, Kokkos::ALL, 1);
110 
111  for (zlno_t i = 0; !fail && i < numLocalIds; i++){
112  if (host_globalIdsIn(i) != zgno_t(myFirstId + i)) {
113  fail = 8;
114  }
115  if (!fail && host_w0(i) != 1.0) {
116  fail = 9;
117  }
118  if (!fail && host_w1(i) != host_weights(i, 1)) {
119  fail = 10;
120  }
121  }
122 
123  gfail = globalFail(*comm, fail);
124  if (gfail) {
125  printFailureCode(*comm, fail); // will exit(1)
126  }
127  if (rank == 0) {
128  std::cout << "PASS" << std::endl;
129  }
130 }
void printFailureCode(const Comm< int > &comm, int fail)
Zoltan2::BasicUserTypes< zscalar_t, zlno_t, zgno_t > userTypes_t
static ArrayRCP< ArrayRCP< zscalar_t > > weights
int main(int narg, char **arg)
Definition: coloring1.cpp:199
common code used by tests
This class represents a collection of global Identifiers and their associated weights, if any.
Defines the BasicKokkosIdentifierAdapter class.
Tpetra::Map::local_ordinal_type zlno_t
static const std::string fail
int globalFail(const Comm< int > &comm, int fail)
Tpetra::Map::global_ordinal_type zgno_t