| 35 | |
| 36 | template<typename T> |
| 37 | double cpu_norm1_impl(af::dim4 &dims, std::vector<T> &value) { |
| 38 | int M = dims[0]; |
| 39 | int N = dims[1]; |
| 40 | |
| 41 | double norm1 = std::numeric_limits<double>::lowest(); |
| 42 | for (int n = 0; n < N; n++) { |
| 43 | T *columnN = value.data() + n * M; |
| 44 | double sum = 0; |
| 45 | for (int m = 0; m < M; m++) { sum += abs(columnN[m]); } |
| 46 | norm1 = std::max(norm1, sum); |
| 47 | } |
| 48 | return norm1; |
| 49 | } |
| 50 | |
| 51 | template<typename T> |
| 52 | double cpu_norm_pq_impl(af::dim4 &dims, std::vector<T> &value, double p, double q) { |