[SCM] Fast arithmetic with dense matrices over F_{2^e} branch, upstream, updated. 9faf6ece9a183a703670566609063ab274b1c544
Martin Albrecht
martinralbrecht at googlemail.com
Mon Sep 10 12:24:26 UTC 2012
The following commit has been merged in the upstream branch:
commit 59e79b4d68c65d89bb820afce628b5eaef930b2f
Author: Martin Albrecht <martinralbrecht at googlemail.com>
Date: Wed Aug 15 11:25:50 2012 +0100
added first tests for degrees > 10
diff --git a/src/gf2e.h b/src/gf2e.h
index 13193bf..741bd20 100644
--- a/src/gf2e.h
+++ b/src/gf2e.h
@@ -31,7 +31,7 @@
#include <m4ri/m4ri.h>
#include <m4rie/gf2x.h>
-#define M4RIE_MAX_DEGREE 10
+#define M4RIE_MAX_DEGREE 16
/**
* \brief \GF2E
diff --git a/src/mzd_poly.h b/src/mzd_poly.h
index 1546d1a..4bfd932 100644
--- a/src/mzd_poly.h
+++ b/src/mzd_poly.h
@@ -29,6 +29,22 @@
static inline void _poly_add(mzd_t **c, const mzd_t **a, const mzd_t **b,const unsigned int length) {
switch(length) {
+ case 32: mzd_add(c[31], a[31], b[31]);
+ case 31: mzd_add(c[30], a[30], b[30]);
+ case 30: mzd_add(c[29], a[29], b[29]);
+ case 29: mzd_add(c[28], a[28], b[28]);
+ case 28: mzd_add(c[27], a[27], b[27]);
+ case 27: mzd_add(c[26], a[26], b[26]);
+ case 26: mzd_add(c[25], a[25], b[25]);
+ case 25: mzd_add(c[24], a[24], b[24]);
+ case 24: mzd_add(c[23], a[23], b[23]);
+ case 23: mzd_add(c[22], a[22], b[22]);
+ case 22: mzd_add(c[21], a[21], b[21]);
+ case 21: mzd_add(c[20], a[20], b[20]);
+ case 20: mzd_add(c[19], a[19], b[19]);
+ case 19: mzd_add(c[18], a[18], b[18]);
+ case 18: mzd_add(c[17], a[17], b[17]);
+ case 17: mzd_add(c[16], a[16], b[16]);
case 16: mzd_add(c[15], a[15], b[15]);
case 15: mzd_add(c[14], a[14], b[14]);
case 14: mzd_add(c[13], a[13], b[13]);
diff --git a/tests/test_elimination.cc b/tests/test_elimination.cc
index 4b41b4f..02a46fd 100644
--- a/tests/test_elimination.cc
+++ b/tests/test_elimination.cc
@@ -75,7 +75,7 @@ int test_equality(gf2e *ff, rci_t m, rci_t n) {
int test_batch(gf2e *ff, rci_t m, rci_t n) {
int fail_ret = 0;
- printf("elim: k: %2d, minpoly: 0x%03x m: %5d, n: %5d ",(int)ff->degree, (unsigned int)ff->minpoly, (int)m, (int)n);
+ printf("elim: k: %2d, minpoly: 0x%05x m: %5d, n: %5d ",(int)ff->degree, (unsigned int)ff->minpoly, (int)m, (int)n);
if(m == n) {
m4rie_check( test_equality(ff, m, n) == 0); printf("."); fflush(0);
@@ -96,14 +96,14 @@ int test_batch(gf2e *ff, rci_t m, rci_t n) {
int main(int argc, char **argv) {
srandom(17);
- gf2e *ff[11];
+ gf2e *ff[17];
int fail_ret = 0;
- for(int k=2; k<=10; k++) {
+ for(int k=2; k<=16; k++) {
ff[k] = gf2e_init(irreducible_polynomials[k][1]);
}
- for(int k=2; k<=10; k++) {
+ for(int k=2; k<=16; k++) {
fail_ret += test_batch(ff[k], 2, 5);
fail_ret += test_batch(ff[k], 5, 10);
fail_ret += test_batch(ff[k], 1, 1);
@@ -127,7 +127,7 @@ int main(int argc, char **argv) {
fail_ret += test_batch(ff[k], 10, 200);
};
- for(int k=2; k<=10; k++) {
+ for(int k=2; k<=16; k++) {
gf2e_free(ff[k]);
}
diff --git a/tests/test_multiplication.cc b/tests/test_multiplication.cc
index 7ed2a8b..8fc3008 100644
--- a/tests/test_multiplication.cc
+++ b/tests/test_multiplication.cc
@@ -25,6 +25,7 @@
******************************************************************************/
#include "testing.h"
+#include <unistd.h>
int test_addmul(gf2e *ff, rci_t m, rci_t n, rci_t l) {
int fail_ret = 0;
@@ -177,7 +178,7 @@ int test_scalar(gf2e *ff, rci_t m, rci_t n) {
int test_batch(gf2e *ff, rci_t m, rci_t l, rci_t n) {
int fail_ret = 0;
- printf("mul: k: %2d, minpoly: 0x%03x m: %5d, l: %5d, n: %5d ",(int)ff->degree, (unsigned int)ff->minpoly, (int)m, (int)l, (int)n);
+ printf("mul: k: %2d, minpoly: 0x%05x m: %5d, l: %5d, n: %5d ",(int)ff->degree, (unsigned int)ff->minpoly, (int)m, (int)l, (int)n);
m4rie_check(test_scalar(ff, m, m) == 0); printf("."); fflush(0);
m4rie_check(test_scalar(ff, l, l) == 0); printf("."); fflush(0);
@@ -217,14 +218,30 @@ int test_batch(gf2e *ff, rci_t m, rci_t l, rci_t n) {
int main(int argc, char **argv) {
srandom(17);
- gf2e *ff[11];
+ int runlong = 0;
+
+ int c;
+ while ((c = getopt(argc, argv, "l")) != -1) {
+ switch (c) {
+ case 'l':
+ runlong = 1;
+ break;
+ case '?':
+ printf(" -l run long tests.\n");
+ abort();
+ default:
+ abort();
+ }
+ }
+
+ gf2e *ff[17];
int fail_ret = 0;
- for(int k=2; k<=10; k++) {
+ for(int k=2; k<=16; k++) {
ff[k] = gf2e_init(irreducible_polynomials[k][1]);
}
- for(int k=2; k<=10; k++) {
+ for(int k=2; k<=16; k++) {
fail_ret += test_batch(ff[k], 1, 1, 1);
fail_ret += test_batch(ff[k], 1, 2, 3);
fail_ret += test_batch(ff[k], 11, 12, 13);
@@ -232,11 +249,13 @@ int main(int argc, char **argv) {
fail_ret += test_batch(ff[k], 13, 2, 90);
fail_ret += test_batch(ff[k], 32, 33, 34);
fail_ret += test_batch(ff[k], 63, 64, 65);
- fail_ret += test_batch(ff[k], 127, 128, 129);
- fail_ret += test_batch(ff[k], 200, 20, 112);
+ if(k<=12 || runlong) {
+ fail_ret += test_batch(ff[k], 127, 128, 129);
+ fail_ret += test_batch(ff[k], 200, 20, 112);
+ }
};
- for(int k=2; k<=10; k++) {
+ for(int k=2; k<=16; k++) {
gf2e_free(ff[k]);
}
diff --git a/tests/test_smallops.cc b/tests/test_smallops.cc
index 52f2c51..01bc0c6 100644
--- a/tests/test_smallops.cc
+++ b/tests/test_smallops.cc
@@ -189,10 +189,10 @@ int test_batch(gf2e *ff, int m, int n) {
int main(int argc, char **argv) {
- gf2e *ff[11];
+ gf2e *ff[17];
int fail_ret = 0;
- for(int k=2; k<=10; k++) {
+ for(int k=2; k<=16; k++) {
ff[k] = gf2e_init(irreducible_polynomials[k][1]);
}
@@ -214,7 +214,7 @@ int main(int argc, char **argv) {
fail_ret += test_batch(ff[k], 217, 2);
}
- for(int k=2; k<=10; k++) {
+ for(int k=2; k<=16; k++) {
gf2e_free(ff[k]);
}
--
Fast arithmetic with dense matrices over F_{2^e}
More information about the debian-science-commits
mailing list