Skip to content

Commit 7c4ff52

Browse files
authored
Merge pull request arborx#1172 from aprokop/remove_check_get_return_type
2 parents 8c047ee + 4fb3a91 commit 7c4ff52

32 files changed

+239
-281
lines changed

benchmarks/brute_force_vs_bvh/brute_force_vs_bvh_timpl.hpp

+30-23
Original file line numberDiff line numberDiff line change
@@ -23,44 +23,51 @@ using MemorySpace = ExecutionSpace::memory_space;
2323

2424
namespace ArborXBenchmark
2525
{
26-
template <int DIM, typename FloatingPoint>
26+
struct PrimitivesTag
27+
{};
28+
struct PredicatesTag
29+
{};
30+
31+
template <int DIM, typename FloatingPoint, typename Tag>
2732
struct Placeholder
2833
{
2934
int count;
3035
};
3136
} // namespace ArborXBenchmark
3237

33-
// Primitives are a set of points located at (i, i, i),
34-
// with i = 0, ..., n-1
35-
template <int DIM, typename FloatingPoint>
36-
struct ArborX::AccessTraits<ArborXBenchmark::Placeholder<DIM, FloatingPoint>,
37-
ArborX::PrimitivesTag>
38+
template <int DIM, typename FloatingPoint, typename Tag>
39+
struct ArborX::AccessTraits<
40+
ArborXBenchmark::Placeholder<DIM, FloatingPoint, Tag>>
3841
{
39-
using Primitives = ArborXBenchmark::Placeholder<DIM, FloatingPoint>;
4042
using memory_space = MemorySpace;
4143
using size_type = typename MemorySpace::size_type;
42-
static KOKKOS_FUNCTION size_type size(Primitives d) { return d.count; }
43-
static KOKKOS_FUNCTION auto get(Primitives, size_type i)
44+
45+
static KOKKOS_FUNCTION size_type
46+
size(ArborXBenchmark::Placeholder<DIM, FloatingPoint, Tag> d)
47+
{
48+
return d.count;
49+
}
50+
51+
static KOKKOS_FUNCTION auto
52+
get(ArborXBenchmark::Placeholder<DIM, FloatingPoint,
53+
ArborXBenchmark::PrimitivesTag>,
54+
size_type i)
4455
{
56+
// Primitives are a set of points located at (i, i, i),
57+
// with i = 0, ..., n-1
4558
ArborX::Point<DIM, FloatingPoint> point;
4659
for (int d = 0; d < DIM; ++d)
4760
point[d] = i;
4861
return point;
4962
}
50-
};
5163

52-
// Predicates are sphere intersections with spheres of radius i
53-
// centered at (i, i, i), with i = 0, ..., n-1
54-
template <int DIM, typename FloatingPoint>
55-
struct ArborX::AccessTraits<ArborXBenchmark::Placeholder<DIM, FloatingPoint>,
56-
ArborX::PredicatesTag>
57-
{
58-
using Predicates = ArborXBenchmark::Placeholder<DIM, FloatingPoint>;
59-
using memory_space = MemorySpace;
60-
using size_type = typename MemorySpace::size_type;
61-
static KOKKOS_FUNCTION size_type size(Predicates d) { return d.count; }
62-
static KOKKOS_FUNCTION auto get(Predicates, size_type i)
64+
static KOKKOS_FUNCTION auto
65+
get(ArborXBenchmark::Placeholder<DIM, FloatingPoint,
66+
ArborXBenchmark::PredicatesTag>,
67+
size_type i)
6368
{
69+
// Predicates are sphere intersections with spheres of radius i
70+
// centered at (i, i, i), with i = 0, ..., n-1
6471
ArborX::Point<DIM, FloatingPoint> center;
6572
for (int d = 0; d < DIM; ++d)
6673
center[d] = i;
@@ -76,8 +83,8 @@ static void run_fp(int nprimitives, int nqueries, int nrepeats)
7683
{
7784
ExecutionSpace space{};
7885

79-
Placeholder<DIM, FloatingPoint> primitives{nprimitives};
80-
Placeholder<DIM, FloatingPoint> predicates{nqueries};
86+
Placeholder<DIM, FloatingPoint, PrimitivesTag> primitives{nprimitives};
87+
Placeholder<DIM, FloatingPoint, PredicatesTag> predicates{nqueries};
8188
using Point = ArborX::Point<DIM, FloatingPoint>;
8289

8390
for (int i = 0; i < nrepeats; i++)

benchmarks/bvh_driver/benchmark_registration.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ struct Iota
4141
};
4242

4343
template <typename MemorySpace>
44-
struct ArborX::AccessTraits<Iota<MemorySpace>, ArborX::PrimitivesTag>
44+
struct ArborX::AccessTraits<Iota<MemorySpace>>
4545
{
4646
using Self = Iota<MemorySpace>;
4747

benchmarks/dbscan/ArborX_DBSCANVerification.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ bool verifyDBSCAN(ExecutionSpace exec_space, Primitives const &primitives,
294294

295295
static_assert(Kokkos::is_view<LabelsView>{});
296296

297-
using Points = Details::AccessValues<Primitives, PrimitivesTag>;
297+
using Points = Details::AccessValues<Primitives>;
298298
using MemorySpace = typename Points::memory_space;
299299

300300
static_assert(std::is_same<typename LabelsView::value_type, int>{});

benchmarks/triangulated_surface_distance/triangulated_surface_distance.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ struct Triangles
3535
};
3636

3737
template <typename MemorySpace>
38-
class ArborX::AccessTraits<Triangles<MemorySpace>, ArborX::PrimitivesTag>
38+
class ArborX::AccessTraits<Triangles<MemorySpace>>
3939
{
4040
using Self = Triangles<MemorySpace>;
4141

examples/access_traits/example_cuda_access_traits.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ struct Spheres
3535
};
3636

3737
template <>
38-
struct ArborX::AccessTraits<PointCloud, ArborX::PrimitivesTag>
38+
struct ArborX::AccessTraits<PointCloud>
3939
{
4040
static KOKKOS_FUNCTION std::size_t size(PointCloud const &cloud)
4141
{
@@ -49,7 +49,7 @@ struct ArborX::AccessTraits<PointCloud, ArborX::PrimitivesTag>
4949
};
5050

5151
template <>
52-
struct ArborX::AccessTraits<Spheres, ArborX::PredicatesTag>
52+
struct ArborX::AccessTraits<Spheres>
5353
{
5454
static KOKKOS_FUNCTION std::size_t size(Spheres const &d) { return d.N; }
5555
static KOKKOS_FUNCTION auto get(Spheres const &d, std::size_t i)

examples/access_traits/example_host_access_traits.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717
#include <random>
1818
#include <vector>
1919

20-
template <typename T, typename Tag>
21-
struct ArborX::AccessTraits<std::vector<T>, Tag>
20+
template <typename T>
21+
struct ArborX::AccessTraits<std::vector<T>>
2222
{
2323
static std::size_t size(std::vector<T> const &v) { return v.size(); }
2424
static T const &get(std::vector<T> const &v, std::size_t i) { return v[i]; }

examples/brute_force/example_brute_force.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ struct Iota
3232
};
3333

3434
template <typename MemorySpace>
35-
struct ArborX::AccessTraits<Iota<MemorySpace>, ArborX::PrimitivesTag>
35+
struct ArborX::AccessTraits<Iota<MemorySpace>>
3636
{
3737
using Self = Iota<MemorySpace>;
3838

@@ -54,7 +54,7 @@ struct DummyIndexableGetter
5454
};
5555

5656
template <>
57-
struct ArborX::AccessTraits<Dummy, ArborX::PredicatesTag>
57+
struct ArborX::AccessTraits<Dummy>
5858
{
5959
using memory_space = MemorySpace;
6060
using size_type = typename MemorySpace::size_type;

examples/callback/example_callback.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ struct NearestToOrigin
2929
};
3030

3131
template <>
32-
struct ArborX::AccessTraits<FirstOctant, ArborX::PredicatesTag>
32+
struct ArborX::AccessTraits<FirstOctant>
3333
{
3434
static KOKKOS_FUNCTION std::size_t size(FirstOctant) { return 1; }
3535
static KOKKOS_FUNCTION auto get(FirstOctant, std::size_t)
@@ -40,7 +40,7 @@ struct ArborX::AccessTraits<FirstOctant, ArborX::PredicatesTag>
4040
};
4141

4242
template <>
43-
struct ArborX::AccessTraits<NearestToOrigin, ArborX::PredicatesTag>
43+
struct ArborX::AccessTraits<NearestToOrigin>
4444
{
4545
static KOKKOS_FUNCTION std::size_t size(NearestToOrigin) { return 1; }
4646
static KOKKOS_FUNCTION auto get(NearestToOrigin d, std::size_t)

examples/molecular_dynamics/example_molecular_dynamics.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ struct Neighbors
2424
};
2525

2626
template <class MemorySpace>
27-
struct ArborX::AccessTraits<Neighbors<MemorySpace>, ArborX::PredicatesTag>
27+
struct ArborX::AccessTraits<Neighbors<MemorySpace>>
2828
{
2929
using memory_space = MemorySpace;
3030
using size_type = std::size_t;

examples/raytracing/example_raytracing.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,7 @@ struct DepositEnergy
8787
} // namespace OrderedIntersectsBased
8888

8989
template <typename MemorySpace>
90-
struct ArborX::AccessTraits<OrderedIntersectsBased::Rays<MemorySpace>,
91-
ArborX::PredicatesTag>
90+
struct ArborX::AccessTraits<OrderedIntersectsBased::Rays<MemorySpace>>
9291
{
9392
using memory_space = MemorySpace;
9493
using size_type = std::size_t;

src/cluster/ArborX_DBSCAN.hpp

+4-7
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,7 @@ struct MixedBoxPrimitives
9696

9797
template <typename Primitives, typename PermuteFilter>
9898
struct AccessTraits<Details::PrimitivesWithRadiusReorderedAndFiltered<
99-
Primitives, PermuteFilter>,
100-
PredicatesTag>
99+
Primitives, PermuteFilter>>
101100
{
102101
using memory_space = typename Primitives::memory_space;
103102
using Predicates =
@@ -125,8 +124,7 @@ struct AccessTraits<Details::PrimitivesWithRadiusReorderedAndFiltered<
125124
template <typename Points, typename MixedOffsets, typename CellIndices,
126125
typename Permutation>
127126
struct AccessTraits<
128-
Details::MixedBoxPrimitives<Points, MixedOffsets, CellIndices, Permutation>,
129-
ArborX::PrimitivesTag>
127+
Details::MixedBoxPrimitives<Points, MixedOffsets, CellIndices, Permutation>>
130128
{
131129
using Primitives = Details::MixedBoxPrimitives<Points, MixedOffsets,
132130
CellIndices, Permutation>;
@@ -200,8 +198,7 @@ struct Parameters
200198
} // namespace DBSCAN
201199

202200
template <typename ExecutionSpace, typename Primitives>
203-
Kokkos::View<int *,
204-
typename AccessTraits<Primitives, PrimitivesTag>::memory_space>
201+
Kokkos::View<int *, typename AccessTraits<Primitives>::memory_space>
205202
dbscan(ExecutionSpace const &exec_space, Primitives const &primitives,
206203
float eps, int core_min_size,
207204
DBSCAN::Parameters const &parameters = DBSCAN::Parameters())
@@ -210,7 +207,7 @@ dbscan(ExecutionSpace const &exec_space, Primitives const &primitives,
210207

211208
namespace KokkosExt = ArborX::Details::KokkosExt;
212209

213-
using Points = Details::AccessValues<Primitives, PrimitivesTag>;
210+
using Points = Details::AccessValues<Primitives>;
214211
using MemorySpace = typename Points::memory_space;
215212

216213
static_assert(

src/cluster/ArborX_MinimumSpanningTree.hpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,13 @@ struct MinimumSpanningTree
4343
int k = 1)
4444
: edges(Kokkos::view_alloc(space, Kokkos::WithoutInitializing,
4545
"ArborX::MST::edges"),
46-
AccessTraits<Primitives, PrimitivesTag>::size(primitives) - 1)
46+
AccessTraits<Primitives>::size(primitives) - 1)
4747
, dendrogram_parents("ArborX::MST::dendrogram_parents", 0)
4848
, dendrogram_parent_heights("ArborX::MST::dendrogram_parent_heights", 0)
4949
{
5050
Kokkos::Profiling::pushRegion("ArborX::MST::MST");
5151

52-
using Points = Details::AccessValues<Primitives, PrimitivesTag>;
52+
using Points = Details::AccessValues<Primitives>;
5353
using Point = typename Points::value_type;
5454
static_assert(GeometryTraits::is_point_v<Point>);
5555

src/distributed/ArborX_DistributedTree.hpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ class DistributedTreeBase
8989
Details::KokkosExt::is_accessible_from<MemorySpace,
9090
ExecutionSpace>::value);
9191

92-
using Predicates = Details::AccessValues<UserPredicates, PredicatesTag>;
92+
using Predicates = Details::AccessValues<UserPredicates>;
9393
static_assert(Details::KokkosExt::is_accessible_from<
9494
typename Predicates::memory_space, ExecutionSpace>::value,
9595
"Predicates must be accessible from the execution space");
@@ -156,9 +156,9 @@ KOKKOS_DEDUCTION_GUIDE
156156
#else
157157
KOKKOS_FUNCTION
158158
#endif
159-
DistributedTree(MPI_Comm, ExecutionSpace, Values) -> DistributedTree<
160-
typename Details::AccessValues<Values, PrimitivesTag>::memory_space,
161-
typename Details::AccessValues<Values, PrimitivesTag>::value_type>;
159+
DistributedTree(MPI_Comm, ExecutionSpace, Values)
160+
-> DistributedTree<typename Details::AccessValues<Values>::memory_space,
161+
typename Details::AccessValues<Values>::value_type>;
162162

163163
template <typename BottomTree>
164164
template <typename ExecutionSpace, typename... Args>

src/distributed/detail/ArborX_DistributedTreeNearestHelpers.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ KOKKOS_INLINE_FUNCTION auto approx_expand_by_radius(Geometry const &geometry,
148148

149149
template <class Predicates, class Distances>
150150
struct AccessTraits<
151-
Details::WithinDistanceFromPredicates<Predicates, Distances>, PredicatesTag>
151+
Details::WithinDistanceFromPredicates<Predicates, Distances>>
152152
{
153153
using Predicate = typename Predicates::value_type;
154154
using Geometry =

src/interpolation/ArborX_InterpMovingLeastSquares.hpp

+4-6
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,8 @@ class MovingLeastSquares
8080
"Memory space must be accessible from the execution space");
8181

8282
// SourcePoints is an access trait of points
83-
ArborX::Details::check_valid_access_traits(PrimitivesTag{}, source_points);
84-
using SourceAccess =
85-
ArborX::Details::AccessValues<SourcePoints, PrimitivesTag>;
83+
ArborX::Details::check_valid_access_traits(source_points);
84+
using SourceAccess = ArborX::Details::AccessValues<SourcePoints>;
8685
static_assert(
8786
KokkosExt::is_accessible_from<typename SourceAccess::memory_space,
8887
ExecutionSpace>::value,
@@ -94,9 +93,8 @@ class MovingLeastSquares
9493
static constexpr int dimension = GeometryTraits::dimension_v<SourcePoint>;
9594

9695
// TargetPoints is an access trait of points
97-
ArborX::Details::check_valid_access_traits(PrimitivesTag{}, target_points);
98-
using TargetAccess =
99-
ArborX::Details::AccessValues<TargetPoints, PrimitivesTag>;
96+
ArborX::Details::check_valid_access_traits(target_points);
97+
using TargetAccess = ArborX::Details::AccessValues<TargetPoints>;
10098
static_assert(
10199
KokkosExt::is_accessible_from<typename TargetAccess::memory_space,
102100
ExecutionSpace>::value,

src/spatial/ArborX_BruteForce.hpp

+14-15
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ class BruteForce
7878
check_valid_callback_if_first_argument_is_not_a_view<value_type>(
7979
callback_or_view, user_predicates, view);
8080

81-
using Predicates = Details::AccessValues<UserPredicates, PredicatesTag>;
81+
using Predicates = Details::AccessValues<UserPredicates>;
8282
using Tag = typename Predicates::value_type::Tag;
8383

8484
Details::CrsGraphWrapperImpl::queryDispatch(
@@ -105,40 +105,38 @@ KOKKOS_DEDUCTION_GUIDE
105105
#else
106106
KOKKOS_FUNCTION
107107
#endif
108-
BruteForce(ExecutionSpace, Values) -> BruteForce<
109-
typename Details::AccessValues<Values, PrimitivesTag>::memory_space,
110-
typename Details::AccessValues<Values, PrimitivesTag>::value_type>;
108+
BruteForce(ExecutionSpace, Values)
109+
-> BruteForce<typename Details::AccessValues<Values>::memory_space,
110+
typename Details::AccessValues<Values>::value_type>;
111111

112112
template <typename ExecutionSpace, typename Values, typename IndexableGetter>
113113
#if KOKKOS_VERSION >= 40400
114114
KOKKOS_DEDUCTION_GUIDE
115115
#else
116116
KOKKOS_FUNCTION
117117
#endif
118-
BruteForce(ExecutionSpace, Values, IndexableGetter) -> BruteForce<
119-
typename Details::AccessValues<Values, PrimitivesTag>::memory_space,
120-
typename Details::AccessValues<Values, PrimitivesTag>::value_type,
121-
IndexableGetter>;
118+
BruteForce(ExecutionSpace, Values, IndexableGetter)
119+
-> BruteForce<typename Details::AccessValues<Values>::memory_space,
120+
typename Details::AccessValues<Values>::value_type,
121+
IndexableGetter>;
122122

123123
template <typename MemorySpace, typename Value, typename IndexableGetter,
124124
typename BoundingVolume>
125125
template <typename ExecutionSpace, typename UserValues>
126126
BruteForce<MemorySpace, Value, IndexableGetter, BoundingVolume>::BruteForce(
127127
ExecutionSpace const &space, UserValues const &user_values,
128128
IndexableGetter const &indexable_getter)
129-
: _size(AccessTraits<UserValues, PrimitivesTag>::size(user_values))
129+
: _size(AccessTraits<UserValues>::size(user_values))
130130
, _values(Kokkos::view_alloc(space, Kokkos::WithoutInitializing,
131131
"ArborX::BruteForce::values"),
132132
_size)
133133
, _indexable_getter(indexable_getter)
134134
{
135135
static_assert(Details::KokkosExt::is_accessible_from<MemorySpace,
136136
ExecutionSpace>::value);
137-
// FIXME redo with RangeTraits
138-
Details::check_valid_access_traits<UserValues>(
139-
PrimitivesTag{}, user_values, Details::DoNotCheckGetReturnType());
137+
Details::check_valid_access_traits<UserValues>(user_values);
140138

141-
using Values = Details::AccessValues<UserValues, PrimitivesTag>;
139+
using Values = Details::AccessValues<UserValues>;
142140
Values values{user_values}; // NOLINT
143141

144142
static_assert(
@@ -167,10 +165,11 @@ void BruteForce<MemorySpace, Value, IndexableGetter, BoundingVolume>::query(
167165
{
168166
static_assert(Details::KokkosExt::is_accessible_from<MemorySpace,
169167
ExecutionSpace>::value);
170-
Details::check_valid_access_traits(PredicatesTag{}, user_predicates);
168+
Details::check_valid_access_traits(user_predicates,
169+
Details::CheckReturnTypeTag{});
171170
Details::check_valid_callback<value_type>(callback, user_predicates);
172171

173-
using Predicates = Details::AccessValues<UserPredicates, PredicatesTag>;
172+
using Predicates = Details::AccessValues<UserPredicates>;
174173
static_assert(
175174
Details::KokkosExt::is_accessible_from<typename Predicates::memory_space,
176175
ExecutionSpace>::value,

0 commit comments

Comments
 (0)