|
Bas de page | |
---|---|
Auteur | Sujet : optimisation de boucles |
![]() Publicité | Posté le 09-01-2008 à 11:34:04 ![]() ![]() |
Joel F Real men use unique_ptr | deja : - utiliser une bonne méthode pr stocker tes données : stockage NRC : http://forum.hardware.fr/hfr/Progr [...] m#t1654178 En gros, faut essayer d'implanter cette somme de manière la plus "mrmory firendly" en evitant de merder partout. Message cité 1 fois Message édité par Joel F le 09-01-2008 à 11:55:25 |
cassiopee75 | merci à vous deux de m'avoir répondu aussi rapidement |
cassiopee75 | oui, effectivement, j'en suis aussi arrivée à cette conclusion en remaniant mes sommes, d'ailleurs j'ai encore gagné un facteur 2 en sortant ∑j(F[i][j]) de la somme sur k. Mais je suis d'accord avec toi, c'est encore beaucoup trop long! Mais comme je l'ai dit à Joel, je vais suivre ses idées, on verra si j'y arrive
|
BifaceMcLeOD The HighGlandeur | As-tu beaucoup de zéros dans tes valeurs ? Si c'est le cas, tu peux gagner énormément de temps en évitant beaucoup de calculs. Car, comme tu le sais sans doute : zéro fois tout-ce-que-tu-veux égale toujours zéro. Et si le zéro doit multiplié au résultat du calcul d'une grosse boucle... c'est toute la grosse boucle qui peut être court-circuitée ! Autre piste d'optimisation : la parallélisation du calcul. Ce genre de calcul est très facile à paralléliser massivement, et si ta machine dispose de plusieurs (voire de nombreux) processeurs, tu gagneras un facteur substantiel en exploitant l'ensemble des ressources processeur de ta machine au lieu de n'utiliser qu'un seul processeur (voire une partie d'un seul processeur). Message édité par BifaceMcLeOD le 16-01-2008 à 16:24:30 |
Joel F Real men use unique_ptr | avant de passer en multi thread, optimisez le monothread me parait bien |
Jux_ | Question bete. Les compilo actuels ont-ils vraiment besoin qu'on leur déroule les boulces a la main? |
Joel F Real men use unique_ptr | si les bornes ne sont pas des constantes et qu'il y des strcutures de controels dedans : Oui Message édité par Joel F le 16-01-2008 à 17:13:09 |
![]() Publicité | Posté le 16-01-2008 à 17:12:52 ![]() ![]() |
BifaceMcLeOD The HighGlandeur | Joel F> Ca dépend lesquels, et ça dépend des langages. En C/C++, c'est le cas, mais uniquement parce qu'on travaille assez près de la machine. Dans d'autres langages ou d'autres environnement d'exécution, on ne s'amuse pas à cela, et on laisse faire le compilateur à l'exécution s'occuper de ça (les machines virtuelles Java et OCaml sont réputées précisément pour cela) |
Joel F Real men use unique_ptr | ouasi mais perso, je fait pas de HIGH PERFORMANCES computign en JAVA :[, ca me parait assez antinomique |
BifaceMcLeOD The HighGlandeur | Détrompe-toi, ça ne l'est plus du tout depuis 2 ou 3 ans. Pour ma part, j'observe de plus en plus souvent des programmes Java qui tournent plus vite que leurs équivalents C++... |
Elmoricq Modérateur | Hmm. Même si je trouve aussi que ça s'est amélioré dernièrement, j'ai du mal à croire qu'à qualité de code égale, un programme Java soit plus performant que le même en C++. |
Joel F Real men use unique_ptr |
|
BifaceMcLeOD The HighGlandeur | Au temps pour moi, Joel F : à ma connaissance, Java n'est pas utilisé en calcul très intensif dans le monde des superordinateurs massivement parallèles. Dans ce secteur-là (comme dans d'autres), l'inertie des habitudes et des préjugés est encore lourde, et on utilise surtout C (voire FORTRAN !) pour programmer. J'insiste au passage sur le fait que ce sont surtout les habitudes (et les a priori) qui font que l'on utilise toujours ces langages. Alors même que leur puissance de modélisation est pitoyable, et que leur supériorité de performance n'est pas vraiment démontrée (en tout cas, sur des machines dites "classiques", c'est le contraire qui l'est).
|
Joel F Real men use unique_ptr | on parle bien de JAVA, ce langage qui s'exécute en s'INTERPRETANT dans une MACHINE VIRTUELLE |
nargy |
Joel F Real men use unique_ptr |
|
nargy | je parle pas pour toi joel, mais pour BifaceMcLeOD qui compare Java et C, alors qu'il est évident qu'il n'y connait apparemment pas grand chose: il avoue lui même n'être pas capable de modéliser un programme en C. |
Joel F Real men use unique_ptr |
|
BifaceMcLeOD The HighGlandeur | Apparemment, c'est toi qui ne connais pas grand chose à Java et aux langages autres que C et FORTRAN. En tout cas, tu sembles être la parfaite illustration de ce que j'avançais concernant les habitudes et les a priori sur les différents langages de programmation et environnements d'exécution.
|
Joel F Real men use unique_ptr |
Message édité par Joel F le 05-02-2008 à 21:36:12 |
Joel F Real men use unique_ptr | Et comme j'aime pas passer pour un frustré borné :
|
nargy | La lecture et l'étude de l'algorithme de GC montre que, plus la condition de déclenchement du ramasse miette est complexe, plus l'allocation mémoire est lente. Sans cette condition, l'algo GC devient l'algo d'allocation dynamique. Ensuite toute politique d'allocation (pools, pointeurs comptés, v-listes, ...) peut aussi bien être appliquée aux deux méthodes.
|
MEI |DarthPingoo(tm)| |
--------------- | AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps | |
Joel F Real men use unique_ptr |
|
matafan | J'ai réfléchi vite fait donc il y a peut-être un truc qui m'échappe, mais tu as plein de trucs indépendants dans ta somme. En factorisant, au final, il faut calculer (Si veut dire somme sur i) :
|
BifaceMcLeOD The HighGlandeur |
|
Evadream -jbd- |
Message édité par Evadream -jbd- le 09-02-2008 à 00:53:21 |
Joel F Real men use unique_ptr | @Eva: je te cherche ça. De toute manière, l'avantage du NRC reste dans la facilité à écrire les accès (pense au tableau à N>2) et dans le fait que le code ainsi écrit est trivialement vectorisable à la main et - avec certains compilos auto-vectorisant - plus facile à autovectoriser par le compilateur que le même code écris en notation i+h*j. En terme d eperf, on est équivalent, et des fois (des fois = taille+probleme+compilo), on est meilleur. Sous gcc, tu n'auras guère de gain en 2D. Autre avantage, tu peut gérer trivialement des tableaux avec des index de départ quelconque, les remapper avec un coup nul et écrire des fonctions qui traite des sous tableaux de manière triviale. En gros, le gain est dans la facilité d'écriture, la facilité de vectorisation et le fait que tu puisse écrire plus simplement pas mal de truc casse pied. C'était pas dans la discu original, mais par exemple tu peut ajouter un support pr du padding, du stride voire des tableaux non-dense en gardant une interface d'accès unique. Quand je rentre, je t'envoie mon truc de tests. Addedum : Addendum 2 : Il se peut aussi que j'ai louper un wagon sur les dernières versions des compilos et que c'est derniers génèrent proprement des accès directs et non indirects avec les deux méthodes. L'avantage restant est alors d'ordre pratique. Message édité par Joel F le 09-02-2008 à 11:25:27 |
Evadream -jbd- | Un grand merci pour ta réponse. Je n'avais pas du tout pensé à l'aspect "pratique" des choses pour l'utilisateur et le compilateur, surtout avec des dimensions supérieurs à 2. |
Joel F Real men use unique_ptr |
|
Joel F Real men use unique_ptr |
|
matafan | Dites donc vous en pensez quoi de mon post ? Parce que c'est bien beau de s'étripper sur des questions d'optimisation de compilation, de parallélisation et de stockage de données, mais s'il n'y a effectivement que 2 millons d'opérations on s'en fout un peu. |
Joel F Real men use unique_ptr | j'ai vu :E mais bon je peut pas répondre à la place du PO Message édité par Joel F le 09-02-2008 à 12:50:45 |
Evadream -jbd- |
rufo Pas me confondre avec Lycos! | Un site de benchs intéressant : http://shootout.alioth.debian.org/ [...] lang2=java --------------- Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta |
![]() Publicité | Posté le ![]() ![]() |
Sujets relatifs | |
---|---|
Boucles et performances [ résolu ] | optimisation du code, tester valeur avant attribution ? |
Tracage itinéraire - Optimisation performances | [MDX] Optimisation de requetes sur cubes / AnalysisServices2005 |
besion aide optimisation php mysql | [SQL] Optimisation d'une réquète récursive |
Boucles imbriquées en XSL | Optimisation de mes boucles |
[Java] optimisation boucles for | [VB .NET] Optimisation de grosses boucles... |
Plus de sujets relatifs à : optimisation de boucles |