Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
860 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [c] Optimisation O3 de gcc

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[c] Optimisation O3 de gcc

n°638921
farib
Posté le 11-02-2004 à 13:49:56  profilanswer
 

j'ai un tp ou pour mettre en évidence des pb de pagination mémoire et d'optimisation, je calcule la somme de tous les éléments d'un tableau a deux dimensions de deux manières : par colonne , puis par  ligne, et je mesure leur temps d'exécution
 
M=N=2048
 

Code :
  1. int somme1(int tableau[N][M])
  2. {
  3.    int i,j, somme;
  4.    somme = 0;
  5.    for (i=0; i < N; i++) {
  6.       for (j=0; j < M; j++) {
  7.          somme += tableau[i][j];
  8.       }
  9.    }
  10.    return somme;
  11. }
  12. int somme2(int tableau[N][M])
  13. {
  14.    int i,j, somme;
  15.    somme = 0;
  16.    for (j=0; j < M; j++) {
  17.       for (i=0; i < N; i++) {
  18.          somme += tableau[i][j];
  19.       }
  20.    }
  21.    return somme;
  22. }


 
 
lorsque je passe en O3, les deux algos sont prèsques identiques
 


13:48 farib@alizee ~% gcc -O2 tp4.c -o o2  
 
13:48 farib@alizee ~% gcc -O3 tp4.c -o o3  
 
13:49 farib@alizee ~% ./o2
Le temps d'excécution de la fonction somme1 est  54097 microsecondes  
Le temps d'exécution de la fonction somme2 est  144731 microsecondes  
13:49 farib@alizee ~% ./o3
Le temps d'excécution de la fonction somme1 est  41750 microsecondes  
Le temps d'exécution de la fonction somme2 est  38920 microsecondes


 
 
quelle est donc l'optimisation utilisée qui peut produire un tel résultat ?  :??:  :??:


Message édité par farib le 11-02-2004 à 14:06:52

---------------
Bitcoin, Magical Thinking, and Political Ideology
mood
Publicité
Posté le 11-02-2004 à 13:49:56  profilanswer
 

n°638950
Tomate
Posté le 11-02-2004 à 14:05:31  profilanswer
 

fo comparer l assembleur :D


---------------
:: Light is Right ::
n°639046
Taz
bisounours-codeur
Posté le 11-02-2004 à 14:56:33  profilanswer
 

-O3 fait de l'inline à gogo

n°639088
farib
Posté le 11-02-2004 à 15:27:35  profilanswer
 

taz a écrit :

-O3 fait de l'inline à gogo


euh je pense pas que ça ait à voir...
 


---------------
Bitcoin, Magical Thinking, and Political Ideology
n°639091
Taz
bisounours-codeur
Posté le 11-02-2004 à 15:29:33  profilanswer
 

mais bon tes mesures sont élagement soumises à des alea. fait des calcul qui te permettent d'avoir un temps d'exécution >=10sec

n°639117
Taz
bisounours-codeur
Posté le 11-02-2004 à 15:57:28  profilanswer
 

farib a écrit :


euh je pense pas que ça ait à voir...
 
 

bah ouais, j'ai répondu un peu à coté de la plaque, j'avais pas vraiment lu, et je pensais que tu faisais plusieurs milleirs d'appels à ta fonction pour la tester, mais non, donc l'inline n'influe pas.  
 
1) prends le temps moyen sur un bon millier d'appel
2) fais en sorte que la durée de l'appel ne soit pas infinitésimale

n°639159
farib
Posté le 11-02-2004 à 16:27:41  profilanswer
 

c'est bon pour l'appel, les résultats sont normaux, et j'obtiens le même ordre de grandeur à chaque fois
 
je voudrais juste savoir quelle est l'optimisation de gcc qui rend les deux algos équivalents


---------------
Bitcoin, Magical Thinking, and Political Ideology
n°639160
Kristoph
Posté le 11-02-2004 à 16:28:59  profilanswer
 

farib a écrit :

c'est bon pour l'appel, les résultats sont normaux, et j'obtiens le même ordre de grandeur à chaque fois
 
je voudrais juste savoir quelle est l'optimisation de gcc qui rend les deux algos équivalents


 
Tout simplement le fait qu'il se rende compte que l'ordre d'evaluation n'influe pas. IMHO

n°639173
farib
Posté le 11-02-2004 à 16:42:31  profilanswer
 

Kristoph a écrit :


 
Tout simplement le fait qu'il se rende compte que l'ordre d'evaluation n'influe pas. IMHO


cad ? c'est à dire qu'il fait justement le raisommement que les accès mémoires pénalisent, et que faire la somme dans l'autre sens fonctionne mieux ?
 
c'est quoi le nom de cette optimisation ( notemment dans les options de gcc ?)
 
sympa :)


Message édité par farib le 11-02-2004 à 16:43:11

---------------
Bitcoin, Magical Thinking, and Political Ideology
n°639797
farib
Posté le 12-02-2004 à 00:08:30  profilanswer
 
mood
Publicité
Posté le 12-02-2004 à 00:08:30  profilanswer
 

n°639798
Kristoph
Posté le 12-02-2004 à 00:09:49  profilanswer
 

farib a écrit :


cad ? c'est à dire qu'il fait justement le raisommement que les accès mémoires pénalisent, et que faire la somme dans l'autre sens fonctionne mieux ?
 
c'est quoi le nom de cette optimisation ( notemment dans les options de gcc ?)
 
sympa :)


 
J'en sais rien. Tu n'as qu'à les essayer une par une pour trouver c'est laquelle qui compte.

n°639811
Taz
bisounours-codeur
Posté le 12-02-2004 à 00:29:16  profilanswer
 

mais t'as essayé sur des vrais exemples qui durent plusieurs secondes ?!!!

n°639820
bjone
Insert booze to continue
Posté le 12-02-2004 à 00:39:30  profilanswer
 

j'aurais le déroulement de boucle, mais il est anormal qu'au premier jeu, somme 1 < somme 2 et qu'au deuxième somme 2 < somme 1.
 

n°639822
Kristoph
Posté le 12-02-2004 à 00:46:10  profilanswer
 

bjone a écrit :

j'aurais le déroulement de boucle, mais il est anormal qu'au premier jeu, somme 1 < somme 2 et qu'au deuxième somme 2 < somme 1.
 
 


 
Oui mais le deuxième c'est une difference de 3 ms seulement. Pas vraiment signification quoi.
 
Il suffit que après optim gcc génère le même code exactement et que le deuxième passage profite du fait qu'une partie du tableau est déjà en cache.

n°639831
Tomate
Posté le 12-02-2004 à 00:59:56  profilanswer
 

a mon avis il est moins gourmand de parcourir le tableau par colonne puis par ligne ke l inverse, il y a plus de calculs je pense


---------------
:: Light is Right ::
n°639834
bjone
Insert booze to continue
Posté le 12-02-2004 à 01:07:27  profilanswer
 

bah c'est pas que ça, de ligne à ligne, tu vas à l'encontre du système de ligne de la mémoire cache, et tu t'as moins chances de faire un cache hit dans le TLB...


Message édité par bjone le 12-02-2004 à 01:07:45
n°639837
Tomate
Posté le 12-02-2004 à 01:13:05  profilanswer
 

bjone a écrit :

bah c'est pas que ça, de ligne à ligne, tu vas à l'encontre du système de ligne de la mémoire cache, et tu t'as moins chances de faire un cache hit dans le TLB...

oui, le fait de passer de ligne en ligne pour chaque colonne c est n est pas le mecanisme "normal" :D


---------------
:: Light is Right ::

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [c] Optimisation O3 de gcc

 

Sujets relatifs
optimisation d'une requete sql![VB .NET] Optimisation de grosses boucles...
optimisation a la compilation[PostgreSQL] problème d'optimisation insertion
Optimisation de gestion de fichierOptimisation d'un remplissage de select! (PHP)
[SQL] Optimisation d'une requeteOptimisation Oracle 9i
optimisation de requeteOptimisation MySQL?
Plus de sujets relatifs à : [c] Optimisation O3 de gcc


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR