Uni20
Asynchronous tensor and runtime library.
Loading...
Searching...
No Matches
elementwise_copy.hpp
Go to the documentation of this file.
1#pragma once
2
10#include <uni20/core/types.hpp>
12
13#include <cuda_runtime_api.h>
14
15#include <concepts>
16#include <cstddef>
17
18namespace uni20::linalg::detail::cuda_reference
19{
20
21enum class ElementwiseCopyTransform
22{
23 identity,
24 conjugate
25};
26
27inline constexpr std::size_t elementwise_copy_maximum_rank = 8;
28using ElementwiseCopyPlan32 = StridedElementwisePlan32<2, elementwise_copy_maximum_rank>;
29using ElementwiseCopyPlan64 = StridedElementwisePlan64<2, elementwise_copy_maximum_rank>;
30using LoweredElementwiseCopyPlan = LoweredStridedElementwisePlan<2, elementwise_copy_maximum_rank>;
31
32void enqueue_elementwise_copy(float* output, float const* input, ElementwiseCopyPlan32 const& plan,
33 ElementwiseCopyTransform transform, cudaStream_t stream, int device);
34void enqueue_elementwise_copy(float* output, float const* input, ElementwiseCopyPlan64 const& plan,
35 ElementwiseCopyTransform transform, cudaStream_t stream, int device);
36void enqueue_elementwise_copy(double* output, double const* input, ElementwiseCopyPlan32 const& plan,
37 ElementwiseCopyTransform transform, cudaStream_t stream, int device);
38void enqueue_elementwise_copy(double* output, double const* input, ElementwiseCopyPlan64 const& plan,
39 ElementwiseCopyTransform transform, cudaStream_t stream, int device);
40void enqueue_elementwise_copy(uni20::cfloat* output, uni20::cfloat const* input, ElementwiseCopyPlan32 const& plan,
41 ElementwiseCopyTransform transform, cudaStream_t stream, int device);
42void enqueue_elementwise_copy(uni20::cfloat* output, uni20::cfloat const* input, ElementwiseCopyPlan64 const& plan,
43 ElementwiseCopyTransform transform, cudaStream_t stream, int device);
44void enqueue_elementwise_copy(uni20::cdouble* output, uni20::cdouble const* input, ElementwiseCopyPlan32 const& plan,
45 ElementwiseCopyTransform transform, cudaStream_t stream, int device);
46void enqueue_elementwise_copy(uni20::cdouble* output, uni20::cdouble const* input, ElementwiseCopyPlan64 const& plan,
47 ElementwiseCopyTransform transform, cudaStream_t stream, int device);
48
49template <class Scalar>
50inline constexpr bool supports_elementwise_copy =
51 std::same_as<Scalar, float> || std::same_as<Scalar, double> || std::same_as<Scalar, uni20::cfloat> ||
52 std::same_as<Scalar, uni20::cdouble>;
53
54} // namespace uni20::linalg::detail::cuda_reference
Project compiler annotations shared by host and device code.
CUDA lowering for compact affine elementwise iteration plans.
complex< double > cdouble
Definition types.hpp:76
complex< float > cfloat
Definition types.hpp:75