Domanda

Sto usando C ++ per il codice qualche algoritmo FFT complicate, quindi ho bisogno di implementare tali strutture algebriche come quaternioni e codici Hamilton-Eisenstein. Algoritmo funziona con matrice 2D che le strutture. Quale sarebbe il sovraccarico della loro attuazione come classi? In altro modo, devo creare l'array con [N] Dimensioni [M] che consiste di classi quaternioni, o devo creare [M] [4] array [N] e lavorare con [4] array come quaternioni? Utilizzo di classi è più conveniente, ma creando classi M * N e accedendo loro metodi invece di lavorare con semplicemente array - sarebbe non che sia troppo in alto? Sto codifica l'algoritmo per immagini di grandi dimensioni di elaborazione, quindi le prestazioni è importante per me.

È stato utile?

Soluzione

IMHO si sono meglio serviti mediante l'attuazione di loro come le classi semplicemente perché questo vi permetterà di scrivere il codice più veloce con meno errori. Si dovrebbe fare le misurazioni per vedere che cosa funziona meglio se questo è importante per voi, ma anche fare in modo che sia in realtà questo codice che è il collo di bottiglia delle prestazioni. (Obbligatorio Donald Knuth citazione : "ottimizzazione prematura è la radice di ogni male").

La maggior parte dei compilatori faranno un ottimo lavoro ad ottimizzare il codice per te, direi. Più spesso di quanto non trovo che sia qualcosa di diverso da queste cose di basso livello che fanno la differenza, come l'aggiunta di un test precoce-out o minimizzare il set di dati o roba del genere.

Per un quaternione, è ancora possibile implementare la classe utilizzando una matrice interna (nel caso in cui in realtà è più veloce), che dovrebbe fare la differenza, anche meno importanti.

si sono probabilmente meglio servita da esempio per fare in modo che è possibile eseguire gli algoritmi in parallell sul multicore machine o fare i vostri calcoli attuali utilizzano istruzioni SSE.

Altri suggerimenti

Per quanto riguarda la testa di classi:. A meno che le vostre classi hanno funzioni virtuali, non c'è nessuna penalità per l'utilizzo di classi

Quindi, per esempio, un array di variabili complesse può essere scritta come:

std::complex<double> m[10][10];

Attenzione classi di insiemi STL, però, in quanto tendono a utilizzare l'allocazione dinamica e talvolta introducono overhead significativo (cioè, non avrei fatto matrici utilizzando vector< vector<> >.

Si potrebbe desiderare di indagare l'uso di tale biblioteca come Eigen veloce, classi ottimizzato, matrice / vettore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top