I saw a mail from you, forwarded by W. Stein to Cython-Devel list,
about you are trying to measure performance for SWIG vs. Cython/Pyrex.

Well, I'm a rather power SWIG user, and now, after about a month I
believe I'm a rather good Cython user.

My main insterest is parallel distributed computing with Python. From
some time, I've been developing two very important (at least for me!)
packages, mpi4py and petsc4py (just google for the link).

For your objectives, I believe petsc4py could be interesting. The C
API of PETSc is wrapped with SWIG, but then this stuff is used inside
a Python code to implement a fully OO, pythonic API. I've heavily
hacked in the way SWIG implements its infamous 'this'. I do not rely
on this mechanism for passing object between Python and C layers,
instead, I've implemented a full base type object in C; and all this
crap is because the normal SWIG way was not enough for me.

But now, after fall in love with Cython, I've started to port (in
fact, write from scratch) all my work to use Cython. The petsc4py
project is not yet ready for the public, but it is in good shape for
testing.

And now, the interesting part. I've wrote some testing for my thesis
presentation (it will be in about a month), where I've crafted some
numerical tests in order to stress the overhead of passing back a
forth objects from the C layer to the Python layer and viceversa. All
the actual numericall computing is done in C or Fortran 90. And all
runs are sequential, not parallel.

This testing is done, code and results available, but only for the
former SWIG based version of petsc4py. The whole problem is related to
use Krylov iterative methods for solving a linear system of equations
arising from a finite-diferences discretization of the 3D Poisson
problem. BUT note that I never build a sparse matrix, instead I use a
'matrix-free' version with implements the matrix-vector product A*x ->
y as a function F(x) -> y, thus being crude computing with Fortran 90
arrays.

If you are interested in take a look at this, I can send you some PDF
pages describing all this testing. I can also send you the code
implementing this testing. And if you want to go further, I perhaps
can find some spare time to help you implement all this testing with
the new Cython-based version of petsc4py that I'm writting.

I expect that my SWIG implementation will run faster that a normal
SWIG wrapper (as I've hacked on many ways to ge it faster). And I
expect that the new Cython based version is still faster.

I really believe that this is a very good test case for comparing SWIG
vs. Cython, as all the numerical computing is actully done in C, then
you finally measure the overhead of passing object around.


-- 
Lisandro Dalcín
---------------
Centro Internacional de Métodos Computacionales en Ingeniería (CIMEC)
Instituto de Desarrollo Tecnológico para la Industria Química (INTEC)
Consejo Nacional de Investigaciones Científicas y Técnicas (CONICET)
PTLC - Güemes 3450, (3000) Santa Fe, Argentina
Tel/Fax: +54-(0)342-451.1594
_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to