infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: Timotei Dolean din Martie 11, 2008, 19:07:55



Titlul: Niste intrebari de optimizare
Scris de: Timotei Dolean din Martie 11, 2008, 19:07:55
Deci am niste intrebari legate de optimizarea unor operatii in C++

Ce este mai rapid dintre:
1)

 o matrice cu 2 linii si m coloane
 
Cod:
 #define M 100
 int matrice[3][M];

 SAU
 
 un vector de structuri
 
Cod:
 #define M 100
 struct st{ int x; int y;}; st vector[M];

2)
  folosirea unei variabile intr-o functie:

  folosind variabila global
 
  SAU
 
  transmitand-o ca parametru


Titlul: Răspuns: Niste intrebari de optimizare
Scris de: Kerekes Felix din Martie 11, 2008, 20:28:42
1) Teoretic, matricea, mai ales in cazurile in care este adaptata sa nu sparga linia de cache

2) Transmiterea ca parametru e mai rapida pentru ca variabila e stocata pe stiva, la care accesul este mai rapid

In fine, astea sunt detalii care conteaza prea putin, si in cea mai mare majoritate a cazurilor, nu iti vor aduce puncte in plus.
Corectati-ma daca am gresit


Titlul: Răspuns: Niste intrebari de optimizare
Scris de: Gogu Marian din Martie 11, 2008, 21:41:07
Daca nu vrei sa spagi cache-ul ar trebui sa fie mai eficienta varianta de struct in medie pentru ca atunci cand ai nevoie de x, probabil ai nevoie si de y si nu ai decat o citire din RAM daca nu sunt in cache.

Oricum, la 100 de elemente chiar nu ar trebui sa conteze ca intra oricum totul in cache.

La transmiterea parametrilor pentru intregi/reale nu ar trebui sa conteze, oricum optimizeaza bine compilatorul. Pentru structuri mari de date ai grija ca poate dura ceva sa le incarce in stiva asa ca foloseste transmiterea prin referinta unde e sigur.


Titlul: Răspuns: Niste intrebari de optimizare
Scris de: Kerekes Felix din Martie 11, 2008, 22:30:47
Daca nu vrei sa spagi cache-ul ar trebui sa fie mai eficienta varianta de struct in medie pentru ca atunci cand ai nevoie de x, probabil ai nevoie si de y si nu ai decat o citire din RAM daca nu sunt in cache.

In cazul asta poti declara matricea asa:
Cod:
#define M 100
int matrice[M][2]
Ce vroiam sa spun e ca matricea iti ofera mai multa flexibilitate in cazul asta, si poti s-o adaptez in functie de traversarile pe care le faci. Detalii irelevante anyway...