I would still benchmark running cse and not. If cse() is fast enough, it might out-balance the overhead of the code generation, especially if it significantly reduces the resulting code size.
Aaron Meurer On Tue, Nov 5, 2013 at 11:36 AM, Jason Moore <[email protected]> wrote: > My roommate who's a C guy suggested that CSE was a waste of time if you have > a good compiler. He claimed that the compiler will do CSE anyways, so doing > it in the C code was not useful. I need to compare my Cython code output > with and without CSE (it currently uses CSE). > > How would I use CSE with theano_function? I'm not doing that currently and > it wasn't apparent to me how to go about that. > > > Jason > moorepants.info > +01 530-601-9791 > > > On Tue, Nov 5, 2013 at 1:30 PM, Matthew Rocklin <[email protected]> wrote: >> >> In my experiments with sympy-theano earlier this year I found that it was >> competitive with our Fortran code generation (autowrap.ufuncify) on single >> array outputs and outperformed it when CSE were involved. I don't have >> anything recorded that profiles scalar operations. >> >> Frederic might have some intuition on Theano's performance on large scalar >> computations. I've brought this up in the past and don't actually remember >> the answer. >> >> >> On Tue, Nov 5, 2013 at 9:51 AM, Jason Moore <[email protected]> wrote: >>> >>> Ok, so I think I'm comparing things correctly then. It is surprising that >>> the compiled Theano code doesn't seem to execute that fast. The functions >>> I'm generating are essentially evaluating very long sympy expressions, maybe >>> Theano isn't great at that... >>> >>> >>> Jason >>> moorepants.info >>> +01 530-601-9791 >>> >>> >>> On Tue, Nov 5, 2013 at 12:48 PM, Matthew Rocklin <[email protected]> >>> wrote: >>>> >>>> `sympy.printing.theanocode.theano_function` calls `theano.function` >>>> >>>> The result of `theano_function` is a compiled theano function. >>>> >>>> >>>> >>>> On Tue, Nov 5, 2013 at 9:27 AM, Jason Moore <[email protected]> >>>> wrote: >>>>> >>>>> >>>>> >>>>> >>>>> Jason >>>>> moorepants.info >>>>> +01 530-601-9791 >>>>> >>>>> >>>>> On Tue, Nov 5, 2013 at 8:46 AM, Frédéric Bastien <[email protected]> >>>>> wrote: >>>>>> >>>>>> Hi, >>>>>> >>>>>> Just to know, witch version of Theano did you used? I have speed up a >>>>>> little the optimization phase of the compilation and I have a PR that >>>>>> will optimize this more. >>>>> >>>>> >>>>> I'm using the master branch of Theano as of last week. >>>>> >>>>>> >>>>>> >>>>>> Also, Theano cache the compilation of the c code. Where this timming >>>>>> done with a empty theano cache or a filled Theano cache? If you ran >>>>>> the same benchmark multiple time on the same computer, only the first >>>>>> time Theano will compile the c code, the other time it will reuse what >>>>>> is in the cache. >>>>> >>>>> >>>>> I time two things wrt to Theano: >>>>> >>>>> 1. The time it takes to call sympy.printing.theanocode.theano_function >>>>> >>>>> and >>>>> >>>>> 2. The time it takes to call the function generated from 1. >>>>> >>>>> When does the Theano compilation happen? Is it in the call to >>>>> theano_function or the first time I use the generated function? >>>>> >>>>> If it is the latter then my timing comparisons aren't really comparing >>>>> apples to apples. >>>>> >>>>>> >>>>>> >>>>>> thanks >>>>>> >>>>>> Frédéric >>>>>> >>>>>> On Sun, Nov 3, 2013 at 3:22 PM, Ronan Lamy <[email protected]> >>>>>> wrote: >>>>>> > Le 03/11/13 14:19, Jason Moore a écrit : >>>>>> > >>>>>> >> Ronan, >>>>>> >> >>>>>> >> Thanks for looking at the derivation code. We haven't ever really >>>>>> >> had >>>>>> >> any review of it outside of our mechanical engineer group, so this >>>>>> >> very >>>>>> >> helpful. >>>>>> >> >>>>>> >> I'll review your PR and look into the second two items. >>>>>> >> >>>>>> >> Why do you think the dictionary representation will be so much >>>>>> >> faster? >>>>>> > >>>>>> > >>>>>> > Using a dict would make Vector.__eq__ a lot less expensive, and make >>>>>> > canonicalisation (as currently done in Vector.__init__) O(len(args)) >>>>>> > instead >>>>>> > of O(len(args)**2). >>>>>> > >>>>>> > However, it seems that the main performance issue is that >>>>>> > instantiating >>>>>> > Matrix objects is expensive. Using a dict isn't strictly required to >>>>>> > solve >>>>>> > this, but the structure I suggest would allow e.g. dot products of >>>>>> > vectors >>>>>> > to be decomposed as combinations of multiplications of components >>>>>> > and dot >>>>>> > products of base vectors, which can be optimised or cached >>>>>> > separately. There >>>>>> > would be no need for intermediate Matrix objects. >>>>>> > >>>>>> > >>>>>> >> >>>>>> >> On Sat, Nov 2, 2013 at 10:11 PM, Ronan Lamy <[email protected] >>>>>> >> <mailto:[email protected]>> wrote: >>>>>> >> >>>>>> >> Le 01/11/13 11:54, Jason Moore a écrit : >>>>>> >> >>>>>> >> I've been tinkering with code generation for ODE's that >>>>>> >> sympy.physics.mechanics spits out and have some results: >>>>>> >> >>>>>> >> http://www.moorepants.info/__blog/pydy-code-gen.html >>>>>> >> >>>>>> >> <http://www.moorepants.info/blog/pydy-code-gen.html> >>>>>> >> >>>>>> >> Several people have posted topics on this recently. We need >>>>>> >> to >>>>>> >> build in >>>>>> >> a code generator for solving ODE's into SymPy that would >>>>>> >> play >>>>>> >> well with >>>>>> >> the codegen and autowrap modules. I think I can use this >>>>>> >> code I >>>>>> >> wrote as >>>>>> >> a base to start working on that but would need some help >>>>>> >> generalizing it >>>>>> >> beyond our systems. Feedback is welcome. >>>>>> >> >>>>>> >> >>>>>> >> I've only looked at the derivation part, it's an interesting >>>>>> >> real-world(ish) benchmark for expression manipulation. However, >>>>>> >> it >>>>>> >> incurs a lot of avoidable overhead: >>>>>> >> * Extracting some loop constants out of their loops cuts down >>>>>> >> the >>>>>> >> run-time by 40%, cf. https://github.com/sympy/__sympy/pull/2570 >>>>>> >> >>>>>> >> <https://github.com/sympy/sympy/pull/2570> >>>>>> >> * The creation of temporary objects by the Vector class takes >>>>>> >> up >>>>>> >> most of the run-time. >>>>>> >> * The internal representation of Vector objects seems >>>>>> >> inefficient. I >>>>>> >> think it should be switched to a dict-based representation as a >>>>>> >> linear combination of base vectors (e.g. using {I.x: l0, B.y: >>>>>> >> -l1} >>>>>> >> for l0 * I.x - l1 * B.y). >>>>>> >> >>>>>> >> >>>>>> >> -- >>>>>> >> You received this message because you are subscribed to the >>>>>> >> Google >>>>>> >> Groups "sympy" group. >>>>>> >> To unsubscribe from this group and stop receiving emails from >>>>>> >> it, >>>>>> >> send an email to sympy+unsubscribe@__googlegroups.com >>>>>> >> <mailto:sympy%[email protected]>. >>>>>> >> >>>>>> >> To post to this group, send email to [email protected] >>>>>> >> <mailto:[email protected]>. >>>>>> >> Visit this group at http://groups.google.com/__group/sympy >>>>>> >> <http://groups.google.com/group/sympy>. >>>>>> >> For more options, visit >>>>>> >> https://groups.google.com/__groups/opt_out >>>>>> >> <https://groups.google.com/groups/opt_out>. >>>>>> >> >>>>>> >> >>>>>> >> >>>>>> >> -- >>>>>> >> You received this message because you are subscribed to the Google >>>>>> >> Groups "sympy" group. >>>>>> >> To unsubscribe from this group and stop receiving emails from it, >>>>>> >> send >>>>>> >> an email to [email protected]. >>>>>> >> To post to this group, send email to [email protected]. >>>>>> >> Visit this group at http://groups.google.com/group/sympy. >>>>>> >> For more options, visit https://groups.google.com/groups/opt_out. >>>>>> > >>>>>> > >>>>>> > -- >>>>>> > You received this message because you are subscribed to the Google >>>>>> > Groups >>>>>> > "sympy" group. >>>>>> > To unsubscribe from this group and stop receiving emails from it, >>>>>> > send an >>>>>> > email to [email protected]. >>>>>> > To post to this group, send email to [email protected]. >>>>>> > Visit this group at http://groups.google.com/group/sympy. >>>>>> > For more options, visit https://groups.google.com/groups/opt_out. >>>>>> >>>>>> -- >>>>>> You received this message because you are subscribed to the Google >>>>>> Groups "sympy" group. >>>>>> To unsubscribe from this group and stop receiving emails from it, send >>>>>> an email to [email protected]. >>>>>> To post to this group, send email to [email protected]. >>>>>> Visit this group at http://groups.google.com/group/sympy. >>>>>> For more options, visit https://groups.google.com/groups/opt_out. >>>>> >>>>> >>>>> -- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "sympy" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to [email protected]. >>>>> To post to this group, send email to [email protected]. >>>>> Visit this group at http://groups.google.com/group/sympy. >>>>> For more options, visit https://groups.google.com/groups/opt_out. >>>> >>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "sympy" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to [email protected]. >>>> To post to this group, send email to [email protected]. >>>> Visit this group at http://groups.google.com/group/sympy. >>>> For more options, visit https://groups.google.com/groups/opt_out. >>> >>> >>> -- >>> You received this message because you are subscribed to the Google Groups >>> "sympy" group. >>> To unsubscribe from this group and stop receiving emails from it, send an >>> email to [email protected]. >>> To post to this group, send email to [email protected]. >>> Visit this group at http://groups.google.com/group/sympy. >>> For more options, visit https://groups.google.com/groups/opt_out. >> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "sympy" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To post to this group, send email to [email protected]. >> Visit this group at http://groups.google.com/group/sympy. >> For more options, visit https://groups.google.com/groups/opt_out. > > > -- > You received this message because you are subscribed to the Google Groups > "sympy" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at http://groups.google.com/group/sympy. > For more options, visit https://groups.google.com/groups/opt_out. -- You received this message because you are subscribed to the Google Groups "sympy" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/sympy. For more options, visit https://groups.google.com/groups/opt_out.
