6 template <
typename F1>
double Dnrm1_core(
const F1 &x) {
11 const double *xd = x.data();
12 size_t size = x.size();
13 const size_t xoffset = x.get_offset();
15 if (x.get_device_mem_stat() ==
true) {
16 #if MONOLISH_USE_NVIDIA_GPU
17 #pragma omp target teams distribute parallel for reduction(+ : ans) map (tofrom: ans)
18 for (
size_t i = 0; i < size; i++) {
19 ans += std::abs(xd[i + xoffset]);
22 throw std::runtime_error(
23 "error USE_GPU is false, but get_device_mem_stat() == true");
26 #pragma omp parallel for reduction(+ : ans)
27 for (
size_t i = 0; i < size; i++) {
28 ans += std::abs(xd[i + xoffset]);
34 ans = comm.Allreduce(ans);
41 template <
typename F1>
float Snrm1_core(
const F1 &x) {
46 const float *xd = x.data();
47 size_t size = x.size();
48 const size_t xoffset = x.get_offset();
50 if (x.get_device_mem_stat() ==
true) {
51 #if MONOLISH_USE_NVIDIA_GPU
52 #pragma omp target teams distribute parallel for reduction(+ : ans) map (tofrom: ans)
53 for (
size_t i = 0; i < size; i++) {
54 ans += std::abs(xd[i + xoffset]);
57 throw std::runtime_error(
58 "error USE_GPU is false, but get_device_mem_stat() == true");
61 #pragma omp parallel for reduction(+ : ans)
62 for (
size_t i = 0; i < size; i++) {
63 ans += std::abs(xd[i + xoffset]);
69 ans = comm.Allreduce(ans);