#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 14 years ago by
| Resolution: | → fixed |
|---|---|
| Status: | new → closed |
comment:2 Changed 14 years ago by
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.

(In [4144]) Fixes #1434