Ottimizzare i programmi identificando e prendendo scorciatoie di valutazione (calcolo)

1

Recentemente sto lavorando a un progetto che comporta un sacco di semplici calcoli numerici applicati a grandi matrici. I valori numerici sono molto semplici ma esistono molti tipi diversi, come numeri interi positivi, numeri interi negativi, numeri in virgola mobile e così via. Le tecniche di programmazione SIMD (come SSE) sono ampiamente utilizzate.

Ho notato che molte volte la velocità di elaborazione può essere migliorata se riesco a trovare scorciatoie nei calcoli. Ad esempio, se gli input sono interi e le uscite sono anche numeri interi, dovrei fare del mio meglio per evitare la conversione in numeri in virgola mobile se possibile.

Per semplici calcoli concatenati è facile. Tuttavia, quando aumentiamo il numero di operazioni che possono essere combinate, scopriamo che dobbiamo codificare manualmente quelle istruzioni SIMD per ciascun caso.

Ho studiato gli approcci adottati da varie librerie di vettorizzazione e osservato che mentre i loro approcci sono molto eleganti nel codice usando le tecniche di metaprogrammazione, la maggior parte dei compilatori non è in grado di generare istruzioni ottimizzate dai risultati.

Se rappresento i calcoli con oggetti comando , avrò una migliore possibilità di abbinare piccole sezioni della catena di comando e sostituendo con scorciatoie?

    
posta rwong 22.04.2011 - 06:44
fonte

1 risposta

2

Partendo dal presupposto che il compilatore può ottimizzare il sovraccarico associato all'utilizzo di oggetti di comando inserendo le chiamate di funzione, questa è una tecnica di ottimizzazione perfettamente valida. Può essere adattato, ma è probabilmente meglio pianificare in anticipo. Se stai usando C ++ (possibilmente con boost per fare un po 'di tempo magico per la compilazione per te) e gli oggetti di comando sono piccoli, generalmente questa ipotesi dovrebbe essere valida. Ho usato questa tecnica di meno in un abbastanza grande progetto computazionale che ha scritto un numero di anni fa e ho scoperto che ha funzionato bene Una cosa di cui essere consapevoli è che la programmazione in questo modo può aumentare o aumentare la complessità complessiva del progetto e renderne più difficile la lettura e la manutenzione.

    
risposta data 22.04.2011 - 09:16
fonte

Leggi altre domande sui tag