close Warning: Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.

Opened 13 years ago

Closed 13 years ago

Last modified 13 years ago

#1434 closed doubt (fixed)

Efficiency in Polyn Application

Reported by: Pedro Gea Owned by: Víctor de Buen Remiro
Priority: high Milestone: Mantainance
Component: Kernel Version:
Severity: critical Keywords:
Cc:

Description

Se aprecia algo de ineficiencia al aplicar un polinomio de grado 0 en comparación con multiplicar por un valor real. ¿Tiene alguna explicación? ¿podría subsanarse esto?

En el ejemplo se ve como incluso interesa comprobar el grado del polinomio y prescindir de su aplicación:

Serie s = SubSer(Gaussian(0, 1, C), y2000, y2003);
Polyn p = 0.4;

Real t1 = Copy(Time);
Set For(1, 1000, Real (Real i) {
  Serie If(Degree(p)==0, Coef(p, 0) * s, p : s);
1});
Real t2 = Copy(Time);
Set For(1, 1000, Real (Real i) {
  Serie p : s; 
1});
Real t3 = Copy(Time);
Real t21 = t2 - t1; // 1.51s
Real t32 = t3 - t2; // 2.92s

Change History (3)

comment:1 Changed 13 years ago by Víctor de Buen Remiro

Resolution: fixed
Status: newclosed

(In [4144]) Fixes #1434

comment:2 Changed 13 years ago by Víctor de Buen Remiro

Pues efectivamente es muy raro que ocurra eso. He estado mirando y parece que hay una confusión y no se está usando correctamente la caché interna de la clase C++ BTsrPolyn.

He hecho unos pequeños cambios y ahora tarda menos el polinomio que el producto por constante pues tiene un caché optimizada para la operación de retardos ':', mientras que el producto, cuando es finito como en este caso, utiliza una caché general.

Podría pensarse en implementar una cache ad-hoc para todas las operaciones que lo precisen.

comment:3 Changed 13 years ago by Víctor de Buen Remiro

(In [4147]) Refs #1434
Enhanced behaviour of BTsrPolyn

Note: See TracTickets for help on using tickets.