Utilisation de langages de programmation non conventionnels pour le calcul scientifique [fermé]


22

Remarque: le message suivant peut inclure des opinions controversées, veuillez donc noter que ce ne sont que mes opinions, et ne visent à offenser personne.

Je suis en train de programmer sous une forme ou une autre depuis environ 1999. J'ai d'abord utilisé R, puis plus tard, vers 2004, principalement en Python.

Pour de nombreuses applications scientifiques, par exemple, la simulation, y compris des choses telles que MCMC, R et Python sont trop lents et doivent être accélérés. La façon habituelle de le faire est d'étendre avec C ou C ++. Pour R et Python, c'est ce que j'ai fait, en utilisant l'API C de R avec C ++ et la bibliothèque Boost Python avec Python.

Cependant, pour diverses raisons, cette combinaison n'est pas la solution idéale. Qu'est-ce qui est important en programmation, en particulier les algorithmes? Expressivité et rapidité, qui sont bien sûr liées. Plus une langue est expressive, plus on peut y écrire rapidement.

1) En ce qui concerne l'expressivité, ni R ni Python ne sont vraiment idéaux pour écrire des algorithmes scientifiques à mon avis. Ils ne correspondent pas étroitement à l'algorithme sous-jacent. Cependant, ils sont tous les deux considérablement meilleurs que C ++.

2) J'aime écrire en Python, qui est un langage agréable, mais comme indiqué ci-dessus, il n'est pas idéal pour le travail algorithmique. Cependant, quand on doit travailler avec une combinaison Python / C ++ à cause de problèmes de vitesse, ce mélange devient beaucoup moins agréable à travailler. Ce qui se passe généralement, c'est que j'écris d'abord en Python, et une fois que j'ai quelque chose qui fonctionne bien, je découvre souvent qu'il est trop lent (pour une valeur subjective de trop lent). Je suis alors confronté à la décision de passer un temps déraisonnable à le réécrire en C ++ ou à supporter la lenteur. Avec le recul, j'ai souvent l'impression que j'aurais mieux fait de supporter la lenteur, d'autant plus que les accélérations obtenues sont imprévisibles. De plus, l'interface Boost Python entre les deux est un casse-tête de maintenance important, et avoir du code dans deux langues très différentes collées ensemble comme ça est juste distrayant. Aucune critique de Boost Python n'est prévue, c'est une interface aussi puissante qu'on pourrait l'imaginer, et fonctionne à peu près la plupart du temps.

Maintenant, dans un monde idéal, avec un temps et des ressources illimités, aucun de ces problèmes ne serait un problème majeur. Cependant, dans les projets scientifiques sur lesquels j'ai travaillé, j'ai eu l'expérience suivante.

Que j'aie ou non des collaborateurs sur le projet, il me semble toujours finir par faire la grande majorité de l'informatique. Dans un total de 5 projets importants, je n'ai eu qu'une participation substantielle d'une personne sur un seul projet. Cette personne a fait plus que tirer son poids; il a fait autant que moi ou plus. Cependant, dans tous les autres cas, y compris les projets avec plusieurs collaborateurs, j'ai fait (virtuellement) tout le travail de calcul. Bien que je puisse dire que je n'ai pas eu la chance d'avoir les meilleurs collaborateurs (cela semble être un mélange de paresse et d'incompétence), il n'est pas clair pour moi si cet état de choses est susceptible de changer à l'avenir.

Le travail scientifique computationnel représente un énorme effort, et si je ne peux pas changer le comportement de mes collaborateurs, je peux changer ma façon de travailler. L'amélioration la plus importante serait de faire avancer les choses plus rapidement. Ce qui m'amène à la principale considération ici, qui est que le changement de langue vers quelque chose de moins orthodoxe peut aider. Sur la base de recherches antérieures, les candidats les plus probables par ordre de probabilité sont Common Lisp et Ocaml. J'y pense depuis des années, mais j'ai récemment réfléchi plus sérieusement.

Pour autant que je sache, peu de gens utilisent CL ou Ocaml pour le calcul scientifique. En recherchant ce site, j'ai trouvé deux références à CL (une était la mienne) et une à Ocaml (la mienne). J'ai eu quelques contacts encourageants au fil des ans avec des personnes aventureuses travaillant en marge. En 2008, je suis tombé sur une critique de livre de "Practical Common Lisp" de Peter Seibel (que je possède), par Tamas K. Papp. Cela a attiré mon attention, car c'était l'une des rares mentions de calcul scientifique pour Lisp que j'avais rencontrées sur le net. J'ai écrit à Tamas, qui a immédiatement répondu de manière utile et encourageante. Pour le citer

Ma productivité en programmation a probablement décuplé avec Lisp, mais cela a pris environ un an et je continue à apprendre (je me débrouillais très bien après 2 mois cependant). Donc, si vous travaillez sur quelque chose de critique dans le temps, repoussez le commutateur.

Vous devriez envisager de demander aux gens sur cll, je ne suis pas le seul à connaître ces choses, d'autres font du calcul scientifique sur Lisp.

Il a également un blog et une page GitHub .

Une autre personne avec qui j'ai brièvement correspondu (en décembre 2006) était Ira Kalet , qui a utilisé Common Lisp dans le contexte de la radio-oncologie.

Il y en a peut-être d'autres qui font du calcul scientifique sur Lisp, mais je ne connais personne.

Le problème le plus courant que les gens citent avec CL est le manque de bibliothèques. Il s'agit d'un problème grave dans le domaine de l'informatique à usage général, mais ce n'est peut-être pas le cas dans le calcul scientifique, en particulier à partir des implémentations d'algorithmes. Plus précisément, je peux me débrouiller la plupart du temps avec une bibliothèque mathématique de base, y compris des fonctions de distribution de probabilité, une bibliothèque de tableaux multidimensionnels et un ensemble de base de conteneurs, par exemple, carte, ensemble, liste, etc., comme dans les bibliothèques standard C ++ et Python.

Je connais encore moins Ocaml que je connais CL, mais je l'ai ajouté comme alternative. Il est censé être très rapide, a une implémentation gratuite par des chercheurs français et semble être le plus viable de la famille de langages ML pour le calcul scientifique.

Pour conclure, je me demande si d'autres ont de l'expérience avec cela, et quelles sont leurs pensées, le cas échéant.

EDIT: Je suis surtout intéressé par une expérience de première main, dans le contexte des questions que j'ai discutées ci-dessus. Par exemple, si vous utilisiez Python et C ++ (ou R et C ++) et que vous passiez à un langage plus obscur, je serais très intéressé à entendre parler de vos expériences.


2
L'échange de piles sert à poser des questions, pas à publier des histoires de vie! Votre question semble être "Existe-t-il des projets de calcul scientifique utilisant Common Lisp ou OCaml", n'est-ce pas?
khinsen

4
D'accord, cela ressemble un peu plus à un article de blog, mais j'aime la prémisse. Y a-t-il une chance que vous puissiez essayer de réduire cela à 2-3 paragraphes?
Aron Ahmadia

1
Aussi convenu. Les commentaires et l'expérience personnelle sont bons lorsqu'ils soutiennent la question principale; trop de détails peuvent submerger les points principaux. Si vous pouvez condenser votre question, je pense qu'elle serait plus facile à lire et qu'elle obtiendrait des réponses plus ciblées et de meilleure qualité.
Geoff Oxberry

1
@FaheemMitha: Dans le "monde idéal" que vous mentionnez à mi-chemin, ce serait tout assemblage optimisé à la main ... Cela me semble lugubre!
meawoppl

3
@FaheemMitha: La meilleure chose que je pense que vous pourriez faire pour améliorer votre question est de clarifier la question que vous posez. Il semble que vous racontiez une histoire sur vos expériences (ce qui est bien), puis à la fin, vous enterrez la question comme une déclaration à la fin de votre histoire. ("Pour conclure, je me demande ...") La meilleure chose que vous puissiez faire est de faire de cette partie une question, afin que les gens qui parcourent votre question puissent facilement identifier ce que vous demandez. J'ai dû revenir en arrière plusieurs fois pour le comprendre.
Geoff Oxberry

Réponses:


18

Nous avons développé Julia pour exactement les raisons évoquées. Il n'y avait tout simplement pas de bon langage de calcul scientifique de haut niveau qui donnait également de bonnes performances, que vous n'ayez pas à réécrire des parties de votre code dans C / Fortran. Le design de julia a une bonne influence, alors vous pouvez le trouver à votre guise, tandis que vos collaborateurs peuvent le traiter comme un matlab ou R s'ils ne se soucient pas des parties fonctionnelles. L'inconvénient est que la langue est nouvelle et n'a pas encore toutes les bibliothèques dont on aurait besoin pour une utilisation quotidienne.

Mark, j'aimerais ajouter Julia à votre indice de référence pour voir comment nous nous en sortons. N'hésitez pas à consulter notre liste de diffusion et faites-nous savoir ce que vous aimeriez voir en julia afin qu'il vous soit plus utile.


C'est magnifique! Je vais certainement vérifier cela pour mon propre travail. Actuellement, j'utilise python pour tout mon travail dans la matière condensée théorique, simplement parce que le temps gagné en ayant du code C ++ rapide est annulé par le temps passé à écrire en C ++ en premier lieu :)
Lagerbaer

9

La vitesse, la taille et la fiabilité des langages de programmation font un excellent travail pour résumer un grand nombre de préoccupations différentes exprimées dans votre «question». Il compare la vitesse et la taille de la base de code d'un tas d'implémentations des mêmes benchmarks dans 33 langues!

Je suis devenu un amoureux de Python principalement parce qu'il est beaucoup plus courant d'avoir un temps de calcul excessif qu'un temps de programmation excessif. Je suis plus que disposé à gaspiller les cycles CPU plutôt qu'à sacrifier un coin de temps qui pourrait être consacré à quelque chose de plus intéressant.

Aussi, +1 sur Julia. Je pense que je peux y basculer quand il devient un peu plus stable et largement pris en charge, c'est-à-dire lorsque les modules standard sont emballés pour le travail que j'aime faire.


4

Pour les applications scientifiques d'OCaml, voir par exemple

Pour Lisp en science, voir par exemple

Je suis sûr qu'il existe de nombreuses autres références. Cependant, je ne peux citer aucun projet de recherche majeur dans lequel un travail de calcul a été effectué dans OCaml ou Lisp. Choisir l'un ou l'autre signifie travailler dans un isolement relatif.

Vous pourriez également être intéressé par Julia , un nouveau langage pour le calcul scientifique en cours de développement, avec des influences claires de Lisp.


1
J'aurais peut-être dû préciser que je suis surtout intéressé par l'expérience de première main. Je vais modifier ma question pour refléter cela.
Faheem Mitha
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.