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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

[Optimisation] Choix du compilateur


Sujet :

C++

  1. #41
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Si tu crois que c'est ça qui va faire la différence...
    Je n'en sais rien je n'ai pas tes compétences mais autant utiliser les optimisations maximales. (Quoique il y en a un bon paquet qui ne sont pas activées avec -O3).

    Les perfs d'ICC était du même ordre de grandeur que GCC.
    On en revient toujours au même problème, est-ce que le problème vient du portage d'ICC sur Linux ou de GCC sur windows ? Je n'en sais rien.

    Mais après tout c'est peut-être la faute à Linux, je n'en sais rein.
    Bien entendu . Et pour information, mon test gcc/Icc ne portait pas sur Linux.

    Bien sûr, mais c'est du bla-bla. Ici on suppose sur du code identique.
    Je vais défendre ma paroisse mais je maintient que travailler sur les algorithmes est bien plus important que travailler sur les options et le choix de son compilateur. Perso, je pars du principe que si le compilateur compile le code dans le langage que l'on veut (avec la norme que l'on veut), ça suffit.

    Vous voulez me/vous prouver que GCC est un bon compilateur?
    Personnellement je ne cherche pas à prouver quoi que ce soit, ça n'est pas mon propos.

    Alors testez mon petit bench, vous n'en aurez pas pour longtemps. Le reste n'est que verbiage...
    Je prédis que GCC est hors du coup face à ICL...
    Manifestement tu n'as pas lu ce que nous avons écrit au dessus : la rapidité d'exécution dépend également du code et n'est pas dépendant uniquement du compilateur. Dans ton cas (comme dans d'autres) ICC sera plus rapide, dans d'autres cas on pourra trouver du code plus rapide sur GCC. La vitesse va aussi dépendre du processeur sur lequel est éxécuté le code. Les compilateurs génèrent du code différent suivant les processeurs cibles et donc parfois pas toujours aussi efficacement, bref trop de paramètres pour effectuer une comparaison objective (si tant est qu'on puisse arriver à une objectivité dans ce domaine)

  2. #42
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Points : 460
    Points
    460
    Par défaut
    Je t'offrais la possibilité de comparer GCC, ICL et d'autres compilos sur un code très exigeant (plus intéressant que sur la fonction plus haut avec un simple "if")
    Si t'estimes qu'il n'est pas possible de comparer de manière "objective", alors y'a pas de débat possible!

    Et j'attends de voir les options de compilation dont parle Loufoque...

  3. #43
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Si t'estimes qu'il n'est pas possible de comparer de manière "objective"
    Le problème est qu'à partir d'un seul exemple tu vas extrapoler et dire qu'ICC surpasse gcc. Ce qui sera le cas sur ton exemple précis (enfin c'est ce que je pense si je suis ton raisonnement).

    Pour être objectif il faudrait décortiquer exactement comment fonctionnent les deux compilateurs pour pouvoir prédire dans quelle situation tel ou tel bout de code sera plus rapide sur l'un comme sur l'autre.

    Ensuite, est-ce que la rapidité va est due à la génération du code cible ou à la manipulation de l'AST (bien plus qu'un AST pour ces deux compilateurs j'en convient) ? C'est encore un point à étudier et qui doit être pris en compte.

    On peut toujours en discuter mais à mon humble avis, si l'objectivité se résume à "compiles mon code et regarde", c'est pas très scientifique comme méthode tu ne trouves pas ?

    Il ne faut pas non plus oublier que le PO a son propre code et qu'il serait intéressant qu'il fasse les tests sur celui-ci. (Et qu'on soit d'accord, ça ne reste que des tests)

  4. #44
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Points : 460
    Points
    460
    Par défaut
    Citation Envoyé par PRomu@ld Voir le message
    Le problème est qu'à partir d'un seul exemple tu vas extrapoler et dire qu'ICC surpasse gcc. Ce qui sera le cas sur ton exemple précis (enfin c'est ce que je pense si je suis ton raisonnement).
    Mais je m'en suis fait beaucoup d'autres des benchs avec le temps...
    certes uniquement sue la programmation générique, le seul style de programmation qui m'intéresse. Mais libre à toi de ne programmer qu'en C, ou en objet.

    Citation Envoyé par PRomu@ld Voir le message
    Pour être objectif il faudrait décortiquer exactement comment fonctionnent les deux compilateurs pour pouvoir prédire dans quelle situation tel ou tel bout de code sera plus rapide sur l'un comme sur l'autre.
    Alors fais le! Mais tu ne veux même pas compiler le petit programme que je te propose. GCC y serait ridiculisé, mais tu ne veux pas l'admettre...

    Citation Envoyé par PRomu@ld Voir le message
    On peut toujours en discuter mais à mon humble avis, si l'objectivité se résume à "compiles mon code et regarde", c'est pas très scientifique comme méthode tu ne trouves pas ?
    "scientifique"!!!
    Je m'en moque in fine de ta méthode scientifique. On fait le code le plus propre possible et on compare les perfs des compilos, point barre. C'est l'idée de ce topic.
    T'as qu'à proposer un bench, mais tu ne sais probablement même pas utiliser les instructions SIMD, et tu penses savoir optimiser des algos...

    Citation Envoyé par PRomu@ld
    Et pour information, mon test gcc/Icc ne portait pas sur Linux.
    Sous quel système alors? Mac? car ICC n'existe pas sous Windows, c'est ICL. après tout je m'en moque.

    J'en ai marre d'une telle mauvaise foi. Même pas foutu de compiler un programme pour comparer. Je me casse.

  5. #45
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Même pas foutu de compiler un programme pour comparer.
    Rien que pour te faire plaisir, je viens de compiler ton exemple. J'ai très exactement 14301 lignes d'erreur à la compilation. Tu vas dire que je suis de mauvaise fois mais quand même ... .

    On fait le code le plus propre possible
    J'ai réussi à compiler la bibliothèque au pris de modification dans ton code (il y a des trucs qui ne sont pas du tout dans aucune norme, ni C ni C++)

    Citation Envoyé par Charlemagne
    GCC y serait ridiculisé, mais tu ne veux pas l'admettre...
    Citation Envoyé par Charlemagne
    J'en ai marre d'une telle mauvaise foi.


    On fait le code le plus propre possible et on compare les perfs des compilos, point barre. C'est l'idée de ce topic.
    [HS]
    Ok, j'avais pas compris le principe.

    tu me dira au passage qui a la plus grosse
    [/HS]

    Ici, le forum a un but principal, c'est d'être le plus professionnel possible, ne l'oublions pas.

  6. #46
    NairodDorian
    Invité(e)
    Par défaut
    Voilà je propose un nouveau test. Vous le savez certainement que les compilos rencontrent des difficultés à utiliser correctement les instructions SSE pour en tirer profit afin de générer des programmes efficaces. (moi même d'ailleur)

    Je pense que c'est un bon test pour savoir quel compilo se sortira le mieux de cette affaire

    Je l'ai adapté pour en faire un programme console simple en utilisant le langage C++ et la stl.

    Le code est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    #include <iostream>
    #include <cmath>
    #include <windows.h>
     
    using namespace std;
     
    float *plin;
     
    void RemplirLin() {
    	float f = 0.0f;
    	int i;
     
    	for (i = 0; i < 6336; i++) {
    		plin[i] = f;
    		f += 1.5f;
    	}
    }
     
    int __fastcall cumSqrt(float *pflt) {
    	float f, r = 0.0f;
    	int i = 6335;
     
    	do {
    		f = pflt[i];
    		r += ((f > 1.0f) ? (float)sqrt(f) : 1.0f);
    	} while (i--);
     
    	return (int)r;
    }
     
    void Test() {
    	LARGE_INTEGER start, end;
    	int v;
    	RemplirLin();
     
    	QueryPerformanceCounter(&start);
    	v = cumSqrt(plin);
    	QueryPerformanceCounter(&end);
    	end.QuadPart -= start.QuadPart;
     
    	cout << "Ticks : " << end.QuadPart << endl;
    	cout << v << endl;
    }
     
    int main() {
    	plin = new float[6336];
    	if (!plin) return 1;
    	Test();
    	delete [] plin;
    	return 0;
    }
    Y a rien d'exceptionnel mais c'est suffisant pour comparer l'éfficacité des compilos.

    Je posts l'asm généré par MSC++ et ICL pour ceux qui veulent comparé et qui y connaissent qqch. Je ne commenterai pas, trop long et puis les noms parlent d'eux même pour ceux qui ont fait un peu d'asm sans vraiment touché à SSE.

    MSC++ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    	xorps	xmm2, xmm2
    	movss	xmm1, DWORD PTR __real@3f800000
    	mov	eax, 6335				; 000018bfH
    $LL3@cumSqrt:
    	movss	xmm0, DWORD PTR [ecx+eax*4]
    	comiss	xmm0, xmm1
    	jbe	SHORT $LN6@cumSqrt
    	sqrtss	xmm0, xmm0
    	jmp	SHORT $LN7@cumSqrt
    $LN6@cumSqrt:
    	movaps	xmm0, xmm1
    $LN7@cumSqrt:
    	mov	edx, eax
    	dec	eax
    	addss	xmm0, xmm2
    	movaps	xmm2, xmm0
    	test	edx, edx
    	jne	SHORT $LL3@cumSqrt
     
    	cvttss2si eax, xmm2
     
    	ret	0
    ICL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    $B14$1:
            movaps    xmm0, XMMWORD PTR _2il0floatpacket$2          
            xorps     xmm1, xmm1                                    
            xor       eax, eax                                      
    $B14$2:                         
            movss     xmm2, DWORD PTR [ecx+25340]
            movss     xmm3, DWORD PTR [ecx+25332]
            movss     xmm5, DWORD PTR [ecx+25336]
            movss     xmm4, DWORD PTR [ecx+25328]
            unpcklps  xmm2, xmm3
            movaps    xmm3, xmm0
            unpcklps  xmm5, xmm4
            unpcklps  xmm2, xmm5
            cmpltps   xmm3, xmm2
            rsqrtps   xmm6, xmm2
            xorps     xmm7, xmm7
            cmpneqps  xmm7, xmm2
            add       ecx, -16
            add       eax, 4
            andps     xmm7, xmm6
            mulps     xmm2, xmm7
            mulps     xmm7, xmm2
            subps     xmm7, XMMWORD PTR _2il0floatpacket$3
            mulps     xmm2, xmm7
            cmp       eax, 6336
            mulps     xmm2, XMMWORD PTR _2il0floatpacket$4
            andps     xmm2, xmm3
            andnps    xmm3, xmm0
            orps      xmm2, xmm3
            addps     xmm1, xmm2
            jb        $B14$2
    $B14$3:
            haddps    xmm1, xmm1
            haddps    xmm1, xmm1
            cvttss2si eax, xmm1
            ret        0
    Comme j'ai pas gcc si qq'un peut posté l'asm généré par ce dernier afin de comparer et si vous avez à votre disposition gcc et msc++ ou encore icl donné le nombre de ticks obtenu pour chacun des exécutables générés par ces différents compilos. (Le must serai d'indiquer sur quel proco tourne le code).

    Remarque :
    Compilé avec support SSE2, optimisation maxi (Ox MSC++, O3 gcc, O3 icl).
    Sur gcc spécifié n'oublié pas de spécifier, "-fomit-frame-pointer".

    Note perso : Je n'aurai jamais fais mieux que ICL mais tout de fois mieux que MSC++, c'est vous dire si ICL est fort, très fort.
    Résultats sur Pentium T2300 :
    MSC++ : 3264
    ICL : 494
    Dernière modification par Sendusha ; 02/05/2011 à 19h59.

  7. #47
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    J'avais oublié que ce site compare des languages avec plusieurs algos bien différents mais classiques et vous proposer de proposer vous même des optimizations pour que les tests soient les plus proches possible de la réalité.

    Ici une comparaison d'algos entre gcc et ICC (tout est sous Debian)
    http://shootout.alioth.debian.org/gp...gpp&lang2=icpp

    Perso, je prends ça comme un avis parmis tant d'autres, parceque les tests sous windows m'interessent largement plus (a cause du jeu vidéo) et bon c'est plus dur d'avoir le même genre de comparatif.

    Donc comme toute source d'info, a prendre comme un avis (mesuré mais un avis quand même dépendant).

    J'étais en train de me dire, comme dit précédemment, du coup vu que les principaux compilos que nous avons actuellement sont quand même pas mal optimizés par rapport a quelques années avant, la réponse pratique à la question d'origine serait :
    1) prendre un des compilos gratos (VC ou GCC, selon si on veut que ce soit portable ou par préférence)
    2) faire toute l'appli
    3) si les perfs sont pas suffisantes, revoir les algos
    4) si ce n'est pas suffisant, revoir les configurations du compilo
    5) si ce n'est pas suffisant, tester le compilo d'intel (ya quelques jours d'essais gratos)

    ?

  8. #48
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    <mode curieux>
    Et sans toutes ces obfuscations que sont __fastcall et while (--i) ?
    Voire, et avec un petit accumulate des familles ?
    </>
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  9. #49
    NairodDorian
    Invité(e)
    Par défaut
    Citation Envoyé par Luc Hermitte
    que sont __fastcall et while (--i)
    Tu demandes quoi exactement? Ce que fastcall et while (--i) signifie?

  10. #50
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Non. De voir ce dont sont capables les compilos quand on ne leur rajoute pas des détails d'optimisation pareils.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  11. #51
    Membre éclairé Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Points : 871
    Points
    871
    Par défaut
    Bon, et si on revenait au sujet ?

    Moi j'suis bien d'accord pour compiler la bibliothèque de Charlemagne, mais il faut le compilateur d'intel pour comparer.
    On peut l'avoir gratuit sous Windows ?

    Pareil pour le compilateur Mingw, faudrait me dire les options de compilations.
    Par contre, j'ai que la 3.4.5, et pas la 4.X.X.

    A moins que quelqu'un d'autre se dévoue.

    [HS]
    Mais en fait, ça sert à rien de comparer ça, on devrait tout faire sur GPU .
    [/HS]

  12. #52
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    On peut l'avoir gratuit sous Windows ?
    Il y a une période d'evaluation gratuite : http://www.intel.com/cd/software/pro...eng/368972.htm

  13. #53
    En attente de confirmation mail
    Inscrit en
    Octobre 2007
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Octobre 2007
    Messages : 285
    Points : 348
    Points
    348
    Par défaut
    Ma petite pierre à l'édifice.

    Afin de grappiller quelques minutes précieuses sur un programme (orienté calculs scientifiques et matriciels) + ou - optimisé sur certains bout de codes, j'ai voulu tester sur cet exemple précis le gain obtenu en utilisant le compilateur Intel par rapport à gcc sur un Mac Intel (sous Mac OS X).

    Résultats : un gain de 20% avec intel par rapport à gcc et une compilation un peu plus rapide.

    Bon quel bilan pouvons nous obtenir de ces résultats ?
    Que dans certains cas, le compilateur Intel permet d'obtenir un gain en terme d'exécution et l'utilisation des multi-coeurs Intel sans toucher au code (bon, le code a tout de même été pensé pour facilité la parallélisation de certaines boucles : pris un peu de temps avant pour un algo efficace : cf les posts précédents sur l'utilisation d'un super compilo sur un algo de *****).

    Donc pour répondre au post initial, je pense que cela peut être intéressant de faire une évaluation gratuite du compilo Intel. Si déjà juste comme ça il y a des améliorations, cela peut valoir le coup, surtout pour une entreprise, de faire l'effort financier.

    Après tout dépend l'application : si c'est pour gagner quelques millisecondes... l'investissement en vaut il la peine ??? Par contre sur des temps d'exécution de l'ordre de l'heure voir de la journée, ben même 5% d'accélération, ça peut faire la différence.

    pour répondre au <mode curieux> de Luc Hermitte, il me semble que si le code n'est pas trop complexe, la plupart des compilateurs se débrouillent très bien pour faire ce genre d'optimisations (mais bon, quand c'est un automatisme, c'est quand même mieux de l'écrire directement non ?) (cf. il y a une discussion (je retrouve plus où) sur le forum qui en parle)

  14. #54
    Membre éclairé Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Points : 871
    Points
    871
    Par défaut
    Citation Envoyé par JeromeBcx Voir le message
    Afin de grappiller quelques minutes précieuses sur un programme (orienté calculs scientifiques et matriciels) + ou - optimisé sur certains bout de codes, j'ai voulu tester sur cet exemple précis le gain obtenu en utilisant le compilateur Intel par rapport à gcc sur un Mac Intel (sous Mac OS X).

    Résultats : un gain de 20% avec intel par rapport à gcc et une compilation un peu plus rapide.

    Bon quel bilan pouvons nous obtenir de ces résultats ?
    Que dans certains cas, le compilateur Intel permet d'obtenir un gain en terme d'exécution et l'utilisation des multi-coeurs Intel sans toucher au code (bon, le code a tout de même été pensé pour facilité la parallélisation de certaines boucles : pris un peu de temps avant pour un algo efficace : cf les posts précédents sur l'utilisation d'un super compilo sur un algo de *****).

    Donc pour répondre au post initial, je pense que cela peut être intéressant de faire une évaluation gratuite du compilo Intel. Si déjà juste comme ça il y a des améliorations, cela peut valoir le coup, surtout pour une entreprise, de faire l'effort financier.

    Après tout dépend l'application : si c'est pour gagner quelques millisecondes... l'investissement en vaut il la peine ??? Par contre sur des temps d'exécution de l'ordre de l'heure voir de la journée, ben même 5% d'accélération, ça peut faire la différence.
    Gagner 5-20% sur un truc parallélisable, quand on peut gagner 2 ordres de grandeurs avec un GPU, pour un prix dérisoire...


    pour répondre au <mode curieux> de Luc Hermitte, il me semble que si le code n'est pas trop complexe, la plupart des compilateurs se débrouillent très bien pour faire ce genre d'optimisations (mais bon, quand c'est un automatisme, c'est quand même mieux de l'écrire directement non ?) (cf. il y a une discussion (je retrouve plus où) sur le forum qui en parle)
    Ca dépend de ce que tu appelles automatisme.

    Les trucs que Luc signalait, je trouve ça inutile, parce que dans 95% des cas, dans des détails d'optimisations comme ceux là, tu crois maîtriser ce que tu fais, alors que justement non, c'est le compilateur qui décide ce qu'il fait et pas toi.

    Vive la frustration alors.

  15. #55
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par HanLee Voir le message
    Gagner 5-20% sur un truc parallélisable, quand on peut gagner 2 ordres de grandeurs avec un GPU, pour un prix dérisoire...
    Mais comme ça ne marche pas si facilement que ça (les codes qui fonctionnent très bien sur GPU sont rares), qu'il faut avoir une autre manière de penser, que rien n'est standard et qu'il faut le matos qui va bien, c'est plutôt passer sur GPU qui peut être plus... bizarre.

  16. #56
    Membre éclairé Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Points : 871
    Points
    871
    Par défaut
    Citation Envoyé par Matthieu Brucher Voir le message
    Mais comme ça ne marche pas si facilement que ça (les codes qui fonctionnent très bien sur GPU sont rares), qu'il faut avoir une autre manière de penser, que rien n'est standard et qu'il faut le matos qui va bien, c'est plutôt passer sur GPU qui peut être plus... bizarre.
    C'était une boutade .
    Mais moi j'ai testé les demos de nVidia/CUDA au travail, c'est vraiment impressionnant comment ils tournaient tous très bien.

    Disons qu'avec la souplesse qu'offrent les dernieres cartes de nVidia (compatible CUDA), c'est très transparent (à partir des GeForce 8).
    Tu n'as plus à faire de la gymnastique pour les calculs, raisonner en terme de texture, de pixels, et vertex ou que sais-je.

    Les cartes précédentes étaient plus limitées au niveau de la lecture aléatoire en mémoire et écriture aléatoire (même des GeForce 7).

    Le seul vrai obstacle devient alors le multi-threading.

  17. #57
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par HanLee Voir le message
    Mais moi j'ai testé les demos de nVidia/CUDA au travail, c'est vraiment impressionnant comment ils tournaient tous très bien.

    Disons qu'avec la souplesse qu'offrent les dernieres cartes de nVidia (compatible CUDA), c'est très transparent (à partir des GeForce 8).
    Tu n'as plus à faire de la gymnastique pour les calculs, raisonner en terme de texture, de pixels, et vertex ou que sais-je.

    Les cartes précédentes étaient plus limitées au niveau de la lecture aléatoire en mémoire et écriture aléatoire (même des GeForce 7).

    Le seul vrai obstacle devient alors le multi-threading.
    J'ai aussi testé, c'est clair que ça marche très bien mais :
    - les accès mémoire optimaux sont ceux qui sont les moins optimaux sur un CPU
    - il faut le moins possible avoir de structures de contrôle

    Rien que ces deux points (sans compter le matériel et la portabilité) font que la programmation GPU n'est pas à la portée de tout un chacun

  18. #58
    Membre éclairé Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Points : 871
    Points
    871
    Par défaut
    Citation Envoyé par Matthieu Brucher Voir le message
    J'ai aussi testé, c'est clair que ça marche très bien mais :
    - les accès mémoire optimaux sont ceux qui sont les moins optimaux sur un CPU
    - il faut le moins possible avoir de structures de contrôle

    Rien que ces deux points (sans compter le matériel et la portabilité) font que la programmation GPU n'est pas à la portée de tout un chacun
    Oui c'est sûr, mais justement on est dans le cadre de calcul scientifique très lourd dont parlait JeromeBcx.

    Comment un institut ou une entreprise qui fait de la recherche peut-elle se priver d'une telle puissance à un coût si peu élevé ?

  19. #59
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par HanLee Voir le message
    Oui c'est sûr, mais justement on est dans le cadre de calcul scientifique très lourd dont parlait JeromeBcx.
    Effectivement, ça peut s'envisager.
    Citation Envoyé par HanLee Voir le message
    Comment un institut ou une entreprise qui fait de la recherche peut-elle se priver d'une telle puissance à un coût si peu élevé ?
    Il y a plusieurs points en fait :
    - c'est une technologie très récente qui n'a pas été éprouvée par le temps
    - la précision de CUDA n'est pas géniale (jusqu'il y a peu, on ne pouvait pas travailler correctement sur les doubles)
    - il est nécessaire de retravailler tous les codes existants qui ont été testés et éprouvé, ce qui engendre un nouveau risque, et il faut savoir ce qui peut effectivement être profitable et ce qui ne le peut pas (ne pas oublier que la mémoire accessible est tout de même assez faible en CUDA, même si on a 1Go accessible téhoriquement).

  20. #60
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Même avec un CUDA récent, les flottants ne respectent pas l'IEEE 754 standard.
    Boost ftw

Discussions similaires

  1. Choix de compilateur
    Par usto2005 dans le forum Fortran
    Réponses: 3
    Dernier message: 16/01/2013, 16h26
  2. optimisation par le compilateur
    Par denispir dans le forum Débuter
    Réponses: 5
    Dernier message: 05/04/2012, 17h44
  3. Optimisation choix container/algorithme
    Par Olistan dans le forum SL & STL
    Réponses: 9
    Dernier message: 19/03/2008, 14h39
  4. Choix du compilateur
    Par Amybond dans le forum Choisir un environnement de développement
    Réponses: 3
    Dernier message: 28/02/2007, 22h56
  5. Optimisation -> choix des services à activer
    Par infotron dans le forum Mandriva / Mageia
    Réponses: 20
    Dernier message: 25/05/2004, 13h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo