Si comme moi vous aimez faire du Python, vous avez sans doute remarqué que niveau vitesse, et en particulier niveau calcul pur, c'est loin d'être le pied.
Pour Danuve j'ai été amené à faire quelques recherches sur l'encapsulation de code C au sein de Python. Et là je croise ce qui est aujourd'hui devenu l'amour de ma vie :
Psyco, aucun rapport avec de l'encapsulation au final.
Psyco a pour but d'accélérer massivement la vitesse d'exécution d'un code Python.
Alors rajoutons quelques lignes après les import de notre main :
try:
import psyco
psyco.full()
except:
pass
On essaie ici d'utiliser le module psyco, si celui ci ne peut pas être importé on passe comme si de rien n'était.
Et alors là...Un miracle, tout simplement THE miracle.
Danuve utilise actuellement deux algorithmes, Euler et Runge-Kutta 4, RK4 est plus précis mais plus gourmand niveau calcul.
Comparons sur 3 configurations :
- Un seul oscillateur :
| Algorithme utilisé | C Python | C Python + Psyco | Gain de performance |
| Euler | 1.58 | 0.89 | 1.77 |
| Runge-Kutta 4 | 3.36 | 1.53 | 2.19 |
- Dix oscillateurs identiques
| Algorithme utilisé | C Python | C Python + Psyco | Gain de performance |
| Euler | 8.45 | 4.16 | 2.03 |
| Runge-Kutta 4 | 19.83 | 6.20 | 3.19 |
- Vingt oscillateurs identiques
| Algorithme utilisé | C Python | C Python + Psyco | Gain de performance |
| Euler | 16.00 | 7.89 | 2.03 |
| Runge-Kutta 4 | 40.19 | 10.99 | 3.65 |
Je vous laisse juger par vous même...
Avec un tel gain de performances, le projet d'implémentation du coeur de danuve en C risque de tomber à l'eau.
