Motr  M0
matvec.h
Go to the documentation of this file.
1 /* -*- C -*- */
2 /*
3  * Copyright (c) 2013-2020 Seagate Technology LLC and/or its Affiliates
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  * For any questions about this software or licensing,
18  * please email opensource@seagate.com or cortx-questions@seagate.com.
19  *
20  */
21 
22 
23 #pragma once
24 
25 #ifndef __MOTR_SNS_MAT_VEC_H__
26 #define __MOTR_SNS_MAT_VEC_H__
27 
28 #include "lib/types.h"
29 #include "parity_ops.h"
30 
34 struct m0_matvec {
35  uint32_t mv_size;
37 };
38 
39 M0_INTERNAL int m0_matvec_init(struct m0_matvec *v, uint32_t sz);
40 M0_INTERNAL void m0_matvec_fini(struct m0_matvec *v);
41 M0_INTERNAL void m0_matvec_print(const struct m0_matvec *vec);
42 
49 m0_parity_elem_t* m0_matvec_elem_get(const struct m0_matvec *v, uint32_t x);
50 
51 
55 struct m0_matrix {
56  uint32_t m_width;
57  uint32_t m_height;
59 };
60 
61 M0_INTERNAL int m0_matrix_init(struct m0_matrix *m, uint32_t w, uint32_t h);
62 M0_INTERNAL void m0_matrix_fini(struct m0_matrix *m);
63 M0_INTERNAL void m0_matrix_print(const struct m0_matrix *mat);
64 
71 m0_parity_elem_t* m0_matrix_elem_get(const struct m0_matrix *m, uint32_t x, uint32_t y);
72 
78 
85 M0_INTERNAL void m0_matvec_row_operate(struct m0_matvec *v, uint32_t row,
88 
95 M0_INTERNAL void m0_matrix_row_operate(struct m0_matrix *m, uint32_t row,
98 
105 M0_INTERNAL void m0_matrix_col_operate(struct m0_matrix *m, uint32_t col,
108 
116 M0_INTERNAL void m0_matrix_rows_operate(struct m0_matrix *m, uint32_t row0,
117  uint32_t row1,
119  m0_parity_elem_t c0,
121  m0_parity_elem_t c1,
123 
131 M0_INTERNAL void m0_matrix_rows_operate2(struct m0_matrix *m, uint32_t row0,
132  uint32_t row1,
134  m0_parity_elem_t c0,
136 
144 M0_INTERNAL void m0_matrix_rows_operate1(struct m0_matrix *m, uint32_t row0,
145  uint32_t row1,
147  m0_parity_elem_t c1,
149 
157 M0_INTERNAL void m0_matvec_rows_operate(struct m0_matvec *v, uint32_t row0,
158  uint32_t row1,
160  m0_parity_elem_t c0,
162  m0_parity_elem_t c1,
164 
172 M0_INTERNAL void m0_matvec_rows_operate1(struct m0_matvec *v, uint32_t row0,
173  uint32_t row1,
175  m0_parity_elem_t c1,
177 
185 M0_INTERNAL void m0_matvec_rows_operate2(struct m0_matvec *v, uint32_t row0,
186  uint32_t row1,
188  m0_parity_elem_t c0,
190 
198 M0_INTERNAL void m0_matrix_cols_operate(struct m0_matrix *m, uint32_t col0,
199  uint32_t col1,
201  m0_parity_elem_t c0,
203  m0_parity_elem_t c1,
205 
210 M0_INTERNAL void m0_matrix_swap_row(struct m0_matrix *m, uint32_t r0,
211  uint32_t r1);
212 
217 M0_INTERNAL void m0_matvec_swap_row(struct m0_matvec *v, uint32_t r0,
218  uint32_t r1);
219 
230 M0_INTERNAL void m0_matrix_vec_multiply(const struct m0_matrix *m,
231  const struct m0_matvec *v,
232  struct m0_matvec *r,
235 
242 M0_INTERNAL void m0_matrix_submatrix_get(const struct m0_matrix *mat,
243  struct m0_matrix *submat,
244  uint32_t x, uint32_t y);
245 
256 M0_INTERNAL void m0_matrix_multiply(const struct m0_matrix *ma,
257  const struct m0_matrix *mb,
258  struct m0_matrix *mc);
259 
264 M0_INTERNAL void m0_identity_matrix_fill(struct m0_matrix *identity_mat);
265 
272 M0_INTERNAL bool m0_matrix_is_init(const struct m0_matrix *mat);
273 
274 
275 /* Verifies whether input matrix has all elements zero. */
276 M0_INTERNAL bool m0_matrix_is_null(const struct m0_matrix *mat);
277 
286 M0_INTERNAL void m0_matrix_row_copy(struct m0_matrix *des,
287  const struct m0_matrix *src,
288  uint32_t des_row, uint32_t src_row);
289 
290 M0_INTERNAL bool m0_matrix_is_square(const struct m0_matrix *mat);
291 /* __MOTR_SNS_MAT_VEC_H__ */
292 #endif
293 
294 /*
295  * Local variables:
296  * c-indentation-style: "K&R"
297  * c-basic-offset: 8
298  * tab-width: 8
299  * fill-column: 80
300  * scroll-step: 1
301  * End:
302  */
M0_INTERNAL void m0_matvec_rows_operate1(struct m0_matvec *v, uint32_t row0, uint32_t row1, m0_matvec_matrix_binary_operator_t f1, m0_parity_elem_t c1, m0_matvec_matrix_binary_operator_t f)
Definition: matvec.c:265
m0_parity_elem_t * m0_matvec_elem_get(const struct m0_matvec *v, uint32_t x)
Definition: matvec.c:80
M0_INTERNAL void m0_matrix_rows_operate(struct m0_matrix *m, uint32_t row0, uint32_t row1, m0_matvec_matrix_binary_operator_t f0, m0_parity_elem_t c0, m0_matvec_matrix_binary_operator_t f1, m0_parity_elem_t c1, m0_matvec_matrix_binary_operator_t f)
Definition: matvec.c:165
M0_INTERNAL void m0_matrix_fini(struct m0_matrix *m)
Definition: matvec.c:70
static struct m0_addb2_mach * m
Definition: consumer.c:38
M0_INTERNAL void m0_matrix_rows_operate1(struct m0_matrix *m, uint32_t row0, uint32_t row1, m0_matvec_matrix_binary_operator_t f1, m0_parity_elem_t c1, m0_matvec_matrix_binary_operator_t f)
Definition: matvec.c:199
static bool x
Definition: sm.c:168
static FILE * f
Definition: adieu.c:79
uint32_t m_height
Definition: matvec.h:57
Definition: sock.c:772
M0_INTERNAL void m0_matrix_col_operate(struct m0_matrix *m, uint32_t col, m0_parity_elem_t c, m0_matvec_matrix_binary_operator_t f)
Definition: matvec.c:234
M0_INTERNAL void m0_matrix_swap_row(struct m0_matrix *m, uint32_t r0, uint32_t r1)
Definition: matvec.c:120
M0_INTERNAL void m0_matvec_print(const struct m0_matvec *vec)
Definition: matvec.c:109
M0_INTERNAL int m0_matvec_init(struct m0_matvec *v, uint32_t sz)
Definition: matvec.c:36
M0_INTERNAL bool m0_matrix_is_null(const struct m0_matrix *mat)
Definition: matvec.c:393
M0_INTERNAL void m0_matrix_multiply(const struct m0_matrix *ma, const struct m0_matrix *mb, struct m0_matrix *mc)
Definition: matvec.c:342
M0_INTERNAL void m0_matrix_submatrix_get(const struct m0_matrix *mat, struct m0_matrix *submat, uint32_t x, uint32_t y)
Definition: matvec.c:324
m0_parity_elem_t * mv_vector
Definition: matvec.h:36
M0_INTERNAL void m0_matrix_rows_operate2(struct m0_matrix *m, uint32_t row0, uint32_t row1, m0_matvec_matrix_binary_operator_t f0, m0_parity_elem_t c0, m0_matvec_matrix_binary_operator_t f)
Definition: matvec.c:183
struct mock_balloc mb
Definition: ad.c:173
static void * vec
Definition: xcode.c:168
uint32_t mv_size
Definition: matvec.h:35
static struct m0_addb2_callback c
Definition: consumer.c:41
M0_INTERNAL void m0_matrix_row_copy(struct m0_matrix *des, const struct m0_matrix *src, uint32_t des_row, uint32_t src_row)
Definition: matvec.c:400
M0_INTERNAL void m0_matrix_vec_multiply(const struct m0_matrix *m, const struct m0_matvec *v, struct m0_matvec *r, m0_matvec_matrix_binary_operator_t mul, m0_matvec_matrix_binary_operator_t add)
Definition: matvec.c:298
M0_INTERNAL void m0_matrix_row_operate(struct m0_matrix *m, uint32_t row, m0_parity_elem_t c, m0_matvec_matrix_binary_operator_t f)
Definition: matvec.c:142
M0_INTERNAL void m0_matvec_row_operate(struct m0_matvec *v, uint32_t row, m0_parity_elem_t c, m0_matvec_matrix_binary_operator_t f)
Definition: matvec.c:155
M0_INTERNAL void m0_matvec_rows_operate(struct m0_matvec *v, uint32_t row0, uint32_t row1, m0_matvec_matrix_binary_operator_t f0, m0_parity_elem_t c0, m0_matvec_matrix_binary_operator_t f1, m0_parity_elem_t c1, m0_matvec_matrix_binary_operator_t f)
Definition: matvec.c:247
M0_INTERNAL bool m0_matrix_is_init(const struct m0_matrix *mat)
Definition: matvec.c:387
m0_parity_elem_t(* m0_matvec_matrix_binary_operator_t)(m0_parity_elem_t, m0_parity_elem_t)
Definition: matvec.h:76
M0_INTERNAL void m0_matvec_fini(struct m0_matvec *v)
Definition: matvec.c:43
M0_INTERNAL void m0_matrix_print(const struct m0_matrix *mat)
Definition: matvec.c:93
static int r[NR]
Definition: thread.c:46
M0_INTERNAL void m0_matrix_cols_operate(struct m0_matrix *m, uint32_t col0, uint32_t col1, m0_matvec_matrix_binary_operator_t f0, m0_parity_elem_t c0, m0_matvec_matrix_binary_operator_t f1, m0_parity_elem_t c1, m0_matvec_matrix_binary_operator_t f)
Definition: matvec.c:215
M0_INTERNAL void m0_matvec_rows_operate2(struct m0_matvec *v, uint32_t row0, uint32_t row1, m0_matvec_matrix_binary_operator_t f0, m0_parity_elem_t c0, m0_matvec_matrix_binary_operator_t f)
Definition: matvec.c:281
int m0_parity_elem_t
Definition: parity_ops.h:36
m0_parity_elem_t ** m_matrix
Definition: matvec.h:58
m0_parity_elem_t * m0_matrix_elem_get(const struct m0_matrix *m, uint32_t x, uint32_t y)
Definition: matvec.c:86
uint32_t m_width
Definition: matvec.h:56
M0_INTERNAL void m0_identity_matrix_fill(struct m0_matrix *identity_mat)
Definition: matvec.c:371
M0_INTERNAL void m0_matvec_swap_row(struct m0_matvec *v, uint32_t r0, uint32_t r1)
Definition: matvec.c:131
struct m0_pdclust_src_addr src
Definition: fd.c:108
M0_INTERNAL int m0_matrix_init(struct m0_matrix *m, uint32_t w, uint32_t h)
Definition: matvec.c:49
M0_INTERNAL bool m0_matrix_is_square(const struct m0_matrix *mat)
Definition: matvec.c:413
static void add(struct m0_addb2_mach *mach, uint64_t id, int n, const uint64_t *value)
Definition: addb2.c:934