cuElim/include/cuelim_m4ri.cuh

44 lines
983 B
Plaintext

#ifndef CUELIM_M4RI_CUH
#define CUELIM_M4RI_CUH
#include "gf2/gf2_mul.cuh"
#include "gf2/gf2_elim.cuh"
#include <m4ri/m4ri.h>
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