DPC++ Runtime
Runtime libraries for oneAPI DPC++
host_helper_macros.hpp File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define FOR_VEC_1_16(MACRO, ...)
 
#define FOR_VEC_2_4(MACRO, ...)
 
#define FOR_VEC_3_4(MACRO, ...)
 
#define EXPORT_SCALAR_NS(NUM_ARGS, NAME, NS, TYPE)
 
#define EXPORT_VEC_NS(NUM_ARGS, NAME, NS, TYPE, VL)
 
#define EXPORT_SCALAR(NUM_ARGS, NAME, TYPE)    EXPORT_SCALAR_NS(NUM_ARGS, NAME, sycl, TYPE)
 
#define EXPORT_VEC(NUM_ARGS, NAME, TYPE, VL)    EXPORT_VEC_NS(NUM_ARGS, NAME, sycl, TYPE, VL)
 
#define EXPORT_VEC_1_16_IMPL(NUM_ARGS, NAME, NS, TYPE)    FOR_VEC_1_16(EXPORT_VEC_NS, NUM_ARGS, NAME, NS, TYPE)
 
#define EXPORT_SCALAR_AND_VEC_1_16_IMPL(NUM_ARGS, NAME, NS, TYPE)
 
#define EXPORT_SCALAR_AND_VEC_2_4_IMPL(NUM_ARGS, NAME, TYPE)
 
#define EXPORT_VEC_3_4_IMPL(NUM_ARGS, NAME, TYPE)    FOR_VEC_3_4(EXPORT_VEC, NUM_ARGS, NAME, TYPE)
 
#define EXPORT_SCALAR_AND_VEC_1_16_NS(NUM_ARGS, NAME, NS, ...)    FOR_EACH3(EXPORT_SCALAR_AND_VEC_1_16_IMPL, NUM_ARGS, NAME, NS, __VA_ARGS__)
 
#define EXPORT_VEC_1_16_NS(NUM_ARGS, NAME, NS, ...)    FOR_EACH3(EXPORT_VEC_1_16_IMPL, NUM_ARGS, NAME, NS, __VA_ARGS__)
 
#define EXPORT_SCALAR_AND_VEC_1_16(NUM_ARGS, NAME, ...)    EXPORT_SCALAR_AND_VEC_1_16_NS(NUM_ARGS, NAME, sycl, __VA_ARGS__)
 
#define EXPORT_VEC_1_16(NUM_ARGS, NAME, ...)    EXPORT_VEC_1_16_NS(NUM_ARGS, NAME, sycl, __VA_ARGS__)
 
#define EXPORT_SCALAR_AND_VEC_2_4(NUM_ARGS, NAME, ...)    FOR_EACH2(EXPORT_SCALAR_AND_VEC_2_4_IMPL, NUM_ARGS, NAME, __VA_ARGS__)
 
#define EXPORT_VEC_3_4(NUM_ARGS, NAME, ...)    FOR_EACH2(EXPORT_VEC_3_4_IMPL, NUM_ARGS, NAME, __VA_ARGS__)
 
#define HOST_IMPL(NAME, ...)
 

Macro Definition Documentation

◆ EXPORT_SCALAR

#define EXPORT_SCALAR (   NUM_ARGS,
  NAME,
  TYPE 
)     EXPORT_SCALAR_NS(NUM_ARGS, NAME, sycl, TYPE)

Definition at line 54 of file host_helper_macros.hpp.

◆ EXPORT_SCALAR_AND_VEC_1_16

#define EXPORT_SCALAR_AND_VEC_1_16 (   NUM_ARGS,
  NAME,
  ... 
)     EXPORT_SCALAR_AND_VEC_1_16_NS(NUM_ARGS, NAME, sycl, __VA_ARGS__)

Definition at line 77 of file host_helper_macros.hpp.

◆ EXPORT_SCALAR_AND_VEC_1_16_IMPL

#define EXPORT_SCALAR_AND_VEC_1_16_IMPL (   NUM_ARGS,
  NAME,
  NS,
  TYPE 
)
Value:
EXPORT_SCALAR_NS(NUM_ARGS, NAME, NS, TYPE) \
FOR_VEC_1_16(EXPORT_VEC_NS, NUM_ARGS, NAME, NS, TYPE)
#define EXPORT_SCALAR_NS(NUM_ARGS, NAME, NS, TYPE)
#define EXPORT_VEC_NS(NUM_ARGS, NAME, NS, TYPE, VL)

Definition at line 62 of file host_helper_macros.hpp.

◆ EXPORT_SCALAR_AND_VEC_1_16_NS

#define EXPORT_SCALAR_AND_VEC_1_16_NS (   NUM_ARGS,
  NAME,
  NS,
  ... 
)     FOR_EACH3(EXPORT_SCALAR_AND_VEC_1_16_IMPL, NUM_ARGS, NAME, NS, __VA_ARGS__)

Definition at line 73 of file host_helper_macros.hpp.

◆ EXPORT_SCALAR_AND_VEC_2_4

#define EXPORT_SCALAR_AND_VEC_2_4 (   NUM_ARGS,
  NAME,
  ... 
)     FOR_EACH2(EXPORT_SCALAR_AND_VEC_2_4_IMPL, NUM_ARGS, NAME, __VA_ARGS__)

Definition at line 82 of file host_helper_macros.hpp.

◆ EXPORT_SCALAR_AND_VEC_2_4_IMPL

#define EXPORT_SCALAR_AND_VEC_2_4_IMPL (   NUM_ARGS,
  NAME,
  TYPE 
)
Value:
EXPORT_SCALAR(NUM_ARGS, NAME, TYPE) \
FOR_VEC_2_4(EXPORT_VEC, NUM_ARGS, NAME, TYPE)
#define EXPORT_SCALAR(NUM_ARGS, NAME, TYPE)
#define EXPORT_VEC(NUM_ARGS, NAME, TYPE, VL)

Definition at line 66 of file host_helper_macros.hpp.

◆ EXPORT_SCALAR_NS

#define EXPORT_SCALAR_NS (   NUM_ARGS,
  NAME,
  NS,
  TYPE 
)
Value:
__SYCL_EXPORT auto __##NAME##_impl(NUM_ARGS##_TYPE_ARG(TYPE)) \
-> decltype(NAME##_host_impl(NUM_ARGS##_ARG)) { \
static_assert(std::is_same_v<decltype(NAME##_host_impl(NUM_ARGS##_ARG)), \
decltype(NS::NAME(NUM_ARGS##_ARG))>); \
return NAME##_host_impl(NUM_ARGS##_ARG); \
}

Definition at line 39 of file host_helper_macros.hpp.

◆ EXPORT_VEC

#define EXPORT_VEC (   NUM_ARGS,
  NAME,
  TYPE,
  VL 
)     EXPORT_VEC_NS(NUM_ARGS, NAME, sycl, TYPE, VL)

Definition at line 56 of file host_helper_macros.hpp.

◆ EXPORT_VEC_1_16

#define EXPORT_VEC_1_16 (   NUM_ARGS,
  NAME,
  ... 
)     EXPORT_VEC_1_16_NS(NUM_ARGS, NAME, sycl, __VA_ARGS__)

Definition at line 79 of file host_helper_macros.hpp.

◆ EXPORT_VEC_1_16_IMPL

#define EXPORT_VEC_1_16_IMPL (   NUM_ARGS,
  NAME,
  NS,
  TYPE 
)     FOR_VEC_1_16(EXPORT_VEC_NS, NUM_ARGS, NAME, NS, TYPE)

Definition at line 59 of file host_helper_macros.hpp.

◆ EXPORT_VEC_1_16_NS

#define EXPORT_VEC_1_16_NS (   NUM_ARGS,
  NAME,
  NS,
  ... 
)     FOR_EACH3(EXPORT_VEC_1_16_IMPL, NUM_ARGS, NAME, NS, __VA_ARGS__)

Definition at line 75 of file host_helper_macros.hpp.

◆ EXPORT_VEC_3_4

#define EXPORT_VEC_3_4 (   NUM_ARGS,
  NAME,
  ... 
)     FOR_EACH2(EXPORT_VEC_3_4_IMPL, NUM_ARGS, NAME, __VA_ARGS__)

Definition at line 84 of file host_helper_macros.hpp.

◆ EXPORT_VEC_3_4_IMPL

#define EXPORT_VEC_3_4_IMPL (   NUM_ARGS,
  NAME,
  TYPE 
)     FOR_VEC_3_4(EXPORT_VEC, NUM_ARGS, NAME, TYPE)

Definition at line 70 of file host_helper_macros.hpp.

◆ EXPORT_VEC_NS

#define EXPORT_VEC_NS (   NUM_ARGS,
  NAME,
  NS,
  TYPE,
  VL 
)
Value:
__SYCL_EXPORT auto __##NAME##_impl(NUM_ARGS##_VEC_TYPE_ARG(TYPE, VL)) \
-> decltype(NAME##_host_impl(NUM_ARGS##_ARG)) { \
static_assert(std::is_same_v<decltype(NAME##_host_impl(NUM_ARGS##_ARG)), \
decltype(NS::NAME(NUM_ARGS##_ARG))>); \
return NAME##_host_impl(NUM_ARGS##_ARG); \
}

Definition at line 46 of file host_helper_macros.hpp.

◆ FOR_VEC_1_16

#define FOR_VEC_1_16 (   MACRO,
  ... 
)
Value:
MACRO(__VA_ARGS__, 1) \
MACRO(__VA_ARGS__, 2) \
MACRO(__VA_ARGS__, 3) \
MACRO(__VA_ARGS__, 4) \
MACRO(__VA_ARGS__, 8) \
MACRO(__VA_ARGS__, 16)

Definition at line 11 of file host_helper_macros.hpp.

◆ FOR_VEC_2_4

#define FOR_VEC_2_4 (   MACRO,
  ... 
)
Value:
MACRO(__VA_ARGS__, 2) \
MACRO(__VA_ARGS__, 3) \
MACRO(__VA_ARGS__, 4)

Definition at line 19 of file host_helper_macros.hpp.

◆ FOR_VEC_3_4

#define FOR_VEC_3_4 (   MACRO,
  ... 
)
Value:
MACRO(__VA_ARGS__, 3) \
MACRO(__VA_ARGS__, 4)

Definition at line 24 of file host_helper_macros.hpp.

◆ HOST_IMPL

#define HOST_IMPL (   NAME,
  ... 
)
Value:
template <typename... Ts> static auto NAME##_host_impl(Ts... xs) { \
using namespace detail; \
if constexpr ((... || is_vec_v<Ts>)) { \
using ret_elem_type = decltype(NAME##_host_impl(xs[0]...)); \
using T = typename first_type<Ts...>::type; \
vec<ret_elem_type, T::size()> r{}; \
loop<T::size()>( \
[&](auto idx) { r[idx] = NAME##_host_impl(xs[idx]...); }); \
return r; \
} else { \
return __VA_ARGS__(xs...); \
} \
}

Definition at line 87 of file host_helper_macros.hpp.