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?