3namespace details::linear_system
6 void axpby_common_check(CDenseVectorView<T> x, DenseVectorView<T> y)
8 MUDA_ASSERT(x.data(),
"Vector x is empty");
9 MUDA_ASSERT(y.data(),
"Vector y is empty");
10 MUDA_ASSERT(x.size() / x.inc() == y.size() / y.inc(),
11 "Vector x and y have different size, x (size=%lld, inc=%d), y (size=%lld, inc=%d)",
18 void axpby_common_check(CDenseVectorView<T> x, CDenseVectorView<T> y, DenseVectorView<T> z)
20 MUDA_ASSERT(x.data(),
"Vector x is empty");
21 MUDA_ASSERT(y.data(),
"Vector y is empty");
22 MUDA_ASSERT(z.data(),
"Vector z is empty");
23 MUDA_ASSERT(x.size() / x.inc() == y.size() / y.inc(),
24 "Vector x and y have different size, x (size=%lld, inc=%d), y (size=%lld, inc=%d)",
29 MUDA_ASSERT(x.size() / x.inc() == z.size() / z.inc(),
30 "Vector x and z have different size, x (size=%lld, inc=%d), z (size=%lld, inc=%d)",
38void LinearSystemContext::axpby(
const T& alpha,
39 CDenseVectorView<T> x,
43 details::linear_system::axpby_common_check(x, y);
44 auto size = x.size() / x.inc();
45 ParallelFor().apply(size,
51 b = beta] __device__(
int i)
mutable
53 auto& r_y = *y.data(i * y_inc);
54 auto& r_x = *x.data(i * x_inc);
55 r_y = a * r_x + b * r_y;
59void muda::LinearSystemContext::axpby(CVarView<T> alpha,
60 CDenseVectorView<T> x,
64 details::linear_system::axpby_common_check(x, y);
65 auto size = x.size() / x.inc();
66 ParallelFor().apply(size,
72 b = beta.data()] __device__(
int i)
mutable
74 auto& r_y = *y.data(i * y_inc);
75 auto& r_x = *x.data(i * x_inc);
76 r_y = *a * r_x + *b * r_y;
80void LinearSystemContext::plus(CDenseVectorView<T> x, CDenseVectorView<T> y, DenseVectorView<T> z)
82 details::linear_system::axpby_common_check(x, y, z);
83 auto size = x.size() / x.inc();
84 ParallelFor().apply(size,
90 z_inc = z.inc()] __device__(
int i)
mutable
92 auto& r_z = *z.data(i * z_inc);
93 auto& r_x = *x.data(i * x_inc);
94 auto& r_y = *y.data(i * y_inc);