Skip to content

Commit fdc3d03

Browse files
committed
Feat: now update Matrix object in place
1 parent c8605fc commit fdc3d03

File tree

1 file changed

+24
-14
lines changed

1 file changed

+24
-14
lines changed

experimental/algorithm/LAGraph_CFL_reachability_advanced.c

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ typedef struct {
151151
void matrix_update(Matrix *matrix) {
152152
GrB_Matrix_nvals(&matrix->nvals, matrix->base);
153153
GrB_Matrix_nrows(&matrix->size, matrix->base);
154-
GrB_get(matrix->base, &matrix->format, GrB_STORAGE_ORIENTATION_HINT);
154+
// GrB_get(matrix->base, &matrix->format, GrB_STORAGE_ORIENTATION_HINT);
155155
}
156156

157157
Matrix matrix_from_base(GrB_Matrix matrix) {
@@ -202,11 +202,15 @@ void matrix_to_format(Matrix *matrix, int32_t format, bool is_both) {
202202
return;
203203
}
204204

205-
GrB_Info matrix_clear(Matrix *A) { return GrB_Matrix_clear(A->base); }
205+
GrB_Info matrix_clear(Matrix *A) {
206+
GrB_Info result = GrB_Matrix_clear(A->base);
207+
matrix_update(A);
208+
return result;
209+
}
206210

207211
GrB_Info matrix_clear_format(Matrix *A) {
208212
if (!A->is_both) {
209-
matrix_clear(A);
213+
return matrix_clear(A);
210214
}
211215

212216
matrix_to_format(A, GrB_ROWMAJOR, false);
@@ -229,8 +233,12 @@ GrB_Info matrix_clear_empty(Matrix *A) {
229233
}
230234

231235
GrB_Info matrix_dup(Matrix *output, Matrix *input) {
232-
return GrB_Matrix_assign(output->base, GrB_NULL, GrB_NULL, input->base, GrB_ALL,
233-
input->size, GrB_ALL, input->size, GrB_NULL);
236+
GrB_Info result =
237+
GrB_Matrix_assign(output->base, GrB_NULL, GrB_NULL, input->base, GrB_ALL,
238+
input->size, GrB_ALL, input->size, GrB_NULL);
239+
240+
matrix_update(output);
241+
return result;
234242
}
235243

236244
GrB_Info matrix_dup_format(Matrix *output, Matrix *input) {
@@ -266,6 +274,7 @@ GrB_Info matrix_mxm(Matrix *output, Matrix *first, Matrix *second, bool accum) {
266274
GrB_Info result = GrB_mxm(output->base, GrB_NULL, accum ? GxB_ANY_BOOL : GrB_NULL,
267275
GxB_ANY_PAIR_BOOL, first->base, second->base, GrB_NULL);
268276
IS_ISO(output->base, "MXM output");
277+
matrix_update(output);
269278
return result;
270279
}
271280

@@ -324,8 +333,11 @@ GrB_Info matrix_rmxm_empty(Matrix *output, Matrix *first, Matrix *second, bool a
324333
GrB_Info matrix_wise(Matrix *output, Matrix *first, Matrix *second, bool accum) {
325334
GrB_BinaryOp accum_op = accum ? GxB_ANY_BOOL : GrB_NULL;
326335

327-
return GrB_eWiseAdd(output->base, GrB_NULL, accum_op, GxB_ANY_BOOL, first->base,
328-
second->base, GrB_NULL);
336+
GrB_Info result = GrB_eWiseAdd(output->base, GrB_NULL, accum_op, GxB_ANY_BOOL,
337+
first->base, second->base, GrB_NULL);
338+
339+
matrix_update(output);
340+
return result;
329341
}
330342

331343
GrB_Info matrix_wise_format(Matrix *output, Matrix *first, Matrix *second, bool accum) {
@@ -384,8 +396,11 @@ GrB_Info matrix_wise_empty(Matrix *output, Matrix *first, Matrix *second, bool a
384396
}
385397

386398
GrB_Info matrix_rsub(Matrix *output, Matrix *mask) {
387-
return GrB_eWiseAdd(output->base, mask->base, GrB_NULL, GxB_ANY_BOOL, output->base,
388-
output->base, GrB_DESC_RSC);
399+
GrB_Info result = GrB_eWiseAdd(output->base, mask->base, GrB_NULL, GxB_ANY_BOOL,
400+
output->base, output->base, GrB_DESC_RSC);
401+
402+
matrix_update(output);
403+
return result;
389404
}
390405

391406
GrB_Info matrix_rsub_format(Matrix *output, Matrix *mask) {
@@ -698,7 +713,6 @@ GrB_Info LAGraph_CFL_reachability_adv(
698713

699714
for (int32_t i = 0; i < nonterms_count; i++) {
700715
GRB_TRY(matrix_clear_empty(&temp_matrices[i]));
701-
matrix_update(&temp_matrices[i]);
702716
}
703717

704718
TIMER_START();
@@ -707,14 +721,12 @@ GrB_Info LAGraph_CFL_reachability_adv(
707721

708722
matrix_mxm_empty(&temp_matrices[bin_rule.nonterm], &matrices[bin_rule.prod_A],
709723
&delta_matrices[bin_rule.prod_B], false);
710-
matrix_update(&temp_matrices[bin_rule.nonterm]);
711724
}
712725
TIMER_STOP("MXM 1", &mxm1);
713726

714727
TIMER_START()
715728
for (int32_t i = 0; i < nonterms_count; i++) {
716729
matrix_wise_empty(&matrices[i], &matrices[i], &delta_matrices[i], false);
717-
matrix_update(&matrices[i]);
718730
}
719731
TIMER_STOP("WISE 1", &wise1);
720732

@@ -725,7 +737,6 @@ GrB_Info LAGraph_CFL_reachability_adv(
725737
matrix_rmxm_empty(&temp_matrices[bin_rule.nonterm],
726738
&delta_matrices[bin_rule.prod_A],
727739
&matrices[bin_rule.prod_B], true);
728-
matrix_update(&temp_matrices[bin_rule.nonterm]);
729740
}
730741
TIMER_STOP("MXM 2", &mxm2);
731742

@@ -738,7 +749,6 @@ GrB_Info LAGraph_CFL_reachability_adv(
738749
TIMER_START();
739750
for (int32_t i = 0; i < nonterms_count; i++) {
740751
matrix_rsub_empty(&delta_matrices[i], &matrices[i]);
741-
matrix_update(&delta_matrices[i]);
742752
}
743753
TIMER_STOP("WISE 3 (MASK)", &rsub);
744754

0 commit comments

Comments
 (0)