Pregunta

Estoy usando C ++ para código de algún algoritmo FFT compleja, por lo que necesito para poner en práctica las estructuras algebraicas tales como cuaterniones y códigos de Hamilton-Eisenstein. Algoritmo trabaja con matriz 2D de que las estructuras. ¿Cuál sería la sobrecarga de implementarlos como clases? En otra forma, debería crear la matriz con las dimensiones [M] [N], que consiste en clases Quaternion, o debería crear [M] [N] [4] matriz y trabajo con [4] matrices como cuaterniones? Utilización de las clases es más conveniente, pero la creación de clases de M * N y acceder a sus métodos en lugar de trabajar con simplemente array - ¿No sería demasiado trabajo? Estoy Codificación del algoritmo de procesamiento de imágenes grandes, por lo que el rendimiento es importante para mí.

¿Fue útil?

Solución

En mi humilde opinión que están mejor servidos mediante la implementación de ellos como clases simplemente porque esto le permitirá escribir el código más rápido con menos errores. Usted debe hacer mediciones para ver qué funciona mejor que si es importante para usted, sino también asegurarse de que en realidad es el código que es el cuello de botella. ( Donald Knuth cita : "optimización prematura es la raíz de todo mal").

La mayoría de los compiladores hacer un muy buen trabajo en la optimización de código para usted, diría. Más a menudo que no me parece que es algo más que estas cosas de bajo nivel que marcan la diferencia, como la adición de una temprana salida de prueba o minimizar el conjunto de datos o lo que sea.

En un cuaternión, todavía puede implementar la clase utilizando una matriz internamente (en el caso de que en realidad es más rápido), lo que debería hacer la diferencia aún menos importante.

Usted está probablemente mejor servido por, por ejemplo, asegurándose de que se pueda ejecutar sus algoritmos en parallell en máquinas multinúcleo o hacer sus cálculos reales utilizan instrucciones SSE.

Otros consejos

En cuanto a gastos generales de las clases:. A menos que sus clases tienen funciones virtuales, no hay penalización por el uso de clases

Así, por ejemplo, una matriz de variables complejas se puede escribir como:

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

Cuidado de clases de colección STL, sin embargo, ya que tienden a utilizar la asignación dinámica y, a veces introducen sobrecarga significativa (es decir, no hacer arrays usando vector< vector<> >.

Es posible que desee investigar el uso de una biblioteca como Eigen para rápido, clases optimizado, la matriz / vector.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top