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

  FORUM HardWare.fr
  Programmation
  C

  OPTIMISATION D'ALGO POUR LE TEMPS DE CALCUL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

OPTIMISATION D'ALGO POUR LE TEMPS DE CALCUL

n°896674
GROFRED
Posté le 12-11-2004 à 11:27:57  profilanswer
 

Bonjour,
 
Je cherche à écrire un programme de simulation numérique orientée scientifique. Le temps de calcul est en règle générale assez long. Etant donné que je connais un peu le C j'ai décidé de l'écrire en utilisant ce langage. Ceci dit j'ai quelques questions:
 
1- Le Fortran est-il plus rapide pour un même algorithme?
 
2- Doit-on privilégier des #define ou des const pour déclarer les constantes? Je suppose que l'utilisation des define ne monopolise pas la mémoire et les const oui...?
 
3- Pour gagner en temps doit-on travailler en float ou en double? Logiquement float mais il semblerait que ce n'est pas toujours vrai...
 
4- En terme de rapidité, est-il plus intéressant de modulariser le programme avec des fonctions internes ou externes ou de faire les calculs directement (ex au lieu de calculer Y=carre(X); on écrit directement Y=X*X;)
 
5- De même X*X est-il plus rapide que pow(X,2)?
 
Merci
 
Je suis vivement intéressé par toutes les remarques relatives au sujet de l'optimisation en rapidité d'exécution  

mood
Publicité
Posté le 12-11-2004 à 11:27:57  profilanswer
 

n°896701
chrisbk
-
Posté le 12-11-2004 à 11:44:13  profilanswer
 

Houlala. Que de fausses questions.
Bon en premier lieu, avant de mettre les mains dans le camboui il faut se poser la question : mon algo est il performant ? Si on pense qu'il est a bloc, que l'algo en lui meme est imbatable, alors on descent au niveau en dessous, pas avant.
 
2/ #define, const, ca reviendra au meme pour le compilo
3/ tu gagneras un peu en passant de double a float, car les deplacements mémoire seront plus petits. Déplacement et pas calcul, car la FPU travaille en interne sur 80bits
4/ Tu peux faire des fonctions inline pour ce genre de sport. Privilige quand meme la lisibilité sur les performances, on a tot fait de s'en mordre les doigts sinon
5/oui, il sera plus rapide. pow(), c'est tres general, comme fonction
 
 
l'optimisation ca se passe comme ca:
 
1/on fait un profil du programme  
2/on etudie ce profil : ou est ce que je perds le plus de temps
3/on optimise la partie reponsable de la lenteur
4/on retourne a 1
 
on attaque pas au bol et au pif. Ne pas se battre et faire un truc horrible pour virer deux appels de fonction, mais deja virer les grosses lacunes.
 


---------------
NP: HTTP Error 764 Stupid coder found
n°896759
GROFRED
Posté le 12-11-2004 à 12:44:40  profilanswer
 

Je suis d'accord avec toi sur qualité de l'algo et le profiling du prog. Je voulais juste quelques informations théoriques de principe sur l'optimisation d'un algo de calcul scientifique, merci pour ta contribution!

n°896765
Joel F
Real men use unique_ptr
Posté le 12-11-2004 à 12:50:23  profilanswer
 

ca depend de beaucoup de chose, profile d'abord on en reparleras + tard
 
"Premature optimisation is the root of all evil" Knuth.


Message édité par Joel F le 12-11-2004 à 12:50:52
n°897323
matafan
Posté le 13-11-2004 à 00:02:16  profilanswer
 

1 - Non, et il n'est pas plus lent non plus.
 
2 - C'est comme tu préfere. #define et const donneront le même binaire.
 
3 - Je pensais au contraire que double était en général plus rapide, car il correspond au type manipulé par ton CPU. Mais en fait je n'en sait rien.
 
4 - Du plus rapide au plus lent : 1) Faire le calcul sur place sans appel de fonction 2) Appeler une fonction dans le même binaire 3) Appeler une fonction dans un autre objet (librairie). Il y a une "grosse" différence entre 1) et 2), et une "petite" différence entre 2) et 3).
 
5 - Oui, d'une part à cause de 4), et d'autre part parce que pow() est une fonction générique qui est capable de faire autre chose qu'élever au carré. On ne peux pas faire plus rapide que "X*X".
 
Sinon comme l'a dit chrisbk, ce ne sont pas forcément de bonnes questions. Utilises un profiler.

n°897396
Sve@r
Posté le 13-11-2004 à 11:40:48  profilanswer
 

chrisbk a écrit :


4/ Tu peux faire des fonctions inline pour ce genre de sport.


Ca c'est du C++. GROFRED veut faire du C donc pas question de "inline".
 

chrisbk a écrit :


2/ #define, const, ca reviendra au meme pour le compilo


Tu es certain ? Le #define est remplacé par le préprocesseur donc le compilo voit une valeur numérique. Alors que le "const" reste qd même une variable non ? Je sais pas trop ce qu'il en ressort..


Message édité par Sve@r le 13-11-2004 à 11:45:13
n°897398
chrisbk
-
Posté le 13-11-2004 à 11:42:29  profilanswer
 

Sve@r a écrit :

Ca c'est du C++. GROFRED veut faire du C donc pas question de "inline".


 
je fais du C au taf et j'ai du inline de ci de la...

n°897399
Sve@r
Posté le 13-11-2004 à 11:47:43  profilanswer
 

chrisbk a écrit :

je fais du C au taf et j'ai du inline de ci de la...


Tu compiles ton C avec "gcc" ou "g++" ? Parce que un programme écrit en C mais compilé avec "g++" est analysé comme du C++. Et s'il contient du "inline" il n'y aura aucun pb mais restera considéré comme C++...

n°897402
chrisbk
-
Posté le 13-11-2004 à 11:51:48  profilanswer
 

Bonne question mon cher Jean-Louis, en fait je fais make et j'ai aucune idée de quel brol se lance derriere. Cela dit j'ai bien droit a toutes les merdes du C comme l'obligation de decl les vars en debut de bloc

n°897403
chrisbk
-
Posté le 13-11-2004 à 11:52:12  profilanswer
 

et y'a pas du inline en c99 ?

mood
Publicité
Posté le 13-11-2004 à 11:52:12  profilanswer
 

n°897405
Evadream -​jbd-
Posté le 13-11-2004 à 11:52:58  profilanswer
 

Sve@r a écrit :

Tu compiles ton C avec "gcc" ou "g++" ? Parce que un programme écrit en C mais compilé avec "g++" est analysé comme du C++. Et s'il contient du "inline" il n'y aura aucun pb mais restera considéré comme C++...


 
http://www.greenend.org.uk/rjk/2003/03/inline.html

n°897425
Sve@r
Posté le 13-11-2004 à 12:22:41  profilanswer
 


 
Hum... je viens d'apprendre qq chose.
Il y a un truc dont j'ai horreur en informatique, c'est que les choses changent très vite. Un jour tu apprends le C; puis plus tard tu apprends le C++ et on te dit "en c++ c'est super on peut faire du inline etc..." puis un beau matin tu te réveille et on te dit "pov atardé, le inline existe aussi en C"...
 
Merci à "chrisbk" et à "Evadream -jbd" de m'avoir montré à quel point je retardais...  :D


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°897986
printf
Baston !
Posté le 14-11-2004 à 10:33:32  profilanswer
 

Le C99 ça date... de 99 :D
 
Il y a un article sympa sur Kuro5hin si tu veux voir les changements apportés :jap:


Message édité par printf le 14-11-2004 à 10:34:52

---------------
Un matin je me lèverai et il fera beau.
n°898029
nithril
Posté le 14-11-2004 à 12:11:37  profilanswer
 

chrisbk a écrit :


 
3/ tu gagneras un peu en passant de double a float, car les deplacements mémoire seront plus petits. Déplacement et pas calcul, car la FPU travaille en interne sur 80bits
 


 
il me semblait pourtant que la precision de certaines instructions pouvaient etre parametré suivant le type utilisé


---------------
http://www.janaga.com
n°898102
Terminapor
I'll see you rise.
Posté le 14-11-2004 à 14:28:31  profilanswer
 

Les titre en CAP ca le fais pas ....:/

n°898106
chrisbk
-
Posté le 14-11-2004 à 14:31:44  profilanswer
 

nithril a écrit :

il me semblait pourtant que la precision de certaines instructions pouvaient etre parametré suivant le type utilisé


 
bin tu peux switcher la précision de la fpu (remember l'init de dx7), mais c'est bien tout, si je dis pas trop de conneries

n°898939
GROFRED
Posté le 15-11-2004 à 13:54:08  profilanswer
 

Merci pour toutes ces informations. Comme on me l'a conseillé, je vais privilégier la lisibilité et la modularité. Pour le temps de calcul je verrais après avec un profiler.


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

  OPTIMISATION D'ALGO POUR LE TEMPS DE CALCUL

 

Sujets relatifs
[Algo] Tri d'un championnat de footprobleme avec calcul exponentiel
Optimisation - synthèse sonore temps réelMonitoring temps réel sur site web
[Topic officiel] Scilab logiciel de calcul puissant et FREE!!![php] optimisation
Débuter avec les dates et le temps [Tuto][MySQL] Optimisation requete sur ENORME table ...
Ptite question de calcul... 
Plus de sujets relatifs à : OPTIMISATION D'ALGO POUR LE TEMPS DE CALCUL


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