Beispiel #1
0
 SchreyerOrder *value() {
   if (symm1_result == 0)
     {
       symm1_result = SchreyerOrder::create(M);
       if (n >= 0)
         {
           symm1_base = M->make_one();
           symm1(0, n);
           M->remove(symm1_base);
         }
     }
   return symm1_result;
 }
Beispiel #2
0
 FreeModule *value() {
     if (symm1_result == 0)
     {
         symm1_result = F->get_ring()->make_FreeModule();
         if (n >= 0)
         {
             symm1_deg = D->make_one();
             symm1(0, n);
             D->remove(symm1_deg);
         }
     }
     return symm1_result;
 }
Beispiel #3
0
void MTLmarks::DmatDmatRun(std::string benchmark) {
    
    if(benchmark == "dmatdmatadd"){
        mtl_result = dmatdmatadd(size, steps);
    }
    else if(benchmark == "dmatdmatmult"){
        mtl_result = dmatdmatmult(size, steps);
    }
    else if(benchmark == "cmajordmdmmult"){
        mtl_result = cmajordmdmmult(size, steps);
    }
    else if(benchmark == "rmajordmdmmult"){
        mtl_result = rmajordmdmmult(size, steps);
    }
    else if(benchmark == "nestedprod"){
        mtl_result = nestedprod(size, steps);
    }
    else if(benchmark == "symm1"){
        mtl_result = symm1(size, steps);
    }
    else if(benchmark == "symm1rect"){
        mtl_result = symm1rect(size, steps);
    }
    else if(benchmark == "symm2"){
        mtl_result = symm2(size, steps);
    }
    else if(benchmark == "syr2k"){
        mtl_result = syr2k(size, steps);
    }
    else if(benchmark == "syr2krect"){
        mtl_result = syr2krect(size, steps);
    }
    else if(benchmark == "syrk"){
        mtl_result = syrk(size, steps);
    }
    else if(benchmark == "syrkrect"){
        mtl_result = syrkrect(size, steps);
    }
    else if(benchmark == "custom"){
        mtl_result = custom(size, steps);
    }
    else{
        std::cerr << "MTLmarks benchmark does not exist." << std::endl;
        exit(1);
    }
    
}
Beispiel #4
0
  SymmMatrix(const Matrix *m0, int p)
      : symm1_next(0), R(m0->get_ring()), ncols(m0->n_cols()), m(m0), result()
  {
    const FreeModule *Fp = m0->rows()->symm(p);
    const FreeModule *Gp = m0->cols()->symm(p);

    int *dp = R->degree_monoid()->make_new(m->degree_shift());
    R->degree_monoid()->power(dp, p, dp);

    result = MatrixConstructor(Fp, Gp, dp);

    if (p >= 0)
      {
        vec f = R->e_sub_i(0);
        symm1(f, 0, p);  // consumes f
      }
  }
Beispiel #5
0
 void symm1(vec f,            // product so far generated
            int lastn,        // can use lastn..n_cols()-1 in product
            int pow)   // remaining power to take
 {
   if (pow == 0)
     result.set_column(symm1_next++, f);
   else
     {
       for (int i=lastn; i<ncols; i++)
         {
           ring_elem r = m->elem(0,i);
           vec h = R->copy_vec(f);
           R->mult_vec_to(h,r,false);
           symm1(h, i, pow-1);
         }
       R->remove_vec(f);
     }
 }
Beispiel #6
0
    void symm1(int lastn,      // can use lastn..rank()-1 in product
               int pow) const   // remaining power to take
    {
        if (pow == 0)
            symm1_result->append(symm1_deg);
        else
        {
            for (int i=lastn; i<F->rank(); i++)
            {
                // increase symm1_deg, with e_i
                D->mult(symm1_deg, F->degree(i), symm1_deg);

                symm1(i, pow-1);

                // decrease symm1_deg back
                D->divide(symm1_deg, F->degree(i), symm1_deg);
            }
        }
    }
Beispiel #7
0
  void symm1(int lastn,      // can use lastn..rank()-1 in product
             int pow)       // remaining power to take
  {
    if (pow == 0)
      symm1_result->append(symm1_next++, symm1_base);
    else
      {
        for (int i=lastn; i<S->rank(); i++)
          {
            // increase symm1_base with e_i
            M->mult(symm1_base, S->base_monom(i), symm1_base);

            symm1(i, pow-1);

            // decrease symm1_base back
            M->divide(symm1_base, S->base_monom(i), symm1_base);
          }
      }
  }