EuroSciPy 2011

Last month I have attended the Euroscipy conference at the École Normale in Paris. The conference is about scientific computing with Python, in particular the numpy/scipy/matplotlib stack.

Performance

Scientific computation is very CPU intensive; an interesting change from applications where memory and storage are the main bottlenecks.

In the performance talk by Gael Varoquaux, we got to see the demonstration of a computation runnning noticeably slower when iterating through a matrix along one direction than the other. This was due to the way data is allocated in the CPU registers. In one direction, the CPU can find the next number already in its registers, while in the other it contansly need to fetch the data from memory.

GPU computing

The talk on OpenCL was presented by Eiliff Muller from the Ecole Polytéchnique Fédérale de Lausanne. OpenCL is API that allows to perform general computations on the GPU. Again the focus was on the processors, since the interest lies in the different architecture of the GPU, which makes them suitable for highly parallel workloads.

OpenCL requires to program in a C-like special purpose language. PyOpenCL was demontrated integrates OpenCL and Python by embedding OpenCL programs as strings in the Python program. This goes to show that the preferred approach is to write most of the program in mainstream programming language to make it execute on the CPU, and to assign to the GPU only very specific tasks which are suitable.

Machine learning

Finally a particular striking demonstration was the session on Scikits learn led by Fabian Pedregosa. It is fairly amazing what can be achieved today with a freely available library. applications that were presented as cutting edge. We got to see a very impressive demontration of facial recognition. Three

Programming to learn

For scientists, programming is indispensable, but not their main occupation. The problem domains tend to be totally different than with your typical web projects.

But the most important point is that in scientific computing, software development is much more about answering questions than about building a system.