MUDA
Loading...
Searching...
No Matches
norm.inl
1#include <muda/ext/linear_system/type_mapper/data_type_mapper.h>
2namespace muda
3{
4namespace details::linear_system
5{
6 template <typename T>
7 MUDA_INLINE void norm_common_check(CDenseVectorView<T> x)
8 {
9 MUDA_ASSERT(x.data(), "Vector x is empty");
10 }
11} // namespace details::linear_system
12
13template <typename T>
14T LinearSystemContext::norm(CDenseVectorView<T> x)
15{
16 T result;
17 norm(x, &result);
18 sync();
19 return result;
20}
21
22template <typename T>
23void LinearSystemContext::norm(CDenseVectorView<T> x, VarView<T> result)
24{
25 set_pointer_mode_device();
26 details::linear_system::norm_common_check(x);
27 auto type = cuda_data_type<T>();
28 checkCudaErrors(cublasNrm2Ex(
29 cublas(), x.size() / x.inc(), x.data(), type, x.inc(), result.data(), type, type));
30}
31
32template <typename T>
33void LinearSystemContext::norm(CDenseVectorView<T> x, T* result)
34{
35 set_pointer_mode_host();
36 details::linear_system::norm_common_check(x);
37 auto type = cuda_data_type<T>();
38 checkCudaErrors(cublasNrm2Ex(
39 cublas(), x.size() / x.inc(), x.data(), type, x.inc(), result, type, type));
40}
41} // namespace muda