Jim and others,

Here are the benchmarks I made yesterday:

http://www.moorepants.info/blog/fast-matrix-eval.html

The working code is here:
https://gist.github.com/moorepants/6ef8ab450252789a1411

Any feedback is welcome.


Jason
moorepants.info
+01 530-601-9791


On Wed, Aug 27, 2014 at 11:44 PM, James Crist <crist...@umn.edu> wrote:

> I was wondering about that. I wasn't sure if the overhead from looping
> through the inputs multiple times would outweigh improvements from fast C
> loops. Glad that in your case it does.
>
> I've thrown a WIP PR up: https://github.com/sympy/sympy/pull/7929
>
> For some reason, creating the functions in python with numpy calls still
> seems to be faster (for micro-benchmarks). This probably has something to
> do with function complexity (the example function above is simple), but I'd
> still think it'd be faster in pure C. I tried inlining the call, which was
> a small improvement, but it was still slower than the pure numpy-python
> version. Something to look into.
>
>
> On Wed, Aug 27, 2014 at 10:28 PM, Jason Moore <moorepa...@gmail.com>
> wrote:
>
>> Yeh, but if you simply create a ufunc for each expression in a matrix you
>> still get substantial speedups. I wrote a bunch of test cases that I'll
>> post to my blog tomorrow.
>>
>>
>> Jason
>> moorepants.info
>> +01 530-601-9791
>>
>>
>> On Wed, Aug 27, 2014 at 11:26 PM, James Crist <crist...@umn.edu> wrote:
>>
>>> Not yet. I wrote it this morning during an extremely boring meeting, and
>>> haven't had a chance to clean it up. This doesn't solve your problem about
>>> broadcasting a matrix calculation though...
>>>
>>>
>>> On Wed, Aug 27, 2014 at 10:23 PM, Jason Moore <moorepa...@gmail.com>
>>> wrote:
>>>
>>>> Awesome. I was working on this today but it looks like you've by passed
>>>> what I had working. Do you have a PR with this?
>>>>
>>>>
>>>> Jason
>>>> moorepants.info
>>>> +01 530-601-9791
>>>>
>>>>
>>>> On Wed, Aug 27, 2014 at 11:11 PM, Matthew Rocklin <mrock...@gmail.com>
>>>> wrote:
>>>>
>>>>> Cool
>>>>>
>>>>>
>>>>> On Wed, Aug 27, 2014 at 8:07 PM, James Crist <crist...@umn.edu> wrote:
>>>>>
>>>>>> I still need to do some cleanups and add tests, but I finally have
>>>>>> this working and thought I'd share. I'm really happy with this:
>>>>>>
>>>>>> In [1]: from sympy import *
>>>>>>
>>>>>> In [2]: a, b, c = symbols('a, b, c')
>>>>>>
>>>>>> In [3]: expr = (sin(a) + sqrt(b)*c**2)/2
>>>>>>
>>>>>> In [4]: from sympy.utilities.autowrap import ufuncify
>>>>>>
>>>>>> In [5]: func = ufuncify((a, b, c), expr)
>>>>>>
>>>>>> In [6]: func(1, 2, 3)
>>>>>> Out[6]: 6.7846965230828769
>>>>>>
>>>>>> In [7]: func([1, 2, 3, 4, 5], [6, 7, 8, 9, 10], 3)
>>>>>> Out[7]: array([ 11.44343933,  12.36052961,  12.79848207,  13.12159875
>>>>>> ,  13.75078733])
>>>>>>
>>>>>> In [8]: from numpy import arange
>>>>>>
>>>>>> In [9]: a = arange(10).reshape((2, 5))
>>>>>>
>>>>>> In [10]: c = arange(10, 20).reshape((2, 5))
>>>>>>
>>>>>> In [11]: b = 25
>>>>>>
>>>>>> In [12]: func(a, b, c)
>>>>>> Out[12]:
>>>>>> array([[ 250.        ,  302.92073549,  360.45464871,  422.57056   ,
>>>>>>          489.62159875],
>>>>>>        [ 562.02053786,  639.86029225,  722.8284933 ,  810.49467912,
>>>>>>          902.70605924]])
>>>>>>
>>>>>> In [13]: type(func)
>>>>>> Out[13]: numpy.ufunc
>>>>>>
>>>>>> This now does everything a numpy `ufunc` does normally, as it *is* a
>>>>>> ufunc. Codegen is hooked up to numpy api. Type conversion and 
>>>>>> broadcasting
>>>>>> are done automagically.
>>>>>>
>>>>>> Caveats: only functions with a single output are accepted (this could
>>>>>> be changed to accept multi-output without much effort though). Also, as
>>>>>> with all unfuncs, input/outputs must all be scalars (no matrix/Indexed
>>>>>> operations allowed).
>>>>>>
>>>>>> --
>>>>>> 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+unsubscr...@googlegroups.com.
>>>>>> To post to this group, send email to sympy@googlegroups.com.
>>>>>> Visit this group at http://groups.google.com/group/sympy.
>>>>>> To view this discussion on the web visit
>>>>>> https://groups.google.com/d/msgid/sympy/76e0fbbe-5ce4-43b7-855b-6ac821f6b8ae%40googlegroups.com
>>>>>> <https://groups.google.com/d/msgid/sympy/76e0fbbe-5ce4-43b7-855b-6ac821f6b8ae%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>> .
>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>
>>>>>
>>>>>  --
>>>>> 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+unsubscr...@googlegroups.com.
>>>>> To post to this group, send email to sympy@googlegroups.com.
>>>>> Visit this group at http://groups.google.com/group/sympy.
>>>>> To view this discussion on the web visit
>>>>> https://groups.google.com/d/msgid/sympy/CAJ8oX-EHZXbd5aFFNRy7gJ0hcydpAsG2qxv7Py65DQ9cA9VUUA%40mail.gmail.com
>>>>> <https://groups.google.com/d/msgid/sympy/CAJ8oX-EHZXbd5aFFNRy7gJ0hcydpAsG2qxv7Py65DQ9cA9VUUA%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>> .
>>>>>
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>
>>>>
>>>>  --
>>>> You received this message because you are subscribed to a topic in the
>>>> Google Groups "sympy" group.
>>>> To unsubscribe from this topic, visit
>>>> https://groups.google.com/d/topic/sympy/azVZHLOv9Vc/unsubscribe.
>>>> To unsubscribe from this group and all its topics, send an email to
>>>> sympy+unsubscr...@googlegroups.com.
>>>>
>>>> To post to this group, send email to sympy@googlegroups.com.
>>>> Visit this group at http://groups.google.com/group/sympy.
>>>> To view this discussion on the web visit
>>>> https://groups.google.com/d/msgid/sympy/CAP7f1AieaeoOFtc_S4XPxWOX2jr2zmda9VCRpWpzHMTGLkmHPQ%40mail.gmail.com
>>>> <https://groups.google.com/d/msgid/sympy/CAP7f1AieaeoOFtc_S4XPxWOX2jr2zmda9VCRpWpzHMTGLkmHPQ%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>>  --
>>> 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+unsubscr...@googlegroups.com.
>>> To post to this group, send email to sympy@googlegroups.com.
>>> Visit this group at http://groups.google.com/group/sympy.
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/sympy/CAJ2L7mfL_xO%3DO-ZRMx-zfpZzJKJ-%2BUdTzSCz5jYf%2B%3DdovR%2B_7Q%40mail.gmail.com
>>> <https://groups.google.com/d/msgid/sympy/CAJ2L7mfL_xO%3DO-ZRMx-zfpZzJKJ-%2BUdTzSCz5jYf%2B%3DdovR%2B_7Q%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>>  --
>> You received this message because you are subscribed to a topic in the
>> Google Groups "sympy" group.
>> To unsubscribe from this topic, visit
>> https://groups.google.com/d/topic/sympy/azVZHLOv9Vc/unsubscribe.
>> To unsubscribe from this group and all its topics, send an email to
>> sympy+unsubscr...@googlegroups.com.
>> To post to this group, send email to sympy@googlegroups.com.
>> Visit this group at http://groups.google.com/group/sympy.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/sympy/CAP7f1AjcHrsopXjwK5uYdALeSrokxLMwA7xebTikHyhwL-%2BOVg%40mail.gmail.com
>> <https://groups.google.com/d/msgid/sympy/CAP7f1AjcHrsopXjwK5uYdALeSrokxLMwA7xebTikHyhwL-%2BOVg%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>>
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>  --
> 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+unsubscr...@googlegroups.com.
> To post to this group, send email to sympy@googlegroups.com.
> Visit this group at http://groups.google.com/group/sympy.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/sympy/CAJ2L7me73iJmkWm%3D_LiyWrsuOCZm%2B4OZbqD%2BkwwScWWx23HVdg%40mail.gmail.com
> <https://groups.google.com/d/msgid/sympy/CAJ2L7me73iJmkWm%3D_LiyWrsuOCZm%2B4OZbqD%2BkwwScWWx23HVdg%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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+unsubscr...@googlegroups.com.
To post to this group, send email to sympy@googlegroups.com.
Visit this group at http://groups.google.com/group/sympy.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/CAP7f1Agdi_X-o0B%2B9mH2CGOSN-TyYGVwgZm4q8%3DYwxieBzZkzA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to