9template <
typename T, FieldEntryLayout DstLayout, FieldEntryLayout SrcLayout,
int M,
int N>
10MUDA_HOST FieldEntryLaunch& FieldEntryLaunch::copy(FieldEntryView<T, DstLayout, M, N> dst,
11 CFieldEntryView<T, SrcLayout, M, N> src)
13 MUDA_ASSERT(dst.size() == src.size(),
14 "FieldEntry size mismatching: dst.size() = %d, src.size() = %d",
20 [dst, src] __device__(
int i)
mutable
22 if constexpr(M == 1 && N == 1)
24 *dst.data(i) = *src.data(i);
26 else if constexpr(M > 1 && N == 1)
29 for(
int j = 0; j < M; ++j)
31 *dst.data(i, j) = *src.data(i, j);
34 else if constexpr(M > 1 && N > 1)
37 for(
int j = 0; j < M; ++j)
40 for(
int k = 0; k < N; ++k)
42 *dst.data(i, j, k) = *src.data(i, j, k);
48 static_assert(
"Invalid");
55template <
typename T, FieldEntryLayout DstLayout,
int M,
int N>
56MUDA_HOST FieldEntryLaunch& FieldEntryLaunch::fill(
57 FieldEntryView<T, DstLayout, M, N> dst,
58 const typename FieldEntryView<T, DstLayout, M, N>::ElementType& value)
62 [dst, value] __device__(
int i)
mutable
64 if constexpr(M == 1 && N == 1)
68 else if constexpr(M > 1 && N == 1)
72 for(
int j = 0; j < M; ++j)
74 *dst.data(i, j) = value(j);
77 else if constexpr(M > 1 && N > 1)
80 for(
int j = 0; j < M; ++j)
83 for(
int k = 0; k < N; ++k)
85 *dst.data(i, j, k) = value(j, k);
91 static_assert(
"Invalid");
98template <
typename T, FieldEntryLayout SrcLayout,
int M,
int N>
99MUDA_HOST FieldEntryLaunch& FieldEntryLaunch::copy(
100 BufferView<
typename CFieldEntryView<T, SrcLayout, M, N>::ElementType> dst,
101 CFieldEntryView<T, SrcLayout, M, N> src)
103 MUDA_ASSERT(dst.size() == src.size(),
104 "FieldEntry size mismatching: dst.size() = %d, src.size() = %d",
111 [dst, src] __device__(
int i)
mutable
113 if constexpr(M == 1 && N == 1)
115 *dst.data(i) = *src.data(i);
117 else if constexpr(M > 1 && N == 1)
120 for(
int j = 0; j < M; ++j)
122 (*dst.data(i))(j) = *src.data(i, j);
125 else if constexpr(M > 1 && N > 1)
128 for(
int j = 0; j < M; ++j)
131 for(
int k = 0; k < N; ++k)
133 (*dst.data(i))(j, k) = *src.data(i, j, k);
139 static_assert(
"Invalid");
146template <
typename T, FieldEntryLayout DstLayout,
int M,
int N>
147MUDA_HOST FieldEntryLaunch& FieldEntryLaunch::copy(
148 FieldEntryView<T, DstLayout, M, N> dst,
149 CBufferView<
typename FieldEntryView<T, DstLayout, M, N>::ElementType> src)
151 MUDA_ASSERT(dst.size() == src.size(),
152 "FieldEntry size mismatching: dst.size() = %d, src.size() = %d",
156 ParallelFor().apply(dst.size(),
157 [dst = dst, src = src] __device__(
int i)
mutable
159 if constexpr(M == 1 && N == 1)
161 *dst.data(i) = (*src.data(i));
163 else if constexpr(M > 1 && N == 1)
167 for(
int j = 0; j < M; ++j)
169 *dst.data(i, j) = (*src.data(i))(j);
172 else if constexpr(M > 1 && N > 1)
175 for(
int j = 0; j < M; ++j)
178 for(
int k = 0; k < N; ++k)
180 *dst.data(i, j, k) = (*src.data(i))(j, k);
186 static_assert(
"Invalid");