alpaka
Abstraction Library for Parallel Kernel Acceleration
Loading...
Searching...
No Matches
TestAccs.hpp
Go to the documentation of this file.
1/* Copyright 2025 Benjamin Worpitz, Erik Zenker, Matthias Werner, Andrea Bocci, Bernhard Manfred Gruber, Jan Stephan,
2 * Aurora Perego
3 * SPDX-License-Identifier: MPL-2.0
4 */
5
6#pragma once
7
8#include "alpaka/alpaka.hpp"
11
12#include <iosfwd>
13#include <tuple>
14#include <type_traits>
15
16// When compiling the tests with CUDA enabled (nvcc or native clang) on the CI infrastructure
17// we have to dramatically reduce the number of tested combinations.
18// Else the log length would be exceeded.
19#if defined(ALPAKA_CI)
20# if defined(ALPAKA_ACC_GPU_CUDA_ENABLED) && ALPAKA_LANG_CUDA \
21 || defined(ALPAKA_ACC_GPU_HIP_ENABLED) && ALPAKA_LANG_HIP
22# define ALPAKA_CUDA_CI
23# endif
24#endif
25
26namespace alpaka::test
27{
28 //! The detail namespace is used to separate implementation details from user accessible code.
29 namespace detail
30 {
31#if defined(ALPAKA_ACC_CPU_B_SEQ_T_SEQ_ENABLED)
32 template<typename TDim, typename TIdx>
34#else
35 template<typename TDim, typename TIdx>
37#endif
38#if defined(ALPAKA_ACC_CPU_B_SEQ_T_THREADS_ENABLED) && !defined(ALPAKA_CUDA_CI)
39 template<typename TDim, typename TIdx>
41#else
42 template<typename TDim, typename TIdx>
44#endif
45#if defined(ALPAKA_ACC_CPU_B_TBB_T_SEQ_ENABLED)
46 template<typename TDim, typename TIdx>
47 using AccCpuTbbIfAvailableElseInt = AccCpuTbbBlocks<TDim, TIdx>;
48#else
49 template<typename TDim, typename TIdx>
51#endif
52#if defined(ALPAKA_ACC_CPU_B_OMP2_T_SEQ_ENABLED)
53 template<typename TDim, typename TIdx>
55#else
56 template<typename TDim, typename TIdx>
58#endif
59#if defined(ALPAKA_ACC_CPU_B_SEQ_T_OMP2_ENABLED) && !defined(ALPAKA_CUDA_CI)
60 template<typename TDim, typename TIdx>
62#else
63 template<typename TDim, typename TIdx>
65#endif
66#if defined(ALPAKA_ACC_GPU_CUDA_ENABLED) && (ALPAKA_LANG_CUDA || defined(ALPAKA_HOST_ONLY))
67 template<typename TDim, typename TIdx>
69#else
70 template<typename TDim, typename TIdx>
72#endif
73#if defined(ALPAKA_ACC_GPU_HIP_ENABLED) && (ALPAKA_LANG_HIP || defined(ALPAKA_HOST_ONLY))
74 template<typename TDim, typename TIdx>
76 typename std::conditional<std::is_same_v<TDim, DimInt<3u>> == false, AccGpuHipRt<TDim, TIdx>, int>::type;
77#else
78 template<typename TDim, typename TIdx>
80#endif
81#if defined(ALPAKA_ACC_SYCL_ENABLED) && defined(ALPAKA_SYCL_TARGET_CPU)
82 template<typename TDim, typename TIdx>
83 using AccCpuSyclIfAvailableElseInt = AccCpuSycl<TDim, TIdx>;
84#else
85 template<typename TDim, typename TIdx>
87#endif
88#if defined(ALPAKA_ACC_SYCL_ENABLED) && defined(ALPAKA_SYCL_TARGET_FPGA)
89 template<typename TDim, typename TIdx>
90 using AccFpgaSyclIntelIfAvailableElseInt = AccFpgaSyclIntel<TDim, TIdx>;
91#else
92 template<typename TDim, typename TIdx>
94#endif
95#if defined(ALPAKA_ACC_SYCL_ENABLED) && defined(ALPAKA_SYCL_TARGET_GPU)
96 template<typename TDim, typename TIdx>
97 using AccGpuSyclIntelIfAvailableElseInt = AccGpuSyclIntel<TDim, TIdx>;
98#else
99 template<typename TDim, typename TIdx>
101#endif
102#if defined(ALPAKA_ACC_SYCL_ENABLED) && defined(ALPAKA_SYCL_TARGET_GPU_NVIDIA)
103 template<typename TDim, typename TIdx>
104 using AccGpuSyclNvidiaIfAvailableElseInt = AccGpuSyclNvidia<TDim, TIdx>;
105#else
106 template<typename TDim, typename TIdx>
108#endif
109#if defined(ALPAKA_ACC_SYCL_ENABLED) && defined(ALPAKA_SYCL_TARGET_GPU_AMD)
110 template<typename TDim, typename TIdx>
111 using AccGpuSyclAmdIfAvailableElseInt = AccGpuSyclAmd<TDim, TIdx>;
112#else
113 template<typename TDim, typename TIdx>
115#endif
116
117 //! A vector containing all available accelerators and int's.
118 template<typename TDim, typename TIdx>
119 using EnabledAccsElseInt = std::tuple<
132 } // namespace detail
133
134 //! A vector containing all available accelerators.
135 template<typename TDim, typename TIdx>
137
138 namespace detail
139 {
140 //! The accelerator name write wrapper.
142 {
143 template<typename TAcc>
144 ALPAKA_FN_HOST auto operator()(std::ostream& os) -> void
145 {
146 os << getAccName<TAcc>();
147 os << " ";
148 }
149 };
150 } // namespace detail
151
152 //! Writes the enabled accelerators to the given stream.
153 template<typename TDim, typename TIdx>
154 ALPAKA_FN_HOST auto writeEnabledAccs(std::ostream& os) -> void
155 {
156 os << "Accelerators enabled: ";
157
158 meta::forEachType<EnabledAccs<TDim, TIdx>>(detail::StreamOutAccName(), std::ref(os));
159
160 os << std::endl;
161 }
162
163 namespace detail
164 {
165 //! A std::tuple holding multiple std::tuple consisting of a dimension and a idx type.
166 //!
167 //! TestDimIdxTuples =
168 //! tuple<
169 //! tuple<Dim1,Idx1>,
170 //! tuple<Dim2,Idx1>,
171 //! tuple<Dim3,Idx1>,
172 //! ...,
173 //! tuple<DimN,IdxN>>
175
176 template<typename TList>
178
179 //! A std::tuple containing std::tuple with fully instantiated accelerators.
180 //!
181 //! TestEnabledAccs =
182 //! tuple<
183 //! tuple<Acc1<Dim1,Idx1>, ..., AccN<Dim1,Idx1>>,
184 //! tuple<Acc1<Dim2,Idx1>, ..., AccN<Dim2,Idx1>>,
185 //! ...,
186 //! tuple<Acc1<DimN,IdxN>, ..., AccN<DimN,IdxN>>>
188 } // namespace detail
189
190 //! A std::tuple containing fully instantiated accelerators.
191 //!
192 //! TestAccs =
193 //! tuple<
194 //! Acc1<Dim1,Idx1>, ..., AccN<Dim1,Idx1>,
195 //! Acc1<Dim2,Idx1>, ..., AccN<Dim2,Idx1>,
196 //! ...,
197 //! Acc1<DimN,IdxN>, ..., AccN<DimN,IdxN>>
199} // namespace alpaka::test
The CPU OpenMP 2.0 block accelerator.
The CPU OpenMP 2.0 thread accelerator.
The CPU serial accelerator.
The CPU threads accelerator.
#define ALPAKA_FN_HOST
Definition Common.hpp:40
typename detail::TransformImpl< Ts, TOp >::type Transform
Definition Transform.hpp:21
typename detail::FilterImpl< TList, TPred >::type Filter
Definition Filter.hpp:46
typename detail::CartesianProductImpl< TList, Ts... >::type CartesianProduct
typename detail::ApplyImpl< TList, TApplicant >::type Apply
Definition Apply.hpp:21
int AccFpgaSyclIntelIfAvailableElseInt
Definition TestAccs.hpp:93
meta::Apply< TList, EnabledAccs > ApplyEnabledAccs
Definition TestAccs.hpp:177
int AccGpuHipRtIfAvailableElseInt
Definition TestAccs.hpp:79
int AccGpuCudaRtIfAvailableElseInt
Definition TestAccs.hpp:71
int AccGpuSyclAmdIfAvailableElseInt
Definition TestAccs.hpp:114
meta::CartesianProduct< std::tuple, NonZeroTestDims, TestIdxs > TestDimIdxTuples
A std::tuple holding multiple std::tuple consisting of a dimension and a idx type.
Definition TestAccs.hpp:174
std::tuple< AccCpuSerialIfAvailableElseInt< TDim, TIdx >, AccCpuThreadsIfAvailableElseInt< TDim, TIdx >, AccCpuTbbIfAvailableElseInt< TDim, TIdx >, AccCpuOmp2BlocksIfAvailableElseInt< TDim, TIdx >, AccCpuOmp2ThreadsIfAvailableElseInt< TDim, TIdx >, AccGpuCudaRtIfAvailableElseInt< TDim, TIdx >, AccGpuHipRtIfAvailableElseInt< TDim, TIdx >, AccCpuSyclIfAvailableElseInt< TDim, TIdx >, AccFpgaSyclIntelIfAvailableElseInt< TDim, TIdx >, AccGpuSyclIntelIfAvailableElseInt< TDim, TIdx >, AccGpuSyclNvidiaIfAvailableElseInt< TDim, TIdx >, AccGpuSyclAmdIfAvailableElseInt< TDim, TIdx > > EnabledAccsElseInt
A vector containing all available accelerators and int's.
Definition TestAccs.hpp:131
int AccGpuSyclNvidiaIfAvailableElseInt
Definition TestAccs.hpp:107
meta::Transform< TestDimIdxTuples, ApplyEnabledAccs > InstantiatedEnabledAccs
A std::tuple containing std::tuple with fully instantiated accelerators.
Definition TestAccs.hpp:187
int AccGpuSyclIntelIfAvailableElseInt
Definition TestAccs.hpp:100
The test specifics.
Definition TestAccs.hpp:27
typename meta::Filter< detail::EnabledAccsElseInt< TDim, TIdx >, std::is_class > EnabledAccs
A vector containing all available accelerators.
Definition TestAccs.hpp:136
meta::Apply< detail::InstantiatedEnabledAccs, meta::Concatenate > TestAccs
A std::tuple containing fully instantiated accelerators.
Definition TestAccs.hpp:198
ALPAKA_FN_HOST auto writeEnabledAccs(std::ostream &os) -> void
Writes the enabled accelerators to the given stream.
Definition TestAccs.hpp:154
The accelerator name write wrapper.
Definition TestAccs.hpp:142
ALPAKA_FN_HOST auto operator()(std::ostream &os) -> void
Definition TestAccs.hpp:144