[C] Migliorare Prestazioni Vettore

Return89
Ciao a tutti,
come da titolo vorrei sapere se conoscete un modo per migliorare le prestazioni (velocità di esecuzione) di un listato con dei vettori multi-dimensionali molto grossi (il più grande è di 100x200).
Ho fatto dei test per calcolarne le prestazioni e mediamente l'esecuzione avviene in 1.8 secondi.
Leggendo qua e là su internet ho letto che ci sono diversi metodi per migliorare le prestazioni di un programma: alcuni dipendono dal compilatore ed altri dal codice, però onestamente non ho trovato nulla di utile (tante chiacchiere, niente di concreto).

Nello specifico io utilizzo Visual Studio 2008..sapreste dirmi cosa potrei fare??


Grazie anticipatamente a chiunque mi voglia aiutare :smt023 :smt023

Risposte
vict85
Che operazioni fai? Che tipo di dati sono contenuti nei vettori multidimensionali? Come hai memorizzato i dati? Penso che si debba agire su memoria e scelta degli algoritmi.

Comunque 100x200 non lo definirei grande. Il tempo di esecuzione non lo saprei giudicare dato che non conosco né il sistema che usi né le operazioni che devi fare.

Riguardo al compilatore dai un'occhiata a visual studio 2013 community.

Return89
Come operazioni direi che il 95% del listato è costituito da "if", il restante 5% è fatto di cicli for..Al''interno di essi ci sono operazioni molto semplici su varaibili int o al massimo float..
Nei vettori multidimensionali sono contenuti degli interi e li ho memorizzati mediante cicli for (il listato riempie tutte le locazioni necessarie).
Il listato è lungo qualche migliaio di righe di codice.

Cosa potrebbe giustificare tutto quel tempo di esecuzione?

Grazie ancora :)

vict85
Direi che le tue informazioni mi dicono ben poco. Insomma cosa dovrebbe calcolare l'eseguibile? Qual'è il significato degli interi in quella tabella? I dati sono memorizzati in un vettore statico bidimensionale, dinamicamente con un puntatore di puntatori, o in altri modi?
È possibile che si possano sostituire gli if con delle operazioni per un minimo miglioramento delle performance. Miglioramenti più sostanziali richiedono di studiare il problema.

Return89
E' un programma di matematica, quindi calcola mediante tutti quegli interi diverse formule ecc ecc...

I dati sono memorizzati in un vettore statico, non dinamico e per assegnare i valori NON utilizzo i puntatori. Potrebbe essere uno di questi motivi?
Inoltre molti if sono annidati: se sostituisco ad esempio 3 if (uno dentro l'altro) con un unico if che contiene tutte le condizioni dei precedenti 3 if ma risparmio qualche riga di codice cambia qualcosa?

Grazie :)

vict85
L'uso di array multidimensionali statici va benissimo. Il compilatore sa come gestirli.

Unire gli if non dovrebbe cambiare praticamente nulla. Immagino possa essere l'ordine con cui accedi alla memoria che rallenta il tutto. In sostanza sono i for.

apatriarca
Non è possibile parlare di ottimizzazione di un codice senza vedere quel codice. Questo è un po' il motivo per cui la maggior parte degli articoli di ottimizzazione sono molto generici o troppo specifici (discutono l'ottimizzazione di un codice particolare). L'ottimizzazione di un codice richiede normalmente un po' di esperienza e un po' di misurazione. Per capire quali parte del codice danno più problemi dovresti insomma usare un profiler. Ma se posti (o ci dai un link per scaricarlo) il tuo codice possiamo esserti di maggiore aiuto.

Return89
Grazie ad entrambi per le risposte esaustive.

Comunque credo di aver trovato la parte di codice che rallenta il tutto (piena di cicli for appunto..), in questi giorni cerco di pubblicarla così vediamo se si può risolvere :)

Grazie ancora, ci aggiorniamo tra qualche giorno ;)

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.