Uni20
Asynchronous tensor and runtime library.
Loading...
Searching...
No Matches
elementwise_scale.hpp
Go to the documentation of this file.
1#pragma once
2
11
12#include <cuda_runtime_api.h>
13
14#include <concepts>
15#include <cstddef>
16#include <type_traits>
17
18namespace uni20::linalg::detail::cuda_reference
19{
20
21inline constexpr std::size_t elementwise_scale_maximum_rank = 8;
22using ElementwiseScalePlan32 = StridedElementwisePlan32<2, elementwise_scale_maximum_rank>;
23using ElementwiseScalePlan64 = StridedElementwisePlan64<2, elementwise_scale_maximum_rank>;
24using LoweredElementwiseScalePlan = LoweredStridedElementwisePlan<2, elementwise_scale_maximum_rank>;
25
26#define UNI20_DECLARE_ELEMENTWISE_SCALE(Scalar, Factor) \
27 void enqueue_elementwise_scale(Scalar* output, Scalar const* input, Factor factor, \
28 ElementwiseScalePlan32 const& plan, cudaStream_t stream, int device); \
29 void enqueue_elementwise_scale(Scalar* output, Scalar const* input, Factor factor, \
30 ElementwiseScalePlan64 const& plan, cudaStream_t stream, int device)
31
38
39#undef UNI20_DECLARE_ELEMENTWISE_SCALE
40
41template <class Scalar, class Factor>
42inline constexpr bool supports_elementwise_scale =
43 (std::same_as<Scalar, float> && std::same_as<Factor, float>) ||
44 (std::same_as<Scalar, double> && std::same_as<Factor, double>) ||
45 (std::same_as<Scalar, uni20::cfloat> && (std::same_as<Factor, float> || std::same_as<Factor, uni20::cfloat>)) ||
46 (std::same_as<Scalar, uni20::cdouble> && (std::same_as<Factor, double> || std::same_as<Factor, uni20::cdouble>));
47
48} // namespace uni20::linalg::detail::cuda_reference
CUDA lowering for compact affine elementwise iteration plans.
#define UNI20_DECLARE_ELEMENTWISE_SCALE(Scalar, Factor)
Definition elementwise_scale.hpp:26
complex< double > cdouble
Definition types.hpp:76
complex< float > cfloat
Definition types.hpp:75