void solve_matrix(uint32_t **eqn, int k) { int a, b; for(a = 0; a < k; a++) { for(b = 0; b < k; b++) { if(a == b) { continue; } uint32_t c, o; c = eqn[a][a]; o = eqn[b][a]; mul_row(eqn[a], o, k); mul_row(eqn[b], c, k); sub_row(eqn[a], eqn[b], k); } } }
static void parwork_next_rows(fsub_context_t* fsc) { /* continue processing the parallel work */ parwork_t* const w = &fsc->parwork; index_t i = INVALID_MATRIX_INDEX; index_t j = INVALID_MATRIX_INDEX; size_t row_count; parwork_lock_with_sync(w); const size_t asize = matrix_size(fsc->a); if (w->i < asize) { row_count = CONFIG_PAR_SIZE / w->j; if (row_count == 0) row_count = 1; else if ((w->i + row_count) > asize) row_count = asize - w->i; i = w->i; w->i += row_count; j = w->j; } parwork_unlock(w); /* did not get work */ if (i == INVALID_MATRIX_INDEX) return ; /* process the row */ const size_t saved_count = row_count; for (; row_count; --row_count, ++i) sub_row(fsc, i, j); /* update processed row_count */ add_atomic_ul(&w->row_count, saved_count); }