et voila
/usr/local/bin/g++ main.cpp -O2 -I../genial
et voila
/usr/local/bin/g++ main.cpp -O2 -I../genial
et encore voila
/usr/local/bin/g++ main.cpp -O3 -I../genial -fopenmp -lgomp
et encore voila :-)
/usr/local/bin/g++ main.cpp -O3 -I../genial
j'ai été etonné que des performances avec la compilation avec openmp degrade les perfs...
bizarre bizarre
C'est toujours largement en deçà d'ICL. Tes benchs GCC4.2 donnent des perfs de l'odre de 250 Mflops contre 7000-8000 sur mon Pentium 4 HT 2.6GHz.
T'as bien laisséla macro HAS_SSE2 dans le fichier 'genial_config.h'?
Mais je pense plutôt que c'est le problème habituel de GCC qui refait surface: GCC ne sait tout simplement pas inliner comme il faudrait. Ca me fait bien rire quand je lis fréquemment dans d'autres discussions du forums des trucs du genre "faire confiance aux compilos pour inliner comme il faut".
J'ai depuis longtemps la preuve que GCC est à la masse de ce point de vue. (c'est la raison principale pour laquelle les benchs FFT compilés avec GCC sont si mauvais comparés à VC, mais surtout ICL). GCC ne sait tout simplement pas optimiser la programmation générique, et je me moque bien de son optimisation de programmes "C".
Essaye de décommenter à tour de rôle les macros suivantes dans 'genial_config.h'. Assure toi peut-être quand même au préalable que GCC Mac voit bien la macro par exemple avec "#error coucou"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 #elif defined(__GNUC__) #error coucou //#define inline __inline //#define inline __attribute__((__always_inline__)) #endif
Les perfs ne sont pas tant dégradées que ça mais c'est effectivement bizarre, d'autant que rien n'est parallélisé dans cette version de multiplication matriciel... (c'est pas un bon point pour GCC!)Envoyé par epsilon68
Mais pour l'instant c'est négligeable par rapport aux mauvaises perfs de GCC
je suis en train de recompiler avec l'inline forcé...
20 minutes au moins que ca compile ....
Tu peux dans un premier temps diviser par 2 le temps de compilation en commentant l'une ou l'autre de ces lignes dans le programme principal.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 cout << "float" << endl; sub(M,0,0,M.nrows(),2)=gemm_benchmark<float >(sizes); //cout << "double" << endl; sub(M,0,2,M.nrows(),2)=gemm_benchmark<double >(sizes);
toujours pas fini ... c'est atrocement long !!!
... je ne vais plus l'arreter maintenant ... mais c'est bon a savoir pour les prochains benchs...Envoyé par Charlemagne
... toujours pas fini ...
vive la precompilation !!!!
vive les libs !!!!
Waooo les dll !!!
J'ai pas chronométré le temps de compilation avec ICL, mais en tout cas c'est acceptable. Pas un bon point non plus pour GCC.Envoyé par epsilon68
(on aura compris pour quel compilo je penche...)
et voila avec
g++ -O3
et l'inline forcé
bon ca vole plus haut mais encore trop bas :-(
Effectivement je suis encore 3 fois plus rapide sur mon ordi avec ICL.
Ca a duré combien de temps finalement la compilation?
Il me vient un doute sur ta ligne de commande pour la compilation. Si tu utilises bien SSE2 ou SSE3, il faut normalement (en tout cas pour GCC 3.4) donner l'option "-msse2" respectivement "-msse3". (je ne comprends pas pourquoi GCC a besoin d'options de la sortes, VC et ICL s'en passent bien) C'est bizarre que GCC ne t'ait rien fait remarqué.
Vérifie peut-être aussi que GCC applique bien TOUS les inlines en lui donnant l'option "-Winline". Si tu vois ne serait-ce qu'un seul warning, alors c'est qu'il n'en fait qu'à sa tête et refuse à tort d'obéir aux consignes.
Si tu ne vois pas de warning, ça veut dire qu'il ne sait pas optimiser...
J'ai relancé la compilation
/usr/local/bin/g++ main.cpp -I../genial -O2 -msse2 -Winline
debut: 16h07
j'ai downloadé ICC standard edition 10.16 pour voir ....
des conseils sur la compilation de Genial ?
aussi la seule difference entre la standard et la pro, ce sont les libs de intel ?
ICC existe pour MAc?? ICC est gratuit pour Mac???? Je pensais que c'était gratuit uniquement sous Linux. Sous Windows il n'y a de gratuit que la licence d'évaluation pendant seulement 2-3 mois.Envoyé par epsilon68
Suivre la même procédure que pour GCC mais avec quelques differences de syntaxe. (cf documentation). Mais ça ne marchera probablement toujours pas à cause des problèmes de configuration que t'avais précédemment.Envoyé par epsilon68
De toute façon pour ces quelques tests, il ne vaut mieux pas compiler la librairie puisque tu essayes diverses options.
J'en sais rien, à fortiori sous Mac/Linux.Envoyé par epsilon68
Je sais juste qu'à l'époque (ça remonte à un peu moins de 2 ans) à laquelle j'ai comparé ICL (Windows) et ICC (Linux), les perfs étaient nettement meilleur pour ICL, alors que je m'attendais à la même chose. J'avais l'impression qu'ICC n'en faisait qu'à sa tête, tout comme GCC, en ne suivant pas les consignes pour forcer les inlines. ICC restait quand même meilleur que GCC.
non non ce n'est pas gratuit, j'ai telechargé la version d'evalEnvoyé par Charlemagne
on est bien parti pour comparer les deuxEnvoyé par Charlemagne
j'ai compilé avec icc...
icpc main.cpp -o icc-genial -I../genial -O2
debut: 17h25
fin: 19h00
bon je comprends pas pourquoi les perfs chutent a partir de 400x400 ?
j'ai recompilé avec icc
icpc main.cpp -o icc-genial -I../genial -O2 -finline -msse3
(et j'ai enlevé les doubles)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager