Changeset 06ee23 in git


Ignore:
Timestamp:
Feb 15, 2007, 9:28:08 AM (17 years ago)
Author:
Michael Brickenstein <bricken@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
77f10ac0b42b5c408bdf79a5f410a02810a233d3
Parents:
b3daab03c4cc77a25533037671204cd7b2ba146f
Message:
* bricken: cached noro more memory efficient


git-svn-id: file:///usr/local/Singular/svn/trunk@9853 2c84dea3-7e68-4137-9b89-c4e89433aadc
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/tgb.cc

    rb3daab r06ee23  
    55*  Computer Algebra System SINGULAR     *
    66****************************************/
    7 /* $Id: tgb.cc,v 1.132 2007-02-15 07:43:36 bricken Exp $ */
     7/* $Id: tgb.cc,v 1.133 2007-02-15 08:28:08 bricken Exp $ */
    88/*
    99* ABSTRACT: slimgb and F4 implementation
     
    23282328  DataNoroCacheNode* getCacheReference(poly term);
    23292329  NoroCache(){
     2330    buffer=NULL;
    23302331#ifdef NORO_RED_ARRAY_RESERVER
    23312332    reserved=0;
    2332    
    23332333    recursionPolyBuffer=(poly*)omalloc(1000000*sizeof(poly));
    23342334#endif
     
    23882388  //cache_map impl;
    23892389  NoroCacheNode root;
    2390  
     2390  number* buffer;
    23912391};
    23922392void NoroCache::evaluateRows(){
    23932393  //after that can evaluate placeholders
    23942394  int i;
     2395  buffer=(number*) omalloc(nIrreducibleMonomials*sizeof(number));
    23952396  for(i=0;i<root.branches_len;i++){
    23962397    evaluateRows(1,root.branches[i]);
    23972398  }
     2399  omfree(buffer);
     2400  buffer=NULL;
    23982401}
    23992402void NoroCache::evaluateRows(int level, NoroCacheNode* node){
     
    24092412    if (dn->value_len!=backLinkCode){
    24102413      dn->row=new DenseRow();
    2411       dn->row->array=(number*) omalloc(nIrreducibleMonomials*sizeof(number));
     2414      DenseRow* row=dn->row;
     2415      memset(buffer,0,sizeof(number)*nIrreducibleMonomials);
     2416      poly p=dn->value_poly;
     2417      if (p==NULL) {row->array=NULL;row->begin=0;row->end=0; return;}
     2418      int i=0;
     2419      int idx;
     2420      number* a=buffer;
     2421      while(p){
     2422        DataNoroCacheNode* ref=getCacheReference(p);
     2423       
     2424        idx=ref->term_index;
     2425        assume(idx>=0);
     2426        a[idx]=p_GetCoeff(p,currRing);
     2427        if (i==0) row->begin=idx;
     2428        i++;
     2429        pIter(p);
     2430      }
     2431      row->end=idx+1;
     2432      assume(row->end>row->begin);
     2433      int len=row->end-row->begin;
     2434      row->array=(number*) omalloc((len)*sizeof(number));
     2435      memcpy(row->array,a+row->begin,len*sizeof(number));
     2436      /*dn->row->array=(number*) omalloc(nIrreducibleMonomials*sizeof(number));
    24122437      dn->row->begin=0;
    24132438      dn->row->end=nIrreducibleMonomials;
     
    24202445      i=0;
    24212446      while(p){
    2422         DataNoroCacheNode* ref=getCacheReference(p);
    2423 
    2424         int idx=ref->term_index;
     2447
    24252448        if (i==0){
    24262449          dn->row->begin=idx;
     
    24322455        row[idx]=p_GetCoeff(p,currRing);
    24332456        pIter(p);
    2434       }
     2457      }*/
     2458     
    24352459      //p_Delete(&dn->value_poly,currRing);
    24362460    }
     
    24472471    } else {
    24482472      DenseRow* ref_row=ref->row;
    2449       int j;
     2473      if (ref_row==NULL) continue;
     2474      number* ref_begin=ref_row->array;
     2475      number* ref_end=ref_row->array+(ref_row->end-ref_row->begin);
     2476      number* my_pos=row+ref_row->begin;
     2477      //TODO npisOne distinction
     2478      while(ref_begin!=ref_end){
     2479       
     2480        *my_pos=npAdd(*my_pos,npMult(coef,*ref_begin));
     2481        ++ref_begin;
     2482        ++my_pos;
     2483      }
     2484      /*int j;
    24502485      if (!(npIsOne(coef))){
    24512486        for(j=ref_row->begin;j<ref_row->end;j++){
     
    24532488        }
    24542489      } else{
     2490       
    24552491        for(j=ref_row->begin;j<ref_row->end;j++)
    24562492          row[j]=npAdd(row[j],ref_row->array[j]);
    2457       }
     2493      }*/
    24582494    }
    24592495  }
     
    29933029    }
    29943030    mass_add(p,pn,c);
     3031    omfree(p);
    29953032    return;
    29963033    /*if (TEST_OPT_PROT)
Note: See TracChangeset for help on using the changeset viewer.