Here is an example matrix:
A := LinearAlgebra:-RandomMatrix(15,20,density=4./10) mod 2;
p := 2; # prime
The first thing to do is to pick a hardware datatype and convert A into a matrix of hardware integers or floats. I will use the integer datatype, but on a 64-bit machine you will need to use integer or float. Unfortunately there is no support for binary matrices or sparse matrices, so for large sparse matrices you can waste a lot of space and time.
dtype := integer;
A := LinearAlgebra:-Modular:-Mod(p, A, dtype);
The syntax of RowReduce assumes an augmented matrix:
RowReduce(prime, matrix, rows, columns, variables, 'determinant', 'pseudo-determinant', 'rank', 'signature', 'inconsistent row count', RREF);
variables = the number of columns that are variables, and the arguments in quotes should be names which are assigned the rank, determinant, etc, or 0, if those things are not wanted.
In our example we have 15 rows and 20 columns. Let's first reduce the matrix to row echelon form and then to reduced row echelon form.
LinearAlgebra:-Modular:-RowReduce(p, A, 15, 20, 20, 0, 0, 0, 0, 0, false);
LinearAlgebra:-Modular:-RowReduce(p, A, 15, 20, 20, 0, 0, 0, 0, 0, true);
Now if we were solving a system with 5 right hand side (ie: 15 x 15 matrix = 15 x 5 matrix), the syntax would be the following:
LinearAlgebra:-Modular:-RowReduce(p, A, 15, 20, 15, 0, 0, 0, 0, 0, false);
You will get an error if the system is inconsistent (no solution), which is likely in this case.