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.
