> Yeah, I'm now using libtcc via ctypes interface to compile to machine > code directly in memory. It works on Windows too, I only failed so far > to get math.h working. Compile time is not an issue anymore (according > to http://fabrice.bellard.free.fr/tcc/ it is able to compile the Linux > kernel in just 10 s on a 2.4 GHz CPU). A remaining issue is the > Python<->Overhead. Evaluating simple functions in a Python loop is > currently faster using pure Python. This motivated me to implement > evaluating functions on a range of numbers using dynamically generated > machine code. I'm using pointers, this means that Python and C are > using the same memory, so theres no interface overhead (except of > passing the pointer one time). > > The result: > > Running tests... > cexpr: > 1/(g(x)*3.5)**(x - a**x)/(x**2 + a) > 1/ pow((g(x)*3.5), (x - pow(a, x) )) /( pow(x, 2) + a) > > compiling x**(1/2)*y**(1/2)... > f(0.5, 4) = 1.414214 > > Running benchmark... > big function: > compile time (including sympy overhead): 0.428471 s > for x = (0, 1, 2, ..., 999)/1000 > 20 times in 3 runs > compiled: 0.1288 0.1321 0.1334 > Python lambda: 0.3407 0.3383 0.3380 > Psyco lambda: 0.1547 0.1567 0.1561 > > simple function: > compile time (including sympy overhead): 0.012746 s > for x = (0, 1, 2, ..., 999)/1000 > 20 times in 3 runs > compiled: 0.0760 0.0775 0.0786 > Python lambda: 0.0526 0.0527 0.0576 > Psyco lambda: 0.0662 0.0661 0.0657 > > frange with f(x) = x**2 * sqrt(x) for x=1, ..., 1000000 > in 3 runs including full compile time > frange: 0.2470 0.2186 0.2135 > numpy: 0.2256 0.2162 0.2415
Correct result: frange: 0.1842 0.1572 0.1557 numpy: 0.1010 0.1008 0.1000 > > For big functions frange is probably faster than numpy. > I'm planning to implement evaluating on arrays too. > Any thoughts? Many thanks for your work. So, numpy is still faster? Why is it so? As I understand it, the benefit of using compiled stuff is for bigger functions, otherwise the Python lambda is the way to go, right? I think it'd be interesting to have the code you wrote as an alternative, and one will just try what works for him the fastest. Ondrej --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "sympy" group. To post to this group, send email to sympy@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/sympy?hl=en -~----------~----~----~----~------~----~------~--~---