Necesito una forma de representar una matriz 2-D (una matriz densa) de dobles en C++, con una sobrecarga de acceso mínima absoluta.Optimización de matrices C++ 2-D
He hecho algunas de distribución en varias máquinas Linux Unix/y las versiones de gcc. Un vector de STL de vectores, declarado como:
vector<vector<double> > matrix(n,vector<double>(n));
y se accede a través de matrix[i][j]
es de entre 5% y 100% más lento de acceder que una matriz declarada como:
double *matrix = new double[n*n];
acceder a través de una función de índice inline matrix[index(i,j)]
, donde index(i,j)
evalúa a i + n * j. Otras formas de organizar una matriz 2-D sin STL - una matriz de n punteros al inicio de cada fila, o definir todo en la pila como un tamaño constante matrix[n][n]
- se ejecutan casi a la misma velocidad que el método de función de índice .
Las versiones recientes de GCC (> 4.0) parecen ser capaces de compilar el vector vectorial de STL casi con la misma eficacia que el código no STL cuando se activan las optimizaciones, pero esto es algo dependiente de la máquina.
me gustaría utilizar STL, si es posible, sino que tendrá que elegir la solución más rápida. ¿Alguien tiene alguna experiencia en la optimización de STL con GCC?
¿Esto realmente funciona con std :: vector? Lo dudo. – lothar
Sería increíble y atemorizante. – peterchen