linux user group brescia

immagine del castello

Archivio della mailing list

Allocazione dinamica in C

Bauno bauno a inwind.it
Ven 31 Dic 2004 10:09:03 UTC
On Friday 31 December 2004 10:23, you wrote:

> Sono stato un po' troppo sintetico :-) Era un trattamento di immagine in
> tempo reale e la look-up table evitava 6-7 operazioni a pixel,
> sostituendole con un accesso all'array. 

Oki, questo è già + comprensibile, specialmente se erano operazioni su interi.

> > Però sto facendo fatica a capire come il discorso sulle maggiori
> > performance dell'L1 cache si inserisca in quello sull'allocazione
> > dinamica e sulle maggiori performance dell'aritmetica dei puntatori...:-?
>
> Semplice: nel caso del singolo array lineare (che simula una matrice
> bidimensionale) ci sono due accessi: uno al pointer di base dell'array
> stesso e uno all'elemento di destinazione, piu' le variabili intermedie che
> sono nello stack frame o nei registry; il pointer di base e' sicuramente
> nella cache, lo stack frame pure e a questo punto il caching dipende solo
> dal pattern di accesso all'array (in rapporto alle caratteristiche della
> cache). Nel caso dell'array di pointer, invece, si risparmiano istruzioni
> di calcolo ma si introduce un secondo accesso, quello al pointer di riga
> che sta in un'area di memoria allocata separatamente, complicando (almeno
> potenzialmente) il lavoro della cache, specie nel caso che le righe siano
> parecchie e/o allocate anch'esse una per una, come solitamente accade.

Ehm...io sono d'accordo, ma vorrei farti notare che è esattamente quanto ho 
detto io nel primo messaggio, che ti invito a ri-leggere, ossia che una 
matrice allocata come un array monodimensionale è più veloce di un doppio 
puntatore. È abbastanza ovvio che, cache o non cache (questo c'entra fino a 
un certo punto) una somma/moltiplicazione tra interi è MOSTRUOSAMENTE più 
veloce di un accesso in memoria, e che quindi sostituendo un accesso in 
memoria con una operazione di offset si guadagni qualcosa...

Io pensavo volessi dimostrarmi come, grazie alla cache, il doppio puntatore 
potesse essere più veloce dell'array monodimensionale...adesso ho capito 
perché non capivo dove volevi arrivare...:)


-- 
Bauno - Eurydices, oro, properata retexite fata!
God is real, unless declared integer




Maggiori informazioni sulla lista Lug