IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Le langage Julia serait-il plus rapide que Fortran et plus propre que NumPy ?
Oui, selon Martin Maas, un développeur

Le , par Bill Fassinou

590PARTAGES

25  0 
En dehors de Rust, Julia est l'autre langage de programmation qui a fait l'objet d'une grande publicité au cours de la dernière décennie. Destiné au calcul scientifique, il est le langage plébiscité pour remplacer Python, R et Fortran dans le domaine de la science des données. Dans une comparaison qu'il a faite dernièrement, Martin Maas, mathématicien et informaticien, a déclaré que Julia est plus rapide que Fortran et plus propre que NumPy (Python). Il estime que NumPy est limité au "mono-threading" dans de nombreux cas, est difficile à coder et à lire, et peut être beaucoup plus lent que Python et Fortran.

Julia est un langage de programmation multiparadigme (entièrement impératif, partiellement fonctionnel et partiellement orienté objet) conçu pour le calcul scientifique. Il offre des gains de performance significatifs par rapport à Python (lorsqu'il est utilisé sans optimisation et calcul vectoriel en utilisant Cython et NumPy). Avec Julia, le temps de développement serait réduit d'un facteur 2 en moyenne. Les gains de performance seraient de l'ordre de 10 à 30 fois par rapport à Python (R serait encore plus lent. Les analystes estiment que le langage R n'a pas été construit pour la vitesse).



Des rapports de l'industrie en 2016 indiquaient que Julia est un langage à fort potentiel et peut-être la chance de devenir la meilleure option pour la science des données s'il recevait un plaidoyer et une adoption par la communauté. La version 1.0 de Julia est sortie en août 2018 et il a le plaidoyer de la communauté de programmation et l'adoption par un certain nombre d'entreprises comme le langage préféré pour de nombreux domaines – y compris la science des données. En mars, la DARPA l'a choisi pour créer un framework devant permettre de multiplier par 1000 la vitesse de la simulation électronique.



(ST : single-threaded ; MT : multi-threaded)

Alors, est-il réellement meilleur que ces concurrents ? Après avoir réalisé quelques benchmarks sur Fortran, NumPy et Julia, Maas a déclaré que Julia était largement supérieur à ces deux outils et qu'il adoptait désormais Julia. Notons que NumPy (Numerical Python) est une bibliothèque Python utilisée pour travailler avec des tableaux. Elle dispose en outre de fonctions permettant de travailler sur l'algèbre linéaire, la transformation de Fourier et les matrices. NumPy a été créé en 2005 par Travis Oliphant. Il s'agit d'un projet open source et vous pouvez l'utiliser librement. Voici ci-dessous les résultats de ces tests.

Julia vs Fortran vs Numpy : la vitesse et la clarté du code

Julia est un langage assez nouveau, qui, entre autres choses, vise à résoudre le soi-disant "problème de ces deux langages" dans le calcul scientifique. En effet, Maas estime que les développeurs testent habituellement des idées dans un langage de prototypage rapide comme Matlab ou Python, mais lorsque les tests sont terminés et qu'il est temps d'effectuer des calculs sérieux, ils doivent utiliser un autre langage de programmation (compilé). « De nombreux outils existent pour faciliter la transition, et l'intégration de bibliothèques Fortran dans Python a été ma préférence jusqu'à présent », a-t-il déclaré.



« Par exemple, envelopper un peu de Fortran avec F2PY semble être un moyen très pratique d'utiliser (et de distribuer) un code Fortran efficace que tout le monde peut exécuter. Je garde également une trace des différentes façons d'utiliser Fortran en Python dans ce post. Maintenant, Julia vise à résoudre ce problème d'une manière radicale. L'idée est d'utiliser un seul langage de programmation, qui a à la fois un mode interactif, adapté au prototypage rapide, mais qui peut aussi être compilé et exécuté à la performance C/Fortran », a ajouté le mathématicien.

Selon Maas, Numpy serait limité au "mono-threading" dans de nombreux cas, difficile à coder et à lire et plus lent que ces alternatives. En outre, Fortran offrirait d'excellentes performances avec un code assez simple, mais certains habillages seraient nécessaires pour appeler Fortran à partir de langages de haut niveau comme Python. Enfin, Julia serait plus rapide et plus facile à écrire que Numpy et serait même capable de battre les performances de GFortran (compilateur GNU Fortran).

Lisibilité du code : l'impact de la vectorisation manuelle

Ici, Maas a d'abord déclaré que les opinions sur la lisibilité du code sont, bien sûr, subjectives, avant d'expliquer pourquoi il pense que Numpy offre la pire expérience en matière de qualité. Selon lui, jusqu'à présent, les langages interprétés ont nécessité une réécriture manuelle des boucles lors des opérations vectorielles. Avec un peu de pratique, cela devient peut-être une tâche facile, mais, selon Maas, la vectorisation manuelle du code serait une mauvaise pratique. « Je préfère écrire des boucles for et laisser le compilateur les vectoriser pour moi », a déclaré Mass. Considérez le code Numpy suivant, par exemple.

Code : Sélectionner tout
1
2
3
n = len(a)
M = np.exp(1j*k*(np.tile(a,(n,1))**2 + np.tile(a.reshape(n,1),(1,n))**2))
Selon Maas, à première vue, vous ne pourrez pas deviner ce que ce code fait ni raisonner sur les performances du code. En outre, il vous sera également difficile de deviner la dimension de la sortie de M. Voici ci-dessus le même code réécrit avec Julia.

Code : Sélectionner tout
1
2
3
4
5
6
7
8
do j=1,n
do i=1,n

    M(i,j) = exp( (0,1)*k * sqrt(a(i)**2 + a(j)**2) )

end do
end do
Les deux extraits de code ci-dessus représentent la formule mathématique suivante : M_{ij} = e^{i k \sqrt{a_i^2 + a_j^2}}.

Selon Mass, il n'est pas étonnant qu'ils [les développeurs du langage] aient appelé Fortran "FORmula TRANslator" en premier...[/les développeurs du langage]
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de lvr
Membre extrêmement actif https://www.developpez.com
Le 21/06/2021 à 18:45
Citation Envoyé par vmagnin Voir le message
Comme dit par Jeff_67, appeler Fortran depuis Python est une mauvaise idée pour faire un benchmark.
Oui, mais elle reflète son paradigme de travail : 1) je prototype, 2) j'optimise mon prototype.
En Numpy: il prototype en Numpy, et il optimise avec des inclusions Fortran. Numpy pour le proto, car prototyper en Fortran est plus compliqué, les inclusions Fortran, car il ne veut pas perdre son proto en réécrivant tout en Fortran.
En Julia, il protype en Julia, et optimise en Julia.
Son benchmark semble donc cohérent avec son cas d'utilisation.
5  0 
Avatar de abriotde
Membre chevronné https://www.developpez.com
Le 21/06/2021 à 15:48
Le mec a utilisé f2py et probablement gfortran comme compilateur, c'est la pire configuration qui soit
Ca reste que ce n'est pas vraiment un argument. Ce sont les outils de base open-source, ceux que tous utilisent.
Évidemment qu'en mettant un expert du langage, et en achetant le compilateur a 4 ou 5 zéro, tu fera mieux... mais peut-être en Julia aussi. Le tout c'est qu'un scientifique qui a quelques notions informatique puisse faire un programme performant. Rappelons que l'idée est de faire de la data-science (donc par des non expert informatique, mais des climatologue, géologues, généticiens...) pas de concevoir une IA (avec optimisation du processeur)...
4  0 
Avatar de
https://www.developpez.com
Le 21/06/2021 à 15:18
J'étais surpris que Julia ST soit plus performant que Fortran ST dans le benchmark. Je suis donc allé lire l'article. Le mec a utilisé f2py et probablement gfortran comme compilateur, c'est la pire configuration qui soit.
3  0 
Avatar de vmagnin
Membre éprouvé https://www.developpez.com
Le 21/06/2021 à 17:22
Comme dit par Jeff_67, appeler Fortran depuis Python est une mauvaise idée pour faire un benchmark.
La communauté Fortran-lang a analysé le problème ici (en anglais) :
https://fortran-lang.discourse.group...han-numpy/1405

En faisant le benchmark avec du Fortran pur bien conçu, le temps de calcul est divisé par 2 !

Rappelons que le premier compilateur Fortran est sorti en 1957 : c'était non seulement un des premiers compilateurs (probablement le premier commercialement parlant), mais aussi un compilateur avec des optimisations déjà élaborées afin d'obtenir un code quasiment aussi rapide qu'un code écrit en assembleur. Il y a donc derrière les compilateurs Fortran 65 ans d'expérience en terme d'optimisation. Comme le C, le Fortran exploite au mieux le matériel et il est difficile de gagner grand chose. Benchmarker sur des algorithmes courts pour résoudre des problèmes très précis n'a de pertinence que pour comprendre comment fonctionnent les compilateurs et voir si on peut encore les améliorer ; et pour apprendre les bases d'un langage.
3  0 
Avatar de
https://www.developpez.com
Le 21/06/2021 à 16:27
Citation Envoyé par abriotde Voir le message
Ca reste que ce n'est pas vraiment un argument. Ce sont les outils de base open-source, ceux que tous utilisent.
Évidemment qu'en mettant un expert du langage, et en achetant le compilateur a 4 ou 5 zéro, tu fera mieux... mais peut-être en Julia aussi. Le tout c'est qu'un scientifique qui a quelques notions informatique puisse faire un programme performant. Rappelons que l'idée est de faire de la data-science (donc par des non expert informatique, mais des climatologue, géologues, généticiens...) pas de concevoir une IA (avec optimisation du processeur)...
Le code fortran est appelé depuis un script python via f2py, et lui retourne un tableau d'une taille plus ou moins conséquente. Au-delà du fait que gfortran ne produit pas le code le plus optimisé du marché loin de là, le fait que l'interpréteur python doive "digérer" le tableau retourné par l'appel fortran pour le traduire en un schéma de données python, et ce de la manière la plus inefficace possible, n'aide pas niveau benchmark.
1  0 
Avatar de Madmac
Membre extrêmement actif https://www.developpez.com
Le 22/06/2021 à 4:06
Je serais curieux de voir les résultats avec différentes version de Fortran.

Pour le reste, aucune surprise. Dans le domaine des statistiques et du deep-learning, Python a un énorme concurrent.
0  0 
Avatar de vmagnin
Membre éprouvé https://www.developpez.com
Le 22/06/2021 à 8:20
Son benchmark semble donc cohérent avec son cas d'utilisation.
Oui, mais disons que le titre de l'article de Martin Maas est accrocheur et ne reflète pas exactement ce qui est fait.
3  4