NTL_CLIENT void task(ZZ_pContext context, ZZ_pX *f, vec_pair_ZZ_pX_long *v) { fprintf(stderr, "starting %s\n", CurrentThreadID().c_str()); context.restore(); CanZass(*v, *f); fprintf(stderr, "stopping %s\n", CurrentThreadID().c_str()); }
NTL_CLIENT int main() { zz_p::init(17); zz_pX P; BuildIrred(P, 10); zz_pE::init(P); zz_pEX f, g, h; random(f, 20); SetCoeff(f, 20); random(h, 20); g = MinPolyMod(h, f); if (deg(g) < 0) Error("bad zz_pEXTest (1)"); if (CompMod(g, h, f) != 0) Error("bad zz_pEXTest (2)"); vec_pair_zz_pEX_long v; long i; for (i = 0; i < 5; i++) { long n = RandomBnd(20)+1; cerr << n << " "; random(f, n); SetCoeff(f, n); v = CanZass(f); g = mul(v); if (f != g) cerr << "oops1\n"; long i; for (i = 0; i < v.length(); i++) if (!DetIrredTest(v[i].a)) Error("bad zz_pEXTest (3)"); } cerr << "\n"; cerr << "zz_pEXTest OK\n"; }
int main() { ZZ p; cin >> p; ZZ_p::init(p); ZZ_pX f; cin >> f; vec_pair_ZZ_pX_long factors; double t = GetTime(); CanZass(factors, f, 1); t = GetTime()-t; cerr << "total time: " << t << "\n"; ZZ_pX ff; mul(ff, factors); if (f != ff) Error("Incorrect factorization!!"); sort(factors); cerr << "factorization pattern:"; long i; for (i = 0; i < factors.length(); i++) { cerr << " "; long k = factors[i].b; if (k > 1) cerr << k << "*"; cerr << deg(factors[i].a); } cerr << "\n"; cout << factors << "\n"; return 0; }
NTL_CLOSE_NNS NTL_CLIENT int main() { GF2X p; BuildIrred(p, 200); GF2E::init(p); GF2EX f; SetCoeff(f, 41); SetCoeff(f, 1); SetCoeff(f, 0); GF2X a; SetCoeff(a, 117); SetCoeff(a, 10); SetCoeff(a, 0); GF2EX g, h; SetX(g); SetCoeff(g, 0, to_GF2E(a)); MinPolyMod(h, g, f); f = h; vec_pair_GF2EX_long u; CanZass(u, f, 1); cerr << "factorization pattern:"; long i; for (i = 0; i < u.length(); i++) { cerr << " "; long k = u[i].b; if (k > 1) cerr << k << "*"; cerr << deg(u[i].a); } cerr << "\n\n\n"; GF2EX ff; mul(ff, u); if (f != ff || u.length() != 11) { cerr << "GF2EXTest NOT OK\n"; return 1; } { cerr << "multiplication test...\n"; BuildIrred(p, 512); GF2E::init(p); GF2EX A, B, C, C1; random(A, 512); random(B, 512); double t; long i; t = GetTime(); for (i = 0; i < 10; i++) PlainMul(C, A, B); t = GetTime() - t; cerr << "time for plain mul of degree 511 over GF(2^512): " << (t/10) << "s\n"; t = GetTime(); for (i = 0; i < 10; i++) mul(C1, A, B); t = GetTime() - t; cerr << "time for karatsuba mul of degree 511 over GF(2^512): " << (t/10) << "s\n"; if (C != C1) { cerr << "GF2EXTest NOT OK\n"; return 1; } } { cerr << "multiplication test...\n"; BuildIrred(p, 16); GF2E::init(p); GF2EX A, B, C, C1; random(A, 512); random(B, 512); double t; t = GetTime(); for (i = 0; i < 10; i++) PlainMul(C, A, B); t = GetTime() - t; cerr << "time for plain mul of degree 511 over GF(2^16): " << (t/10) << "s\n"; t = GetTime(); for (i = 0; i < 10; i++) mul(C1, A, B); t = GetTime() - t; cerr << "time for karatsuba mul of degree 511 over GF(2^16): " << (t/10) << "s\n"; if (C != C1) { cerr << "GF2EXTest NOT OK\n"; return 1; } } cerr << "GF2EXTest OK\n"; return 0; }
NTL_CLIENT //namespace NTL { extern double ip_time; } int main(int argc, char **argv) { ArgMapping amap; long n = 1024; amap.arg("n", n, "degree bound"); long l = 1024; amap.arg("l", l, "coeff bound"); long nt = 1; amap.arg("nt", nt, "num threads"); amap.parse(argc, argv); cerr << "\n\n=============================\n\n"; cerr << "n=" << n << "\n"; cerr << "l=" << l << "\n"; cerr << "nt=" << nt << "\n"; SetSeed(ZZ(0)); SetNumThreads(nt); ZZ p; RandomPrime(p, l); ZZ_p::init(p); ZZ_pX f; random(f, n); SetCoeff(f, n); Vec< Pair<ZZ_pX, long> > fac; double t; ZZ_pXFileThresh = 1e9; FILE *fp; unsigned long A[4], B[4]; int loadavg; fp = fopen("/proc/stat","r"); fscanf(fp,"cpu %lu %lu %lu %lu",&A[0],&A[1],&A[2],&A[3]); fclose(fp); t = GetTime(); CanZass(fac, f, 1); t = GetTime()-t; double NTLTime = t; fp = fopen("/proc/stat","r"); fscanf(fp,"cpu %lu %lu %lu %lu",&B[0],&B[1],&B[2],&B[3]); fclose(fp); // we multiply by 20 -- that's the total number of cores loadavg = int(100.0*20.0*double((B[0]+B[1]+B[2]) - (A[0]+A[1]+A[2])) / double((B[0]+B[1]+B[2]+B[3]) - (A[0]+A[1]+A[2]+A[3]))); fprintf(stderr, "CPU utilization: %d\%\n",loadavg); struct rusage rusage; getrusage( RUSAGE_SELF, &rusage ); cerr << "MAX_RSS="<<rusage.ru_maxrss << "KB" << endl; cerr << "Fac: " << t << "\n"; //cerr << "ip_time: " << ip_time << "\n"; delete NTLThreadPool; NTLThreadPool = 0; }