コード例 #1
0
ファイル: shamir.c プロジェクト: TierNolan/Shamir
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);
        }
    }

}
コード例 #2
0
ファイル: fsub_pthread.c プロジェクト: texane/fsub
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);
}