Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 27/04/2009, à 15:13

Swaraj

[Resolu] Quel langage choisir ?

Bonjour !

Je suis actuellement en stage (pour 6 mois) et je vais etre amener a coder un bon petit truc (il faudra oublier les accents, je ne peux pas les mettre avec mon clavier allemand !).

Mon appli devra segmenter une bonne grosse image 3D (de l'ordre de 3-4Go), puis realiser des traitements statistiques et evaluer les fonctionnelles de Minkowski de l'image. Il faudra alors extraire N echantillons de la bonne grosse image et refaire la meme chose ie (traitements stat` + Minkowski).

Je dois pouvoir alors lancer differents calculs via en multi-processeurs.

Alors, quid du langage ? C++, Fortran ou Python/Fortran ?

A vrai dire j'ai quelques pistes comme C++ et Fortran ca va plus vite, ou bien utiliser ITK (ce qui est loin d'etre une obligation etant donne que je veux faire un "simple" thresholding sur du noir et blanc). J'ai aussi peur de la gestion de memoire pythonique (genre j'ai peur de me retrouver avec 1235x mon fichier de 3Go en memoire ! Meme si la machine a 16Go de RAM ca peut vite faire mal)

Je vous remercie de bien vouloir eclairer ma lanterne tellement sombre sur ce sujet (je ne suis pas informaticien de formation !)

Dernière modification par Swaraj (Le 12/05/2009, à 11:58)

Hors ligne

#2 Le 27/04/2009, à 15:20

tar_NeFyS

Re : [Resolu] Quel langage choisir ?

En général quand on fait tu traitement d'image, on utilise plutot le C.
La programmation objet prend beaucoup de mémoire comparée à la programmation impérative.
Chaque instance de l'objet reinscrit en mémoire les méthodes, contre 1 seule écriture pour une fonction

En général en image, on a tendance a vouloir réduire pas mal la taille des données traitées, la solution souvent utilisée est de passer en 256 couleurs par pixel, et donc de les coder sur un char plutot qu'un int. Cela fait gagner pas mal de mémoire au final.

[edit]Mea Culpa, j'ai comme la tres justement fait remarquer le farfadet spatial, il faut lire impératif et non fonctionnel. J'en suis tout honteux et confus de cet échange de termes[/edit]

Dernière modification par tar_NeFyS (Le 28/04/2009, à 01:23)

Hors ligne

#3 Le 27/04/2009, à 15:41

Swaraj

Re : [Resolu] Quel langage choisir ?

OK merci !

Si j'ai bien pige, en C, dans un premier temps j'appelle mon image en memoire, et ensuite j'effectue le traitement par des fonctions qui ont pour parametres des pointeurs vers l'image?

Et je peux faire la mm chose en fortran ou python+fortran (celui la je le sens mal) ?

la solution souvent utilisée est de passer en 256 couleurs par pixel, et donc de les coder sur un char plutot qu'un int

Ca ca change quelque chose sur la vitesse d'execution ?

Hors ligne

#4 Le 27/04/2009, à 16:19

Le Farfadet Spatial

Re : [Resolu] Quel langage choisir ?

Salut à tous !

tar_NeFyS a écrit :

Chaque instance de l'objet reinscrit en mémoire les méthodes, contre 1 seule écriture de la fonction

Ça, c'est vraiment très vite dis, j'aimerais savoir sur quoi tu te bases pour dire ça. Pas sur un bon compilateur en tout cas. Ce n'est pas parce qu'au niveau du code méthodes et champs sont encapsulés que le code va être dupliqué à la compilation.

   Ensuite, C n'est pas un langage fonctionnel. Il supporte la programmation impérative structurée, pas la programmation fonctionnelle. LISP, OCaml et Haskell sont des exemples de langages supportant la programmation fonctionnelle.

Swaraj a écrit :

Alors, quid du langage ? C++, Fortran ou Python/Fortran ?

Visiblement, tu vas avoir des problèmes de performances, donc évite un langage interprété : pour ma part, je te déconseille d'utiliser Python. Fortran, C ou C++ peuvent convenir : moi, je ferais cela en C++, mais utilise surtout le langage que tu maîtrises le mieux.

   À bientôt.

                                                                                                                                             Le Farfadet Spatial

Dernière modification par Le Farfadet Spatial (Le 27/04/2009, à 16:20)

Hors ligne

#5 Le 27/04/2009, à 16:52

Swaraj

Re : [Resolu] Quel langage choisir ?

Yop !

Pas sur un bon compilateur en tout cas. Ce n'est pas parce qu'au niveau du code méthodes et champs sont encapsulés que le code va être dupliqué à la compilation.

Tu peux me donner un exemple de bon compilateur pour C++ et/ou Fortran ? Sinon au cas ou, puis-je charger l'image dans le programme principal et utiliser des pointeurs sur l'image comme attributs d'objets ?

Et encore un dernier truc, est-ce que je peux utiliser ITK (une biblio de templates C++) avec du code fortran ?

J'avoue hesiter entre C++ et Fortran du coup !

Hors ligne

#6 Le 27/04/2009, à 21:26

telliam

Re : [Resolu] Quel langage choisir ?

En fait ça dépend de l'architecture de ta machine multiprocesseur et et de la gestion mémoire : mémoire partagée entre les processeurs ou non...
les langages utilisées sur les machines multiprocesseurs sont souvent C avec les librairies MPI/PVM ou fortran et parfois ada.


"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard

Hors ligne

#7 Le 27/04/2009, à 23:14

Le Farfadet Spatial

Re : [Resolu] Quel langage choisir ?

Salut à tous !

Swaraj a écrit :

Tu peux me donner un exemple de bon compilateur pour C++ et/ou Fortran ?

Gcc est très bien pour le C++ (à utiliser via G++). Pour le Fortran, j'avais trouvé G95 plutôt bien fait à l'époque. Cela dit, pour Fortran, je dois dire que j'ai tendance à utiliser le compilateur fournit par le constructeur de la machine. Sur architecture IBM, j'avais bien apprécié Xlf. Sur architecture Intel, Ifort est très recommandable.

telliam a écrit :

les langages utilisées sur les machines multiprocesseurs sont souvent C avec les librairies MPI/PVM ou fortran et parfois ada.

Tel est également mon expérience. Cependant, on peut tout à fait faire des choses aussi performantes en C++. La seule chose, c'est que C++ nécessite un temps d'apprentissage beaucoup plus long.

Swaraj a écrit :

Sinon au cas ou, puis-je charger l'image dans le programme principal et utiliser des pointeurs sur l'image comme attributs d'objets ?

Ho ! Oui... Tu peux faire des choses encore plus étranges... Cela dit, ce n'est pas nécessairement immédiat.

Swaraj a écrit :

Et encore un dernier truc, est-ce que je peux utiliser ITK (une biblio de templates C++) avec du code fortran ?

Hum... C++ comme Fortran peuvent utiliser des codes issus du C, donc tu peux partager des bibliothèque entre ces deux langages par cet intermédiaire. Cela dit, avec des templates, ça va devenir difficile : il va falloir ruser.

J'avoue hesiter entre C++ et Fortran du coup !

Soyons clairs : un bon programmeur en C, C++ et Fortran obtiendra des performances similaires avec ces trois langages, pour un temps de développement semblable. La question, c'est avec quel langage tu es le plus à l'aise et est-ce que tu disposes déjà de bibliothèques pour t'aider, si oui dans quel langage.

   C++ nécessite un temps d'apprentissage plus long que les autres langages : c'est un langage qui cache sa complexité. Ton stage ne durera pas une éternité, il faut que tu ailles au plus efficace. A priori, je te conseillerais plutôt d'utiliser Fortran --- par tes questions, j'ai l'impression que c'est le langage qui t'est le plus familier, --- mais si tu possèdes des bibliothèques en C++ qui vont te permettre de coder efficacement et proprement, ce dernier choix peut être le meilleur.

   À bientôt.

                                                                                                                                                                   Le Farfadet Spatial

Hors ligne

#8 Le 28/04/2009, à 01:46

tar_NeFyS

Re : [Resolu] Quel langage choisir ?

Effectivement une erreur de terme s'est glissé dans mon postes, merci de l'avoir souligné.


L'impératif est la programmation native d'un processeur, il marche comme ca. La POO(programmation orienté objet) est utilisé car elle a un approche beaucoup plus intuitive pour le programmeur. Ca rend d'autant plus facile la création de l'architecture de gros projets.

Mon explication était volontairement simplifiée à des fins explicatives. Effectivement une instance objet ne recopie pas toutes les méthodes en entiers, mais il en recopie un certain nombre. Un objet est clairement plus gros qu'un type natif contenant les mêmes informations. Cela n'est pas pour rien que les encodeurs et noyaux de systèmes d'exploitations sont en C.

Economy of execution. Object-oriented style is intrinsically less efficient that procedural style. In pure object-oriented style, every routine is supposed to be a (virtual) method. This introduces additional indirections through method tables and prevents optimizations such as inlining. The traditional solution to this problem (analyzing and compiling whole programs) violates modularity and is not applicable to libraries.

source : http://doc.cat-v.org/programming/bad_properties_of_OO


@swaraj :
en image/video, le facteur limitant est bien souvent la mémoire. Quand il faut commencer à écrire dans le swap, on perd énormément de temps.
La taille d'un char est de 1 octet, si tu le mets en unsigned char tu as des valeurs de 0 à 255.
Un int sur un processeur classique fait 4 octet, en unsigned il va juqu'à 4 294 967 295

prenons une image classique 640*400 en RGB ou YCbCr. Il te faut 3 valeurs par pixels pour le codage couleur.

en les mettant dans des unsigned char : tu stockes ton image dans 640*400*3*1=768000 octets

dans un int : 640*400*3*4=3072000 octets.

C'est idiot mais à force en mémoire ça bouffe, pour gagner quasi rien, vu qu'en YCbCr sur des char on a déjà une super résolution de couleur. C'est un procédé hyper classique en traitement d'image. Après si tu veux juste faire un seuillage, on garde en général que la composante Y(Niveau de gris) pour diviser encore par 3 la taille d'une image.

Hors ligne

#9 Le 28/04/2009, à 10:30

Le Farfadet Spatial

Re : [Resolu] Quel langage choisir ?

Salut à tous !

tar_NeFyS a écrit :

L'impératif est la programmation native d'un processeur, il marche comme ca.

D'une part, ce n'est plus vraiment vrai : les processeurs sont désormais superscalaires et les architectures sont massivement parallèles. Ce parallélisme et cette pipelinisation à tous les étages les éloignent de l'impératif. D'autre part, cela fait longtemps que, même en C, même en Fortran, les compilateurs ne se contentent pas d'une traduction littéral du code : désormais, les compilateurs sont des optimisateurs.

Effectivement une instance objet ne recopie pas toutes les méthodes en entiers, mais il en recopie un certain nombre.

Encore une fois, je me demande sur quoi tu te bases pour dire ça. Pas sur ta source, qui ne parle pas de recopie, mais d'indirection, ce qui est fort différent. De plus, ta source n'a pas tort, mais il faut tout de même tempérer, car la technologie des compilateurs a beaucoup évoluée, notamment concernant la compilation des langages objets et sont désormais capables de beaucoup d'optimisation. Enfin, ta source parle de pur objet, or C++ n'est pas pur objet : il supporte une programmation orientée objet, entre autres paradigmes (et C++ en supporte beaucoup).

noyaux de systèmes d'exploitations sont en C.

En effet. D'ailleurs, le projet HURD abandonne le noyau Mach, codé en C, pour le noyau L4, codé en C++, justement parce que ce dernier est plus souple et plus performant (http://magnux.free.fr/hurd/archi.html)...

   À bientôt.

                                                                                                                                                                   Le Farfadet Spatial

Hors ligne

#10 Le 28/04/2009, à 11:14

Swaraj

Re : [Resolu] Quel langage choisir ?

Hallo !

A priori, je te conseillerais plutôt d'utiliser Fortran --- par tes questions, j'ai l'impression que c'est le langage qui t'est le plus familier,

Perdu ! J'ai fait infiniment peu de Fortran, j'ai fait par contre du C et du Java ! Mon interrogation venait plutot de la culture qui veut que les scientifiques codent en Fortran et les autres en C++, et du "background" des gens avec qui je bosse.

Sinon le choix pour le moment est C++/ITK. Je vais realiser un petit cas test sur une image en jpg pour voir ce que ca donne !

tar_NeFyS, aurais tu d`autres astuces, ou une ressource sur le traitement d'images ? Ca merite peut-etre que j'ouvre un deuxieme fil...

Danke schön !

Tschüss !

Hors ligne

#11 Le 28/04/2009, à 11:24

Tom_L

Re : [Resolu] Quel langage choisir ?

Bonjour tout le monde,

J'utilise le couple Python/Fortran pour, en résumé, faire de la simulation numérique. Il s'agit de traiter de gros volumes de données (quelques dizaines de Go), de calculs principalement itératifs, et de post-processing assez lourd (extraction de données, affichage de grilles de grandes taille).

Avant d'aller plus loin je précise que je ne connais pas du tout le C++.

Tu avais l'air d'avoir "peur" de Pyhton, je pense pour des raisons de performances (langage interpreté). Je l'utilise tous les jours pour trois tâches :

1. Pré-Processing
2. Automatisation des calculs
3. Post processing

Le gros du calculs est effectué par des routines Fortran, appelé directement dans les scripts Python avec F2PY (http://cens.ioc.ee/projects/f2py2e/).

A mon avis (c'est le point de vue d'un scientifique, pas d'un informaticien), la grande force de Python est sa simplicité pour réaliser de nombreuses choses, et la grandes quantité de modules disponibles :
- Pré processing : tableaux, complexes, FFT, stats,... : tout ça se fait très simplement et directement à l'aide de différents modules.
- Automatisation : faisant des calculs statistiques, je fais tourner des milliers de calculs identiques avec différents jeux d'entrée, le tout en parallèle sur deux machines (2x4 procs) dont une distante. Grâce au différents modules tout ça se fait en quelques dizaines de lignes : parallelisation (pypi.python.org/pypi/pprocess), les modules réseaux me permettent de rapatrier les résultats sur ma machine, envoyer de nouvelles données et lancer les calculs sur la machine distante. Tout ça de façon automatique. Ces calculs tournent parfaitement depuis plus de 3 mois 24/24.
- Post-Processing : j'utilise matplotlib (http://matplotlib.sourceforge.net/) et les bindings VTK (http://www.imaging.robarts.ca/~dgobbi/ … thon.html).

Pour le stockage de mes données, Python supporte le format HDF5 (http://h5py.alfven.org/) et le format Matlab (pratique pour l'échange de données).

Tout ca pour dire que pour un scientifique, Python est un vrai bonheur à utiliser. Cette liste n'est pas exhaustive, mais on a déjà 90 % des besoins généraux d'un scientifique couvert.

J'avais essayé il y a quelques temps de tout coder en Python : la conclusion est sans appel : Python ne fait clairement pas le poids face au Fortran (et sûrement au C++, mais je ne connais pas) quand il s'agit de calculs lourds. Les développeurs Python ont pallié ce problème en permettant d'appeler du Fortran de façon transparente (on importe les routines Fortran comme de simples modules Python).

En conclusion, je dirais que le couple Python/Fortran est un excellent choix pour un scientifique, du moment qu'on garde en tête que Python n'est pas fait pour du calcul très intensif, de même que Fortran n'est pas fait pour des tâches non scientifiques (réseaux, affichage, automatisation).

Autre avantage de Python/Fortran : les deux langages demandent peu de temps d'apprentissage.

EDIT : pour info, les compilateurs Fortran et C++ Intel sont gratuits sur Linux pour une utilisation non commerciale  (http://software.intel.com/en-us/article … velopment/)
En espérant que ça aide, bonne journée,

Dernière modification par Tom_L (Le 28/04/2009, à 11:28)


~~~~~~
Thomas.

Hors ligne

#12 Le 28/04/2009, à 13:47

Link31

Re : [Resolu] Quel langage choisir ?

Swaraj a écrit :

Mon appli devra segmenter une bonne grosse image 3D (de l'ordre de 3-4Go), puis realiser des traitements statistiques et evaluer les fonctionnelles de Minkowski de l'image. Il faudra alors extraire N echantillons de la bonne grosse image et refaire la meme chose ie (traitements stat` + Minkowski).

Je dois pouvoir alors lancer differents calculs via en multi-processeurs.

C++ avec Boost.GIL pour le calcul et Boost.Threads (ou Boost.MPI) pour le parallélisme. Je ne connais pas en détail Boost.GIL, mais ça ne m'étonnerait pas que ce que tu veux faire soit déjà tout prêt. Bon, étant une bibliothèque 100% template ça pourrait être légèrement complexe à utiliser, mais d'un autre côté le compilateur sera capable d'optimiser le code au maximum, probablement bien plus que du code C écrit à la main, avec de nombreuses sécurités en plus.

Hors ligne

#13 Le 28/04/2009, à 16:24

rniamo

Re : [Resolu] Quel langage choisir ?

t'as besoin de (grande) précision au niveau des calculs ? si oui le fortran pour les calculs (ou une librarie en fortran wink) pourrait t'être utile, sinon le c++ est trés bien si tu le maitrise un minimum.


< Quelques un des mes programmes  | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
        \   ^__^
         \  (o o)\_______
            (___)\            )\

Hors ligne

#14 Le 28/04/2009, à 18:34

Le Farfadet Spatial

Re : [Resolu] Quel langage choisir ?

Salut à tous !

   je précise, à toutes fins utiles : mes domaines de spécialités, ce sont les mathématiques appliquées et l'informatique théorique. Pour ma thèse, je participe au développement d'un modèle numérique d'océan (http://www.legos.obs-mip.fr/~lebars/). Mes langages préférés serait plutôt Haskell et OCaml, mais à mon sens le meilleur choix actuel pour du calcul intensif, c'est C++.

   Ah ! Et je suis aussi d'avis qu'il faut abandonner Fortran, même pour le calcul scientifique, parce que c'est pour moi un archaïsme.

Swaraj a écrit :

Perdu ! J'ai fait infiniment peu de Fortran, j'ai fait par contre du C et du Java !

Alors, je dirais : fais-le en C. Attention, je précise que C++ n'est pas une simple surcouche de C, c'est bien un autre langage. Il faut être conscient du fait que C++, ce n'est pas C with classes.

Tom_L a écrit :

A mon avis (c'est le point de vue d'un scientifique, pas d'un informaticien), la grande force de Python est sa simplicité pour réaliser de nombreuses choses, et la grandes quantité de modules disponibles

Tu es loin d'être le seul à le penser et c'est sans doute parce que c'est bien là que se trouvent ses très grandes qualités.

Tom_L a écrit :

Autre avantage de Python/Fortran : les deux langages demandent peu de temps d'apprentissage.

Tout à fait. À l'opposé, C++ demande un grand temps d'apprentissage.

rniamo a écrit :

t'as besoin de (grande) précision au niveau des calculs ? si oui le fortran pour les calculs

Fortran n'apporte ni plus ni moins de précision numérique que C, C++, Ada, Java, Python, Haskell, OCaml, LISP ou autre. La précision vient de la représentation des flottants. Désormais, toute machine raisonnable utilise la norme IEEE-754, donc elles ont toutes la même précision. À la rigueur, des bibliothèques peuvent améliorer la précision --- maîtrise des erreurs de calcul, précision arbitraire, etc., --- mais c'est indépendant du langage.

   À bientôt.

                                                                                                                                             Le Farfadet Spatial

Hors ligne

#15 Le 28/04/2009, à 18:41

rniamo

Re : [Resolu] Quel langage choisir ?

euh ... non le fortran est beaucoup plus précis que le c++ par défaut (ok ça vient de la représentation des flottants mais au final ça revient à ça) et si la portabilité est importante le c++ est à proscrire à mon sens...si c'est pour du linux mpfr est nikel smile


< Quelques un des mes programmes  | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
        \   ^__^
         \  (o o)\_______
            (___)\            )\

Hors ligne

#16 Le 28/04/2009, à 22:33

Le Farfadet Spatial

Re : [Resolu] Quel langage choisir ?

Salut à tous !

rniamo a écrit :

non le fortran est beaucoup plus précis que le c++ par défaut (ok ça vient de la représentation des flottants mais au final ça revient à ça)

Ah ? Quel est le comportement par défaut de C++ ? Celui de Fortran ?

   Pour l'un comme pour l'autre, tu peux utiliser des flottants simples ou doubles précisions, sans qu'il soit plus difficile d'utiliser l'un ou l'autre. Ce n'est pas Fortran ou C++ qui définie la représentation des flottants, c'est la machine. À l'heure actuelle, elles respectent la norme IEE 754.

   Quant à la double précision étendue, je ne la trouve pas plus difficile à utiliser dans un langage comme dans l'autre.

   Comme ça fait mauvais genre de se citer soi-même, je te donne une source simple : http://fr.wikipedia.org/wiki/IEEE_754

si la portabilité est importante le c++ est à proscrire à mon sens

Ah ? Pourquoi ? Sur quel architecture étrange veux-tu porter ton code pour laquelle il existe un compilateur Fortran et pas de compilateur C++ ?

   Je connais des processeurs pour l'embarqué qui n'ont en gros qu'un compilateur C, par contre un calculateur avec Fortran, mais C++, je cherche.

   À bientôt.

                                                                                                                                                                   Le Farfadet Spatial

Dernière modification par Le Farfadet Spatial (Le 28/04/2009, à 22:37)

Hors ligne

#17 Le 28/04/2009, à 23:00

rniamo

Re : [Resolu] Quel langage choisir ?

euh tu m'as mal compris, je parlais de la précision et de l'utilisation en c/c++ de librairie tel mpfr qui se porte très mal sous windows.
concernant le fortran, autant pour moi, je ne le connaissais qu'au travers de libraries ... de précision.


< Quelques un des mes programmes  | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
        \   ^__^
         \  (o o)\_______
            (___)\            )\

Hors ligne

#18 Le 28/04/2009, à 23:07

rniamo

Re : [Resolu] Quel langage choisir ?

euh tu m'as mal compris, je parlais de la précision et de l'utilisation en c/c++ de librairie tel mpfr qui se porte très mal sous windows.
concernant le fortran, autant pour moi, je ne le connaissais qu'au travers de libraries ... de précision.


< Quelques un des mes programmes  | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
        \   ^__^
         \  (o o)\_______
            (___)\            )\

Hors ligne

#19 Le 28/04/2009, à 23:13

Le Farfadet Spatial

Re : [Resolu] Quel langage choisir ?

Salut à tous !

rniamo a écrit :

euh tu m'as mal compris, je parlais de la précision et de l'utilisation en c/c++ de librairie tel mpfr qui se porte très mal sous windows.

En effet : je ne comprends pas. Une partie de mon travail sur la précision des calculs sur ordinateur est consultable à cette adresse : http://www.legos.obs-mip.fr/fr/~lebars/ … ancais.pdf. Pour moi, c'est ça la précision de calcul, pas autre chose.

   Ensuite, tu parles de la précision d'une bibliothèque, ce n'est pas la précision du langage.

   De plus, je ne connais pas Windows : j'ai essayé, il n'y a pas moyen de faire du calcul scientifique sérieux sur cette plateforme. Comme j'ai plus que ce qu'il me faut en traitement vidéos, sonore et imagerie sur Linux, je ne vois pas pourquoi j'achèterais un truc aussi cher que je ne peux pas utiliser.

   Bref, je veux bien que tu précises ton propos, parce que je n'arrive pas à suivre.

   À bientôt.

                                                                                                                                                                   Le Farfadet Spatial

Dernière modification par Le Farfadet Spatial (Le 28/04/2009, à 23:16)

Hors ligne

#20 Le 28/04/2009, à 23:19

rniamo

Re : [Resolu] Quel langage choisir ?

j'ai pas vraiment le choix concernant windows ...

quand je parle de calcul de précision je veux dire par exemple utiliser 100 décimales pour des calculs (ce que faisais les librairies fortran que je connaissais avec 500 décimales).


< Quelques un des mes programmes  | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
        \   ^__^
         \  (o o)\_______
            (___)\            )\

Hors ligne

#21 Le 28/04/2009, à 23:31

Le Farfadet Spatial

Re : [Resolu] Quel langage choisir ?

Salut à tous !

rniamo a écrit :

j'ai pas vraiment le choix concernant windows ...

Il n'y a pas de reproche : je disais juste que moi, je ne connais pas Windows. Après, je suis pour la diversité : s'il y en a qui l'utilisent, ça ne me dérange pas. Tant mieux même si certains y trouvent leur compte.

quand je parle de calcul de précision je veux dire par exemple utiliser 100 décimales pour des calculs (ce que faisais les librairies fortran que je connaissais avec 500 décimales).

Cela n'a rien à voir avec la précision fournie par le langage : ce sont des bibliothèques de précision étendue, leur précision n'est pas fonction du langage, mais de la qualité de la bibliothèque et de son objectif. Il est tout à fait possible de créer une bibliothèque de précision offrant 500 décimal en C++, sans que les performances soient plus mauvaises qu'en Fortran.

   Mon expérience personnelle indique qu'entre Fortran, C et C++, il est possible d'avoir globalement les mêmes performances pour la même précision --- sans entrer dans les détails, parce que d'une part il faudrait entrer dans une comparaison des approches de la programmation, d'autre part c'est un sujet de thèse.

   À bientôt.

                                                                                                                                                                   Le Farfadet Spatial

Hors ligne

#22 Le 28/04/2009, à 23:52

rniamo

Re : [Resolu] Quel langage choisir ?

je te fais confiance là dessus mais personnelement les librairies c/c++ sont à la traine vis à vis des librairies fortran. Sous linux mpfr se débrouille mais sous windows je ne trouve rien de convaincant (même les long double sont aprfois ... de simple double).


< Quelques un des mes programmes  | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
        \   ^__^
         \  (o o)\_______
            (___)\            )\

Hors ligne

#23 Le 29/04/2009, à 00:48

Le Farfadet Spatial

Re : [Resolu] Quel langage choisir ?

Salut à tous !

rniamo a écrit :

les librairies c/c++ sont à la traine vis à vis des librairies fortran.

Il ne faut pas oublier que Fortran est utilisé depuis les années 60 (et même avant) pour le calcul scientifique, alors que ce n'est finalement que récemment que l'on a enfin compris comment utiliser au mieux les capacités de C++ et que ce dernier a fait son entrée dans le domaine du calcul à hautes performances. Sachant que C++ nécessite un long apprentissage, c'est un effet assez normal.

   À bientôt.

                                                                                                                                                                       Le Farfadet Spatial

Hors ligne

#24 Le 29/04/2009, à 10:01

Swaraj

Re : [Resolu] Quel langage choisir ?

Bonjour tout le monde !

Tom_L a écrit :

Tu avais l'air d'avoir "peur" de Pyhton, je pense pour des raisons de performances (langage interpreté). Je l'utilise tous les jours pour trois tâches :

1. Pré-Processing
2. Automatisation des calculs
3. Post processing

En fait non j'en ai pas vraiment peur ! Ce que je vous ai décrit là n'est qu'un module de l'appli finale qui se compose du traitement d'image (le module décrit), d'un mailleur et d'un code de calculs par éléments finis. Le mailleur et le solveur sont eux déjà implémentés (en Fortran !)

Une fois que mon code sera fait, je vais devoir lier les trois modules, et ça je compte bien le faire en Python ! Je pourrais peut-être en profiter pour le post-processing, j'y avais pas vraiment songé...

Link31 a écrit :

C++ avec Boost.GIL pour le calcul et Boost.Threads (ou Boost.MPI) pour le parallélisme.

J'ai jeté un oeil, la librairie semble moins fourni qu'ITK. ITK est spécialisée dans l'imagerie médicale, pour ceux que ça intéresse voici le lien

http://www.itk.org/

Le Farfadet Spatial a écrit :

Alors, je dirais : fais-le en C. Attention, je précise que C++ n'est pas une simple surcouche de C, c'est bien un autre langage. Il faut être conscient du fait que C++, ce n'est pas C with classes.
...
Tout à fait. À l'opposé, C++ demande un grand temps d'apprentissage.

J'ai bien conscience de ceci ! Mais ça peut être un bon investissement ! Déjà d'une part, je pourrais facilement utiliser la lib de templates et donc j'évite de réinventer la roue. Et ensuite, ce stage n'est qu'un prélude à ma thèse, et mon futur labo d'accueil utilise déjà le C++.

A plouf !

Hors ligne

#25 Le 29/04/2009, à 11:24

Le Farfadet Spatial

Re : [Resolu] Quel langage choisir ?

Salut à tous !

Swaraj a écrit :

Déjà d'une part, je pourrais facilement utiliser la lib de templates et donc j'évite de réinventer la roue. Et ensuite, ce stage n'est qu'un prélude à ma thèse, et mon futur labo d'accueil utilise déjà le C++.

Ça, ce sont deux arguments forts. La bibliothèque ITK étant bien fourni, cela milite fortement à ce que tu optes pour C++. Pour résumer : tu connais déjà C et Java, ce qui signifie que tu es déjà programmeur (à mon sens C++ n'est pas le bon langage pour apprendre la programmation), tu disposes d'une bibliothèque fournie pour ce que tu veux faire en C++ et tu seras amené à utiliser couramment C++ dans moins de six mois. Donc, oui, C++ semble un bon choix.

   Attention : C++ est non seulement un langage qui nécessite un long apprentissage, il est aussi très souvent mal enseigné. À mon sens, la seule référence à laquelle on peut faire confiance est celle-ci --- elle nécessite une expérience de la programmation préalable, mais c'est bien ton cas :

      Le langage C++
      Bjarne STROUSTRUP
      Pearson Education

   Bjarne STROUSTRUP est l'inventeur du langage.

   À bientôt.

                                                                                                                                                                   Le Farfadet Spatial

Hors ligne