This sounds pretty cool -- and I've had a use case. So it would be nice to get into Numpy.
But: I doubt we'd want OpenMP dependence in Numpy itself. But maybe a pure Cython non-MP version? Are we putting Cuthon in Numpy now? I lost track. -CHB Sent from my iPhone > On Sep 29, 2015, at 7:35 AM, Juha Jeronen <juha.jero...@jyu.fi> wrote: > > Hi all, > > I recently developed a Cython-based, OpenMP-accelerated quartic (and cubic, > quadratic) polynomial solver to address a personal research need for quickly > solving a very large number of independent low-degree polynomial equations > for both real and complex coefficients. > > For example, on an Intel i7-4710MQ, running with 8 threads this code solves > approximately 1.2e7 quartic polynomial equations per second. (With > OMP_NUM_THREADS=4 the solver gives approximately 8.9e6 solutions per second, > so it seems HyperThreading in this case helps about 30%.) > > The algorithms for cubics and quadratics come from Numerical Recipes (3rd > ed.), and the quartic problem is internally reduced to a cubic and two > quadratics, using well-known standard tricks. > > > Since to my understanding, for solving polynomial equations NumPy only > provides roots(), which works one problem at a time, I'm writing to inquire > whether there would be interest to include this functionality to NumPy, if I > contribute the code (and clean it up for integration)? > > > I have some previous open source contribution experience. I have authored the > IVTC and Phosphor deinterlacers for VLC, and a modular postprocessing filter > framework for the Panda3D game engine (posted at the forums on panda3d.org, > projected for version 1.10). > > Currently the polynomial solver is available in a git repository hosted by > our university, the relevant files being: > > https://yousource.it.jyu.fi/jjrandom2/miniprojects/blobs/master/misc/tworods/polysolve2.pyx > https://yousource.it.jyu.fi/jjrandom2/miniprojects/blobs/master/misc/tworods/polysolve.py > https://yousource.it.jyu.fi/jjrandom2/miniprojects/blobs/master/misc/tworods/polysolve2example.py > https://yousource.it.jyu.fi/jjrandom2/miniprojects/blobs/master/misc/tworods/setup.py > https://yousource.it.jyu.fi/jjrandom2/miniprojects/blobs/master/misc/tworods/compile.sh > > I'm working on a research grant, which allows me to hold the copyright; > license is BSD. > > Polysolve2 is the fast Cython+OpenMP version, while polysolve is an earlier > (slower) experimental version using only NumPy array operations. The example > module contains a usage example, and setup (in the standard manner) instructs > distutils and Cython as to how to build polysolve2 (including setting the > relevant math flags and enabling OpenMP). > > (The setup script includes also some stuff specific to my solver for the > Ziegler problem; basically, the "tworods" module can be ignored. I apologize > for the inconvenience.) > > > Thoughts? > > > Best regards, > > -J > > ------------------------------------------------- > Juha Jeronen, Ph.D. > juha.jero...@jyu.fi > University of Jyväskylä > Department of Mathematical Information Technology > ------------------------------------------------- > > _______________________________________________ > NumPy-Discussion mailing list > NumPy-Discussion@scipy.org > https://mail.scipy.org/mailman/listinfo/numpy-discussion _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org https://mail.scipy.org/mailman/listinfo/numpy-discussion