lbfm-rwth / GaussParallel

https://lbfm-rwth.github.io/GaussParallel/
GNU General Public License v2.0
2 stars 5 forks source link

Next Steps #276

Open ssiccha opened 3 years ago

ssiccha commented 3 years ago

How to make this usable?

Get an example of a small matrix where handling each is expensive, e.g. if the entries are polynomials. Does Mohamed have such an example?

Can we use Julia? If there would be a lot of interest, then it should be possible that someone (not Jendrik and me ^^) could rewrite this in Julia.

ssiccha commented 3 years ago

Three sessions on emmy: HPC-GAP

gap> n := 15000;; q := 5;;
gap> A := RandomMat(n, n, GF(q));;
gap> GAUSS_MeasureContention(15, q, A);
Make sure you called GAP with sufficient preallocated memory via `-m` if you try non-trivial examples! Otherwise garbage collection will be a big overhead.

Starting the parallel algorithm:
    EchelonMatTransformationBlockwise.

Wall time parallel execution (ms): 580140.
...

=> 580s GAP with our package:

gap> n := 15000;; q := 5;;
gap> A := RandomMat(n, n, GF(q));;
...
gap> numberBlocks := 15;
15   
gap>     res := GAUSS_GET_REAL_TIME_OF_FUNCTION_CALL(
>         EchelonMatTransformationBlockwise,
>         [A, rec( galoisField := GF(q), 
>                  numberBlocks := numberBlocks )]).time;
3914793569

=> 3914s (the return value is in nanoseconds)

GAP with the Gauss package

gap> n := 15000;; q := 5;;
gap> A := RandomMat(n, n, GF(q));;
gap> ReadPackage("gausspar", "gap/benchmarking/timing.g");;
gap> benchStd := GAUSS_GET_REAL_TIME_OF_FUNCTION_CALL(EchelonMatTransformation, [A]).time;
5799779082

=> 5799s.