XD blog

blog page

jit


2016-03-22 Accélérer Python

Python est très lent, c'est pratiquement son seul défaut avec le fait qu'il n'est pas vraiment un langage multi-thread à cause du GIL. Bref, pour accélérer le langage, on passe le plus souvent par du C et donc un langage compilé. Le plus simple est d'écrire ses calculs en C puis de s'interfacer avec le langage Python. C'est comme cela que fonctionne la librairie numpy. Une autre option consiste à écrire en pseudo langage C avec Cython. C'est l'option choisie par scikit-learn. Mais on ne réécrit pas tout, on utilise un profileur qui nous indique où le programme perd le plus de temps et on travaille spécifiquement sur cette partie. Et si on ne veut pas réécrire du code, on peut penser à changer d'interpréteur afin que le même code python soit exécuté plus rapidement. Sur ce point, il faut lire Les interpréteurs alternatifs de python. Une caractéristique des langages compilés (et non interprétés) et que les variables sont déclarées avec un type précis.

def addition(x, y):
    return x + y

La fonction précédente fonctionnera si l'addition de x et y au moment de l'exécution si cette addition à un sens ce qui ne requiert pas que ces deux variables soient du même type.

double addition(double x, double y) {
    return x + y;
}

En C, on est obligé de spécifier le type car on ne peut donner un sens au symbol + que si le type des variables est connu. Compiler le langage Python implique alors de faire de l'inférence de type... ce qu'il est parfois impossible d'accomplir à moins d'exécuter le programme. On se tourne alors vers les JIT qui propose de compiler certaines parties d'un programme en partant du code interprété lors de l'exécution.

2014-10-17 Python Just In Time Compilation (JIT)

I discovered a new package to do just in time compilation for Python: HOPE. The following paper gives a promising benchmark compare to others alternatives: HOPE: A Python Just-In-Time compiler for astrophysical computations. It was not tested on Windows.


Xavier Dupré