On 6/12/26 9:09 AM, Qian Yun wrote:
> On 6/12/26 8:42 AM, Waldek Hebisch wrote:
>>
>>> I can leave 'algreduc' alone. But for 'reduc', I think its
>>> implementation is very inefficient. I think, in theory,
>>> we can walk the variables of Rep to check for algebraic kernels
>>> and do transformation if necessary.
>>
>> Hmm, that is what 'reduc' is essentially doing. But there is a
>> catch: reducing with respect to one kernel may expose other ones.
>> So we order kernels and start reduction from the most complex
>> one and then repeat this with simpler kernels. Also, we allow
>> arbitrary algebraic kernels and do not require minimal polynomials
>> to be monic, so reduction is more complex than in case of roots.
>>
>
> Because 'reduc' is called by every + - * / =, any tiny
> optimization could be helpful in the end.
>
> My current plan is to do search and replace in parallel,
> say for alg_ker1^n1*alg_ker2^n2, do transformation for them
> in one loop. Then loop on the result until no transformation
> are needed. This should save many memory allocations.
>
> Also this opens doors for optimization like
> sum([e1,e2,e3,...]), mul([e1,e2,e3,...]).
>
> - Qian
>
I planed to do transformation at monomial level instead of smp level.
Turns out this doesn't work.
But the following works, by avoiding unnecessary division (gcd).
This saves memory usage of mapleok.input by around 30%.
The =$EXPR optimization saves another 30%.
The kernel cache recycle patch saves around 30%.
So 3 patches together, for mapleok.input, memory usage drops
from 13.5GB to 5.1GB, time drops from 15s to 8s.
- Qian
diff --git a/src/algebra/expr.spad b/src/algebra/expr.spad
index 6b9a11b5..94a24e9e 100644
--- a/src/algebra/expr.spad
+++ b/src/algebra/expr.spad
@@ -384,7 +384,9 @@
reduc(x, l) ==
for k in l repeat
p := minPoly k
- x := evl(numer x, k, p) /$Rep evl(denom x, k, p)
+ d := degree p
+ if degree(numer x, k) >= d or degree(denom x, k) >=
d then
+ x := evl(numer x, k, p) /$Rep evl(denom x, k, p)
x
evl0(p, k) ==
--
You received this message because you are subscribed to the Google Groups
"FriCAS - computer algebra system" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/fricas-devel/41614faa-0cc7-4957-877f-71eb453f4680%40gmail.com.