Changeset b66eeb in git


Ignore:
Timestamp:
Feb 27, 2007, 9:03:44 AM (16 years ago)
Author:
Michael Brickenstein <bricken@…>
Branches:
(u'spielwiese', '0d6b7fcd9813a1ca1ed4220cfa2b104b97a0a003')
Children:
3a2985ff73e9ce0715441e808a52f8464a3ca803
Parents:
1b2d84d14539fad2f4d0267662ac50c97f9d94e7
Message:
*bricken: try vectorizing


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

Legend:

Unmodified
Added
Removed
  • kernel/tgb_internal.h

    r1b2d84 rb66eeb  
    55*  Computer Algebra System SINGULAR     *
    66****************************************/
    7 /* $Id: tgb_internal.h,v 1.66 2007-02-26 15:14:47 bricken Exp $ */
     7/* $Id: tgb_internal.h,v 1.67 2007-02-27 08:03:44 bricken Exp $ */
    88/*
    99 * ABSTRACT: tgb internal .h file
     
    821821return res;
    822822}
    823 template <class number_type> void add_coef_times_sparse(number_type* const temp_array,int temp_size,SparseRow<number_type>* row, number coef){
     823template <class number_type> void add_coef_times_sparse(number_type* const temp_array,
     824int temp_size,SparseRow<number_type>* row, number coef){
    824825  int j;
    825826  number_type* const coef_array=row->coef_array;
    826827  int* const idx_array=row->idx_array;
    827828  const int len=row->len;
    828   for(j=0;j<len;j++){
    829     int idx=idx_array[j];
    830     assume(!(npIsZero(coef)));
    831     assume(!(npIsZero((number) coef_array[j])));
    832     temp_array[idx]=F4mat_to_number_type(npAddM((number) temp_array[idx],npMultM((number) coef_array[j],coef)));
    833     assume(idx<temp_size);
     829  tgb_uint32 buffer[256];
     830  const tgb_uint32 prime=npPrimeM;
     831  const tgb_uint32 c=F4mat_to_number_type(coef);
     832  assume(!(npIsZero(coef)));
     833  for(j=0;j<len;j=j+256){
     834    const int bound=std::min(j+256,len);
     835    int i;
     836    int bpos=0;
     837    for(i=j;i<bound;i++){
     838      buffer[bpos++]=coef_array[i];
     839    }
     840    int bpos_bound=bound-j;
     841    for(i=0;i<bpos_bound;i++){
     842       buffer[i]*=c;
     843     }
     844    for(i=0;i<bpos_bound;i++){
     845       buffer[i]=buffer[i]%prime;
     846    }
     847    bpos=0;
     848    for(i=j;i<bound;i++){
     849      int idx=idx_array[i];
     850      assume(bpos<256);
     851      assume(!(npIsZero((number) buffer[bpos])));
     852      temp_array[idx]=F4mat_to_number_type(npAddM((number) temp_array[idx], (number) buffer[bpos++]));
     853      assume(idx<temp_size);
     854    }
     855   
    834856  }
    835857}
Note: See TracChangeset for help on using the changeset viewer.