|
Bas de page | |
---|---|
Auteur | Sujet : Adressage de matrice, performances |
Publicité | Posté le 13-07-2009 à 11:08:36 |
jagstang Pa Capona ಠ_ಠ | tu as raté quelque chose en effet, car c'est strictement la même chose. Ton patron voulais sans doute parler de l'allocation mémoire :
--------------- What if I were smiling and running into your arms? Would you see then what I see now? |
Sebxoii I've made a huge tiny mistake. | Au niveau de l'allocation des deux tableaux, il s'agit juste d'un exemple ici. Mon patron me parlait bien de la vitesse d'adressage. Pour en revenir à la question de base, il me semble que la seule chose que fasse le compilateur lorsqu'il tombe sur des [][] est de les remplacer par l'addition correspondante par rapport à l'adresse de base du tableau/matrice, c'est ça ? Edit : En fait son argumentation tenait au fait que tab[x][y] implique une multiplication et deux additions à chaque passage de boucle (tab + (x * size + y)), alors que ptr++ n'implique d'une incrémentation. Mon autre patron argumenta qu'avec les optimisations du compilateur, cela ne devrait pas entrer en ligne de compte. Edit2 : Effectivement, en réalisant le test sans optimisation : Donc j'imagine qu'au final il est vrai que ptr++ est plus rapide que tab[][], mais qu'une fois les optimisations du compilateur activée, la différence est alors infime/nulle. Message édité par Sebxoii le 13-07-2009 à 11:48:46 |
Joel F Real men use unique_ptr | Encore des FUDs ... L'acces par pointeur lineaire est la pire des façons vu qu'elle va pas plus vite que celle en [][] et est plus chiante à utiliser. cf ces sujets : En gros, un tableau 2D ca s'alloue via un bloc contigue + 1 tableau de pointeur sur ligne. En terme de code résultant, y a pas plus de *+ qu'avec l'autre vu qu'elles sont précalculées. cf aussi : http://codepad.org/nDy8z2iG Autre chose, le "temps d'adressage" on s'en fout. C'est le respect des caches qui est important.Apres, regarde du coté du déroulage de boucle, fusion de boucle, jam & roll loop. Si ca suffit pas SSE2+ ou Altivec en fonction du Proc et oepnMP si tu as plus de 1 coeur Message cité 1 fois Message édité par Joel F le 13-07-2009 à 12:40:47 |
Elmoricq Modérateur | Pour les problèmes de performances, plutôt que de faire des tentatives hasardeuses pour tenter de débusquer le problème, je préconiserais plutôt l'utilisation d'un profiler (prof ou gprof pour les plus basiques, mais il y en a d'autres, par exemple analyzer/collect sous Sun). Ça permet de faire des statistiques sur les appels, de voir très simplement où se situent les goulots d'étranglement, et de cibler les optimisations là où elles comptent vraiment. Message cité 1 fois Message édité par Elmoricq le 13-07-2009 à 15:27:33 |
Joel F Real men use unique_ptr | PAPI aussi |
Sebxoii I've made a huge tiny mistake. | Merci pour les infos.
Merci pour vos conseils en tout cas. edit :
edit2 : Bon, évidemment, c'pas bon pour le cache. Message cité 1 fois Message édité par Sebxoii le 13-07-2009 à 16:12:58 |
Joel F Real men use unique_ptr |
|
Sebxoii I've made a huge tiny mistake. | J'aurais ptet du regarder plus attentivement le relevé des "cache miss" de Valgrind. Je jetterai un oeil demain matin. N'ayant aucune idée des ordres de grandeur, à partir de combien de % de cache miss peut-on considérer qu'il y a un problème à ce niveau ? Message édité par Sebxoii le 13-07-2009 à 18:24:56 |
Joel F Real men use unique_ptr | ca depend. En gros, vire les cache misses des grosses boucles le reste tu t'en tapes mais cachegrind te file tout. Ensuite rebench et affine.
|
Publicité | Posté le 13-07-2009 à 18:31:55 |
Sebxoii I've made a huge tiny mistake. | J'ai été occupé hier, donc j'ai reporté Valgrind à ce matin, résultats :
Merci pour les conseils en tout cas, au moins je n'aurais pas de regrets en me disant que j'aurais pu remplacer mes [][] par des pointeurs ou supprimer les cache misses. Message édité par Sebxoii le 15-07-2009 à 10:10:34 |
Joel F Real men use unique_ptr | Ca me parait pas mal.
|
Sebxoii I've made a huge tiny mistake. | Toute l'appli.
|
Taz bisounours-codeur | Sinon vu que ta matrice elle est static, tu supprimes ta boucle de mise à 0 et c'est encore plus rapide :tirelangue |
Sebxoii I've made a huge tiny mistake. | J'ai quand même du bol que sur 40.000 lignes de code, je n'ai que des boucles de mise à zéro. |
Sujets relatifs | |
---|---|
produit des matrice en vba | php/mysql : performances sur une même machine |
[PHP] Matrice php | [C] Matrice de structures : probleme de remplissage |
Afficher les lignes d'une matrice | SQL Server Reporting Services - Utilisation d'une table matrice |
Réalisation de la somme parallèle des éléments d’une matrice: openmp | [Web] Outil d'analyse de performances d'un site |
Affichage d'une matrice | matrice carré dynamique? (résolu) |
Plus de sujets relatifs à : Adressage de matrice, performances |