logo

Knowledge Is Power

 
 

- Reinit des nouveaux posts -

- Recherche -

Messages Privés - Derniers posts
S'enregistrer - Login - Liste des membres
Vous logger : Login Pass

Programmation - Langages de Programmation >> Augmenter vitesse d'execution Newtopic | Reply
poster txt
gogo
Inscrit le 25-01-2004
Avatar
Posté le 23-12-2004 11:50

Bonjour,

J'ai lu le topic intitié par Kes (https://www.newffr.com/viewtopic.php?topic=5611&forum=13) mais ça a vite dérivé et finalement, il n'y a pas eu de véritable réponse à la question de départ : Comment augmenter la vitesse d'exécution d'un programme ?

Personnellement, je "m'amuse" avec des nombres premiers de très grande taille. Le temps d'exécution de mon programme est très long. Pour aboutir, il faut souvent de 2 à 4 semaines. J'ai optimisé l'algo à fond! (avec l'aide du concepteur de la librairie que j'utilise : NTL. voir www.shoup.net/ntl/)

Je cherche donc à "recenser" les différents moyens qui pourraient me permettre de grapiller un peu de temps. Hélas, je n'y connais presque rien en hardware...
Je fais appel à vous : quelles sont les solutions pratiques pour augmenter la vitesse d'exécution d'un programme ?

J'ai pensé à la mémoire RAM... est-ce utile?
J'ai aussi pensé au cache... est-ce que ça peut faire qqchose?
Je sais qu'il faut aussi combiner au mieux le couple Carte Mère (CM) - Processeur. Ainsi un gros processeur P4 équipé d'une CM à 133 MHz n'aura que de maigres performances... mais un proc à 1 GHz doublé d'une CM à 800 MHz pourra donner toute sa puissance.
(Corrigez-moi si je me trompe.)
Il existe aussi l'overcloking. (Mais bon, ça génère des erreurs et c'est pas souhaitable dans le cas de "calculs purs"...)

Merci pour vos idées!
profil | Website | edit | quote
o.O
Inscrit le 10-07-2004
Avatar
Posté le 23-12-2004 16:18

Ca dépend beaucoup de ton programme. Par exemple si tu veux un jeu 3D qui tourne rapidement c'est inutile de te dire qu'il te faut une bonne carte graphique.

Enfin vu que tu as l'air de travailler sur des nombres je pense qu'il faut surtout que tes algos soient bons.

Par exemple si tu calcules la somme de 1 à n en faisant :
Code:

for(somme=i=0;i<=n;i++) somme+=i;


au lieu de faire directement :
Code:

somme=n*(n-1)/2;



Et puis il faut optimiser ce qui te coute le plus en temps mais comme je suppose que la librairie NTL doit déjà être optimisée, c'est vraiment l'algo que tu vas bosser.
Et bah après tu as plus qu'à tourner sur une machine plus puissante et/ou plus de machines
profil | mail | Website | edit | quote
gogo
Inscrit le 25-01-2004
Avatar
Posté le 23-12-2004 16:23

Oui je fais du calcul pur (avec affichage ms-dos) donc pas besoin de carte graphique.

Merci, mais j'ai déjà optimisé à fond l'algo.

Je cherche d'autres solutions, d'autres moyens pour gagner de la vitesse. Mais je ne connais rien aux histoires de cache, de RAM, etc, donc je fais appel aux membres de ce forum pour me conseiller, m'aider.
profil | Website | edit | quote
o.O
Inscrit le 10-07-2004
Avatar
Posté le 23-12-2004 16:29

Je me corrige:
Code:

somme=n*(n+1)/2;



bah après tu as des conseils genre :
- Utiliser le moins possible le disque dur
- Utiliser le moins possible la mémoire
- Eviter de recalculer 2 fois la même chose
profil | mail | Website | edit | quote
gogo
Inscrit le 25-01-2004
Avatar
Posté le 23-12-2004 17:39

c'est sympa d'essayer mais ça ne m'aide pas bcp là...

est-ce que rajouter de la RAM peut être utile?
si oui, ça coute cher? ça s'installe comment dans l'ordi?
profil | Website | edit | quote
casskroot
Inscrit le 01-11-2003
Posté le 23-12-2004 18:08

Ce que tu peux faire ausi c'est essayer d'optimiser en assembleur (bon je reconnais que sur les grands nombres, ca doit etre tres tres dur). Faire des calculs en utilisant uniquement les registres du µp et pas la RAM est bcp plus rapide (mais comme je viens de le dire, faire des calculs sur des grands nombres uniquement avec les registres c'est pas trop possible).

Sinon, tu peux aussi optimiser à la compilation. J'avais déjà demandé de l'aide là dessus: http://newffr.com/viewtopic.php?forum=8&topic=8685 (je sais pas si t'apprendras bcp plus dechoses que dans le topic de kes mais c'est toujours bon à prendre ).


A plus.
_________________________

profil | mail | edit | quote
gogo
Inscrit le 25-01-2004
Avatar
Posté le 23-12-2004 18:36

en effet, convertir certains passages de code en ASM est une bonne idée, mais faire tenir un nombre de 2 Mo dans les registres de la machine, c'est impossible.
j'ai lu ton topic casskroot...

Personne a d'autres idées?
On peut améliorer les perfs de la CM ?
Et y a pas un moyen d'optimiser la mémoire vive en reconfigurant un peu le BIOS ?
profil | Website | edit | quote
testxyz07
Inscrit le 04-10-2002
Posté le 24-12-2004 07:49

(Aah,je savais bien que j'avais vu ça qqpart... )
http://www.hardware.fr/html/articles/lire.php3?article=219 et
http://www.hardware.fr/articles/231/page1.html

Lis tout de préférence (optimiser,c'est avant tout connaitre son matériel sur le bout des doigts ,et plus particulièrement les paramètres de CAS et RAS.

(ooh,il neige! )
profil | edit | quote
gogo
Inscrit le 25-01-2004
Avatar
Posté le 24-12-2004 09:24

merci textxyz07! ces "tutos" sont très bien faits...

(le topic n'est pas closed pour autant... )
profil | Website | edit | quote
siplex
Inscrit le 03-07-2003
Posté le 24-12-2004 12:29

gogo: Je pense que ton code a du atteindre un certains niveau de maturité et à partir de maintenant tu vas faire des effors très grands qui ne seront presque pas visibles en terme en vitesse d'éxécution.
Mon avis:

-l'asm: bof-bof à moins que la lib de bignum que tu utilises soient mal codée ou mal utilisée peu de chance de l'améliorer.
En plus faut avoir un bon niveau en asm pour pouvoir faire des modifs de ce genre.

- idée de o.O : Utiliser le moins possible le disque dur
et Utiliser le moins possible la mémoire . Dans le principe je suis d'accord , mais bon le compilo fait déjà tous le max pour utiliser des registres, alors c'est dur de mieux faire. Après minimiser les accès disque, ca peut être intéressant mais bon je pense pas non plus que le prog en arrive à swapper(tu confirmes gogo?).

-idéé hardware: bonne idéé car c'est totalement indépendant du compilo et tout. Mettre plus de ram ca sert à rien, parce que ton prog doit pas swapper, mais de la ram plus rapide ca va accélérer.Un proc plus rapide aussi et puis tous les trucs de base de l'overclocking.
Par conrte attention à cette idée pour le coté porte-monaie.

On peut améliorer les perfs de la CM ?
Oui on peut bidouiller la partie alim de la CM, en soudant des résistances ou des potentio, pour envoyer plus de jus au proc.
Et y a pas un moyen d'optimiser la mémoire vive en reconfigurant un peu le BIOS ?
A moins que ta mémoire soient underclockée, documentes-toi avant de le faire car c'est pas sans risque. Certaines RAM tiennent mieux que d'autres...
profil | Website | edit | quote
gogo
Inscrit le 25-01-2004
Avatar
Posté le 24-12-2004 16:07

alors... je réponds point par point à Siplex :
1º) je suis nul en asm
2º) je confirme : le prog ne swappe pas le DD
3º) mettre plus de ram ne change rien?? et pour changer de ram (et en mettre une plus rapide), comment on fait??
4º) pour améliorer les perfs de la CM ça me paraît trop risqué...
profil | Website | edit | quote
siplex
Inscrit le 03-07-2003
Posté le 24-12-2004 18:19

3º) mettre plus de ram ne change rien??
ben comment dire. Par exemple si ton prog utilise entre 1 et 10 Mo de ram(ou du moins une taille pas très grosse pourvu que ça swappe pas) durant son exécution, tu comprends bien que si tu rajoutes de la ram ca fera la même chose. Le prog ne va pas consommer plus de mémoire.
et pour changer de ram (et en mettre une plus rapide), comment on fait??
Ben il faut acheter une autre ou des autres barettes ,qui te permette de tenir des fréquences plus élévées. Vu que la ram c'est souvent le facteur limitatif dans l'overclocking.
Dans ce domaine, je suis pas trop un spécialiste. Ma machine perso est même pas overclockée c'est dire.
profil | Website | edit | quote
traXer
Inscrit le 29-11-2004
Posté le 13-01-2005 21:10

Je pense que Gogo veut dire comment on fait au niveau physique pour changer les barettes ?
Si c'est ca, ca se passe dans le boitier il faut ouvrir et normalemen tu va voir des especes de rectangles avec des puces dessus. Donc soit tu les remplacent (ya des ptis crans de chaque cotés pour les faire sortir) soit t'en rajoute.
Mais je te dis ca vite fait, documente toi plus de ce cotés si tu veux le faire.
Sinon chose trés importante prend toujour 2 barettes de meme fréquence et de meme taille mémoire pour que tu puisse profiter de la technologie dual-DDR (NDLR: Synchronisation des barettes et donc gain de temps de traitement enorme).

Voila j'espere que je me suis pa tromper sur le type de réponse que tu cherchais !

[ Ce Message a été édité par: traXer le 2005-01-13 21:11 ]
profil | Website | edit | quote
siplex
Inscrit le 03-07-2003
Posté le 13-01-2005 23:42

Sinon chose trés importante prend toujour 2 barettes de meme fréquence et de meme taille mémoire pour que tu puisse profiter de la technologie dual-DDR:
=>Ouais je suis moyennement d'accord le DualChannel a été un argument marketing pour les cartes mères mais les gains de perfs sont pas vraiment énormes(surtout vu le prix). En plus la majorité des cartes-mères ont trois slots de ram donc si t'as trois barrêtes de ram tu profites du dual channel seuelement pour deux barrêtes . J'ai toujours trouvé ca un peu con.
profil | Website | edit | quote
tweakie
Inscrit le 01-02-2002
Posté le 14-01-2005 01:02

Si ton programme s'y prete (ce qui est somme toute tres peu probable), tu recodes les routines critiques en Cg et tu fais faire certains calculs par le processeur graphique. Ca ne marche que pour des calculs bien particuliers (exemple transformee de fourier, calcul de diagramme de Voronoi, etc.). Cela dit, il y a un gros risque que le gain de temps du a l'utilisation du GPU soit en grande partie compense' par la perte de temps due aux transferts de donnees depuis la RAM vers la memoire de la carte graphique, a ce que j'ai lu. Par contre, recoder une lib bignum pour le proc. graphique, avec la place limitee dont tu disposes, c'est pas vraiment la peine d'y penser...

C'est juste une (mauvaise) idee comme ca en passant.

Pour les systemes de gestion de cache, c'est souvent pour optimiser la lecture de gros blocs de donnees sur le disque que c'est fait. Ou pour des operatons de parcours (on se debrouille pour que deux valeurs traitees successivement se retrouvent proches l'une de l'autre en memoire, voir par exemple l'utilisation de courbes de Hilbert pour parcourir les cartes dans les SIG). Si les operations d'i/o qui mettent le disque en jeu sont peu importantes, ca risque de ne servir a rien. Augmenter la memoire ne servirait que si ton programme swappait.

Ah, si, quelque chose qui peut faire la difference : recompiles tes libs sur la machine que tu comptes utiliser en specifiant que tu veux optimiser la vitesse d'execution. Si tu as un pentium 4, par exemple, ca devrait pouvoir utiliser des instructions specifiques a cette plateforme. Bien sur je suppose (mais je le dis quand meme etant donne' que j'ai deja vu la connerie) que tu n'utilises pas une version avec les symboles de debug (ca, ca ralentit *vraiment* le bouzin)...

Sinon, en C++, faut faire vachement gaffe a la maniere dont on code : on a trop vite fait d'utiliser un copy constructor sans s'en rendre compte. Verifie aussi que tu n'as pas de fonctions virtuelles qui traines ici ou la et le cas echeant utilise plutot des templates (le temps de compil, on s'en cogne).

Finalement, mon dernier conseil est d'utiliser un outil de profiling (je crois que VC++ 7 en contient un, sinon il y a l'ex-truetime de numega/compuware) pour identifier ce qui prend le plus de temps. Souvent on ne realise pas combien des operations d'allocations/liberations memoire mal gerees peuvent pourrir la vitesse d'execution. Si c'est de la que vient le probleme, tu pourras envisager de gerer toi meme ces operations (cherches "garbage collector" dans google).

Peut-etre la maniere dont tu integres ta librairie (je suppose que c'est une dll separee) joue-t'elle aussi un role ? Je ne sais pas trop...
profil | Website | edit | quote
KarLKoX
Inscrit le 05-01-2002
Posté le 17-02-2005 12:44

Tu peux utiliser conjointement le bus AGP + la technique du prefetch (utilisation des registres comme cache, en gros).
Le lecteur unix MPlayer utilise cette technique ( cf "libvo/aclib_template.c" ).
profil | mail | Website | AIM | Yahoo | MSN | edit | quote
TboWan
Inscrit le 05-10-2004
Posté le 17-02-2005 22:10

Vu que tu fais dans les nombres...
https://www.newffr.com/viewtopic.php?&forum=23&topic=9198


Sinon, pour augmenter la vitesse du programme, et vu que les algos sont déjà optimisés (ou que tu veux pas mettre les mains dans le cambui), attend 6 mois et les machines (même à Auchan) iront 2x plus vite.

Pourquoi faire simple quand on peut faire compliqué?
profil | mail | Website | edit | quote
Place-Monge
Inscrit le 03-01-2017
Posté le 15-02-2017 18:19

A la Question: Comment augmenter la vitesse d'exécution d'un programme?


Je répondrais comme ce suis:


Avant de répondre à cette question il faudrait savoir :

- En quel langage le programme a été coder


Etudier:


- Le code source du programme


En général et cela applicable à tous les langages de programmation:

- Il faudrait que le programme soit coder avec une chronologie correct

- Essayer de connaître son POIDS, ainsi que sa force.

- Il faudrait que le programme soit coder sans erreurs au niveau du Code afin de pouvoir le Compiler puis Ensuite l'Exécuter ( Vue par moi même avec L'IDE DEV C++)

- Il faudrait qu'il y'est une volonté d'appliquer Les Fonctions ainsi que leur actions au niveau de la programmation.




Mes salutations whitehats à toute la communauté d'informaticiens.....



TUNISIEN....
profil | edit | quote
Newtopic | Reply

Online : akivuyuweva, aluzequremegp, edutaudidu, epetopasup, evegifuz, iakakeageo, Jeffreyutesk, JeremyRak, MarcusNig, pifidukav, Robertwak, upukukoocmawa et 57 Guests


Retour Index NewFFR Repository : http://taz.newffr.com
Cagades à Stick : http://alcane.newffr.com
Forum HTML et Archive -> ici
ForumFR Sql/Xml (2006/04) (SF pas à jour du tout...) - Alive since 2001 Newffr.com
Pour toute plainte ou problème -> Contacter Borax, Hyatus, Tweakie ou Stick par message privé (ou Gueulez sur le forum :) )
Retour haut de page