| Ilya Zakharevich on Tue, 20 May 2003 13:30:51 -0700 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: charpoly using too much stack space ! |
On Tue, May 20, 2003 at 11:19:59AM -0500, Gonzalo Tornaria wrote:
> we need to multiply several times by the same sparse matrix, we should
> "study" the matrix first (just once), and then use this every time. This
> is perfect for charpoly, where all the work amounts to "n"
> multiplications by the same (presumably sparse) matrix. Note that the
> intermediate results are NOT sparse (in general).
Easy to do when t_EXT is finally in.
Hope this helps,
Ilya
P.S. I had an interesting interchange in the private mail about
(dis)advantages of t_EXT. I got another idea which may make
things much better maintainance-wise.
Old version:
t_EXT has n+2 >= 2 words: the first as usual, the second a
pointer to the dispatch table for different operations, the
other n words are subtype-specific (used by the dispatch table
entries only).
New version:
t_EXT has undefined (opaque) storage layout. All the
manipulations are done by API (no direct access to fields).
It is created on stack by a call
GEN g = stack_EXT(subtype_atom, n);
Here subtype_atom is created by
subtype_atom_t subtype_atom =
subtype_create(dispatch_table, sizeof(*dispatch_table));
(the second argument allows extension of the dispatch_table
while keeping binary compatibility with extensions).
The n "private words" are accessed by a macro
long word = EXT_nth(g, n, subtype_atom);
This way one can start immediatly using the t_EXT patch (after
defining the above 3 macros, and typedef EXT_dispatch_table_t
*subtype_atom_t), while not committing ourselves to the
particular implementation.
What do people think?
Ilya