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

 


 Mot :   Pseudo :  
 
 Page :   1  2  3
Page Suivante
Auteur Sujet :

Calcul sur une matrice, optimisation ?

n°872664
Joel F
Real men use unique_ptr
Posté le 13-10-2004 à 20:19:38  profilanswer
 

Reprise du message précédent :

Taz a écrit :


ça c'est franchement génial, sauf que c'est exactement un cas où l'abstraction fuit ... n'est-ce pas Joel (On Software :o)


 
???

mood
Publicité
Posté le 13-10-2004 à 20:19:38  profilanswer
 

n°872667
Lam's
Profil: bas.
Posté le 13-10-2004 à 20:21:48  profilanswer
 

skeye a écrit :

Dev-cpp jesaispluquelleversion, sur un pentium 4.
Compilé avec les flags -O2 -march...


Je me demande si, justement, le P4 n'est pas capable de transformer ton code dynamiquement pour qu'il s'exécute sans trop de heurts sur ses moults pipelines (avec les registres virtuels, patati patata).
 
Pis de toutes façons, pour ce genre de besoins, il vaut mieux payer un stagiaire 6 sous pour qu'il te fasse du code MMX/SSE/etc que de se casser la tête. :)
 

n°872674
Joel F
Real men use unique_ptr
Posté le 13-10-2004 à 20:24:07  profilanswer
 

MMX ca pue :o

n°872677
Lam's
Profil: bas.
Posté le 13-10-2004 à 20:24:53  profilanswer
 


http://www.joelonsoftware.com
 
C'est pas mal parfois. Et ça déchaîne toujours les passions quand un article est posté sur slashdot :)

n°872680
Taz
bisounours-codeur
Posté le 13-10-2004 à 20:26:23  profilanswer
 

Joel F a écrit :

quel vrai code ?

ton morceau de code avec ta pseudo f(), etc
 


 
http://french.joelonsoftware.com/A [...] tions.html

n°872691
skeye
Posté le 13-10-2004 à 20:35:34  profilanswer
 

Lam's a écrit :


Pis de toutes façons, pour ce genre de besoins, il vaut mieux payer un stagiaire 6 sous pour qu'il te fasse du code MMX/SSE/etc que de se casser la tête. :)


Payer un stagiaire pour du code que je développe pour moi-même... :whistle:


---------------
Can't buy what I want because it's free -
n°872842
xiluoc
un pc pour les unirs ....
Posté le 13-10-2004 à 23:33:34  profilanswer
 

et sinon mon prog il est optimise ou pas ?

n°872846
Taz
bisounours-codeur
Posté le 13-10-2004 à 23:44:57  profilanswer
 

nan, c'est pas bien d'allouer autant sur lapile

n°872849
xiluoc
un pc pour les unirs ....
Posté le 14-10-2004 à 00:02:12  profilanswer
 

Quel est la solution ?

n°872856
Taz
bisounours-codeur
Posté le 14-10-2004 à 00:21:00  profilanswer
 

malloc

mood
Publicité
Posté le 14-10-2004 à 00:21:00  profilanswer
 

n°872857
xiluoc
un pc pour les unirs ....
Posté le 14-10-2004 à 00:25:55  profilanswer
 

ajout des variables scalaire
2.86 ms j ai bien fait dessayer sur le sparc de l uni,
l amd barton perd en perf quand on passe en scallaire :/

Code :
  1. ...
  2. int v, v1, v2, v3, v4, v5, v6, v7;
  3. for (r=0; r<MAX;r++)
  4. {
  5.   for(c=0; c<MAX;c+=8)
  6.   {
  7.  
  8.  
  9.    v = x[r][c];
  10.    v1 = x[r][c+1];
  11.    v2 = x[r][c+2];
  12.    v3 = x[r][c+3];
  13.    v4 = x[r][c+4];
  14.    v5 = x[r][c+5];
  15.    v6 = x[r][c+6];
  16.    v7= x[r][c+7];
  17.  
  18.    rowsums[r]+= v + v1 + v2 + v3 + v4 + v5 + v6 + v7;
  19.    colsums[c]+= v;
  20.    colsums[c+1]+= v1;
  21.    colsums[c+2]+= v2;
  22.    colsums[c+3]+= v3;
  23.    colsums[c+4]+= v4;
  24.    colsums[c+5]+= v5;
  25.    colsums[c+6]+= v6;
  26.    colsums[c+7]+= v7;
  27. ....


je vais essayer (apres avoir apris a m en servir)le malloc

n°872860
Taz
bisounours-codeur
Posté le 14-10-2004 à 00:29:55  profilanswer
 

mais putain comment tu veux mesurer un truc qui dure 2.82 ms ... ! tu pers ton temps à optimiser quoi que ce soit !

n°872867
xiluoc
un pc pour les unirs ....
Posté le 14-10-2004 à 00:36:34  profilanswer
 

quand je lance le test ca dure pas 2.82 ms mais 3-4 s, il en lance plusieurs de plus en plus lentement pour faire une bonne aproximation 30 ,300 puis 3000 ect calculs sur matrice de 512 ect..
.


Message édité par xiluoc le 14-10-2004 à 00:41:26
n°872870
Taz
bisounours-codeur
Posté le 14-10-2004 à 00:39:33  profilanswer
 

mais c'est pas grave, dans ton programme tu fais une boucle qui fait des milliers d'itérations. mais fais le. il faut quelque chose de l'ordre de la minute

n°872878
xiluoc
un pc pour les unirs ....
Posté le 14-10-2004 à 00:53:34  profilanswer
 

Pour le malloc je dois preparer de lespace pour quoi ?
les 8 element a chaque loop ?
 

Code :
  1. if ((ip = malloc(INITIAL_ARRAY_SIZE * sizeof(int))) == NULL) {
  2.     (void)fprintf(stderr, "ERROR: Malloc failed" );
  3.     (void)exit(EXIT_FAILURE);    /* or return EXIT_FAILURE; */
  4.   }

n°872881
Taz
bisounours-codeur
Posté le 14-10-2004 à 00:58:37  profilanswer
 

non mais t'as déjà fait un malloc ? je comprends rien, mais y a un truc qui est pas clair dans tête

n°872882
xiluoc
un pc pour les unirs ....
Posté le 14-10-2004 à 00:59:53  profilanswer
 

non jamais :/

n°872884
Taz
bisounours-codeur
Posté le 14-10-2004 à 01:04:52  profilanswer
 

rhooo putain ... donc les pointeurs et tout le tralala, je suppose que c'est flou ... c'est dingue de se préoccuper d'optimisation si tôt ...
 
comprend bien que ta matrice sur la pile, elle pèse 1Mo, selon   ton environnement, son allocation peut foiré. Et ça tu n'en sauras __rien__ du tout. Ne pense même pas avoir plusieurs matrices, ça serait un massacre

n°872893
xiluoc
un pc pour les unirs ....
Posté le 14-10-2004 à 02:06:48  profilanswer
 

j ai fait du c++ et java je sais ce que c est un pointeur et jen ai deja utilise en C++ voire double pointeur pour les tableau, mais le c a part le printf je connais pas.

n°873833
el muchach​o
Comfortably Numb
Posté le 15-10-2004 à 08:02:55  profilanswer
 

Les x[i][j], c'est optimisé par le compilo ou il fait une multiplication à chaque fois ?
Parce que ça vaut p-ê le coup d'utiliser un pointeur qu'on incrémente pour traverser le tableau, ou mieux, utiliser des vector et des itérateurs (qui font ça je crois), économisant ainsi 512*511 multiplications.


Message édité par el muchacho le 15-10-2004 à 08:06:32
n°873835
skeye
Posté le 15-10-2004 à 08:05:03  profilanswer
 

el muchacho a écrit :

Les x[i][j], c'est optimisé par le compilo ou il fait une multiplication à chaque fois ?
Parce que ça vaut p-ê le coup d'utiliser un pointeur qu'on incrémente pour traverser le tableau, ou mieux, utiliser des vector et des itérateurs (qui font ça je crois).


Une multiplication de quoi? :??:


---------------
Can't buy what I want because it's free -
n°873836
el muchach​o
Comfortably Numb
Posté le 15-10-2004 à 08:08:30  profilanswer
 

skeye a écrit :

Une multiplication de quoi? :??:


 
ben a[i][j] = *a[i*512+j]
 
Tu fais 512*512 multiplications.


Message édité par el muchacho le 15-10-2004 à 08:09:19
n°873839
skeye
Posté le 15-10-2004 à 08:14:36  profilanswer
 

Humm oui...de tte manière les tableaux à 2 dimensions c'est le mal, mieux vaut en gérer 1 à une dimension tout seul...
Je sais pas ce que fait le compilo (je vois pas ce qu'il peut faire d'autre), mais il génère probablement trop de multiplications à chaque tour de boucle... :jap:


---------------
Can't buy what I want because it's free -
n°873845
Lam's
Profil: bas.
Posté le 15-10-2004 à 08:30:17  profilanswer
 

meu hon.  
Le compilo incrémente un offset à chaque tour de boucle interne. Et (au pire) il fait un décalage de 9 bits à gauche à chaque tour de boucle externe.
Ca fait 512 additions, et 511 décalages...

n°873848
skeye
Posté le 15-10-2004 à 08:34:30  profilanswer
 

Lam's a écrit :

meu hon.  
Le compilo incrémente un offset à chaque tour de boucle interne. Et (au pire) il fait un décalage de 9 bits à gauche à chaque tour de boucle externe.
Ca fait 512 additions, et 511 décalages...


 
Donc quand tu fais un truc comme ça il fait pas 8 multiplications à chaque tour dans la boucle interne?:o

Citation :


for(r=0; r < max;r++)
{
for(c=0; c<mac;c+=8)
{
# v = x[r][c];
#    v1 = x[r][c+1];
#    v2 = x[r][c+2];
#    v3 = x[r][c+3];
#    v4 = x[r][c+4];
#    v5 = x[r][c+5];
#    v6 = x[r][c+6];
#    v7= x[r][c+7];
}
}


 
Perso on m'a tjrs appris à utiliser des tableaux 1D pour manipuler des images... :??:


Message édité par skeye le 15-10-2004 à 08:40:12

---------------
Can't buy what I want because it's free -
n°874421
el muchach​o
Comfortably Numb
Posté le 15-10-2004 à 20:44:42  profilanswer
 

xiluoc a écrit :

A default de trouver mon ereur il y a t il des outils sous linux me permetant de visualiser les miss et hit de mon prog sur le cache ?


 
http://kcachegrind.sourceforge.net/cgi-bin/show.cgi

n°874486
Joel F
Real men use unique_ptr
Posté le 15-10-2004 à 22:05:16  profilanswer
 

skeye a écrit :


Perso on m'a tjrs appris à utiliser des tableaux 1D pour manipuler des images... :??:


 
tu me dis comment tu fait pour appliquer un filtre NxN a ton tableau 1D [:autobot]

n°874574
LeGreg
Posté le 15-10-2004 à 23:42:27  profilanswer
 

le mieux c'est les bitplanes.
 
Avec du swizzling.

n°874602
skeye
Posté le 16-10-2004 à 00:24:11  profilanswer
 

Joel F a écrit :

tu me dis comment tu fait pour appliquer un filtre NxN a ton tableau 1D [:autobot]


Tu fais un tableau 1D de taille sizeX*sizeY?[:autobot]


Message édité par skeye le 16-10-2004 à 00:24:23

---------------
Can't buy what I want because it's free -
n°874677
Joel F
Real men use unique_ptr
Posté le 16-10-2004 à 10:43:44  profilanswer
 

je te parle de l'application du filtre [:dawa]

n°874679
skeye
Posté le 16-10-2004 à 10:45:07  profilanswer
 

Joel F a écrit :

je te parle de l'application du filtre [:dawa]


bah tu sais très bien retrouver ce qui correspond à val[x][y] quand même...ca a quand même rien de magique de coller toute les lignes de ton tableau 2D bout à bout pour en faire un tableau 1D![:mlc]


---------------
Can't buy what I want because it's free -
n°874680
Joel F
Real men use unique_ptr
Posté le 16-10-2004 à 10:48:56  profilanswer
 

c'est pas trivial je t'assure.
 
la représentation 1D c'est bien pour des traitements 1D ou massif ...

n°874683
skeye
Posté le 16-10-2004 à 10:58:02  profilanswer
 

Joel F a écrit :

c'est pas trivial je t'assure.
 
la représentation 1D c'est bien pour des traitements 1D ou massif ...


C'est pas trivial mais c'est loin de nécessiter  tant de boulot que ça...et le gain est appréciable.


---------------
Can't buy what I want because it's free -
n°874726
Lam's
Profil: bas.
Posté le 16-10-2004 à 12:32:40  profilanswer
 

Euh, vous faites comment quand vous nr connaissez pas la taille de l'image à l'avance ?
 
D'autre part savoir que le pixel d'en dessous c'est tab[offset+size_y], ça casse pas des briques non plus. :)

n°874728
Joel F
Real men use unique_ptr
Posté le 16-10-2004 à 12:40:10  profilanswer
 

c'est pas une histoire d'acces, c'est une histoire de cache line ...

n°874734
Lam's
Profil: bas.
Posté le 16-10-2004 à 12:54:22  profilanswer
 

Je comprend pas. Que tu utilises ton tableau en 2D ou en 1D, ton cache sera dans le vent de toute façon. La meilleure façon d'éviter ça ça reste de stocker 1 copie tournée à 90 degrés: ça te permet de pas partir dans le vent à chaque fois que tu as besoin de la ligne juste en dessous ou juste en dessus...
Ou alors j'ai pas compris la discussion en cours (et je dois pas être le seul).
 
A moins que tu ne parles de l'alignement. Par exemple, on accède à 6 lignes à chaque fois, chacune foutant en l'air le cache à cause de cache 4-way qui fait pile la taille d'une ligne ? c'est ça ?

n°874745
Joel F
Real men use unique_ptr
Posté le 16-10-2004 à 13:11:26  profilanswer
 

Lam's a écrit :

moins que tu ne parles de l'alignement. Par exemple, on accède à 6 lignes à chaque fois, chacune foutant en l'air le cache à cause de cache 4-way qui fait pile la taille d'une ligne ? c'est ça ?


 
oui j'etais pas clair ^^

n°874888
skeye
Posté le 16-10-2004 à 19:05:54  profilanswer
 

Lam's a écrit :

Euh, vous faites comment quand vous nr connaissez pas la taille de l'image à l'avance ?


 
A priori au moment où on crée son image on connait sa taille, non?
 

Lam's a écrit :


D'autre part savoir que le pixel d'en dessous c'est tab[offset+size_y], ça casse pas des briques non plus. :)


 
C'est simple, et si on accède à plusieurs pixels on ne calcule l'offset via multiplication qu'une fois...[:skeye]


Message édité par skeye le 16-10-2004 à 19:06:02

---------------
Can't buy what I want because it's free -
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
fonction html : listbox optimisation?[devcpp] options d'optimisation ne change rien
Calcul de différence entre deux dates[algo] inversion d'une matrice, cas "particulier"
Optimisation traitement d'imagesCalcul sur HH:MM:SS et centièmes de secondes
Valeur nulle et optimisationMatrice 3x10
[PHP - MYSQL] optimisation d'une requete[vba]Optimisation du code pour la rapidité (résolu)
Plus de sujets relatifs à : Calcul sur une matrice, optimisation ?


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)