#ifndef CUELIM_M4RI_CUH #define CUELIM_M4RI_CUH #include "gf2/gf2_mul.cuh" #include "gf2/gf2_elim.cuh" #include namespace gf2 { void mzdread(mzd_t *A, MatGF2 &mat) { assert(A->nrows == mat.nrows && A->ncols == mat.ncols); for (size_t r = 0; r < A->nrows; r++) { for (size_t cn = 0; cn < A->width; cn++) { *mat.at_base(r, cn) = A->rows[r][cn]; } } } void mzdwrite(MatGF2 &mat, mzd_t *A) { assert(A->nrows == mat.nrows && A->ncols == mat.ncols); for (size_t r = 0; r < mat.nrows; r++) { for (size_t cn = 0; cn < mat.width; cn++) { A->rows[r][cn] = *mat.at_base(r, cn); } } } } size_t gpu_mzd_elim(mzd_t *A) { gf2::MatGF2 mat(A->nrows, A->ncols); gf2::mzdread(A, mat); gf2::ElimResult res = mat.gpu_elim(); gf2::mzdwrite(mat, A); return res.rank; } #endif