44 lines
983 B
Plaintext
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 |