¿Cómo acelerar la multiplicación de matrices en C ++?
Estoy realizando la multiplicación de matrices con este algoritmo simple. Para ser más flexible, utilicé objetos para las matrices que contienen matrices creadas dinámicamente.
Comparando esta solución con la primera con matrices estáticas es 4 veces más lenta. ¿Qué puedo hacer para acelerar el acceso a los datos? No quiero cambiar el algoritmo.
matrix mult_std(matrix a, matrix b) {
matrix c(a.dim(), false, false);
for (int i = 0; i < a.dim(); i++)
for (int j = 0; j < a.dim(); j++) {
int sum = 0;
for (int k = 0; k < a.dim(); k++)
sum += a(i,k) * b(k,j);
c(i,j) = sum;
}
return c;
}
EDITARCorrija mi pregunta evitar! Agregué el código fuente completo a continuación y probé algunos de tus consejos:intercambiadok
yj
iteraciones de bucle -> mejora del rendimientodeclaradodim()
yoperator()()
comoinline
-> mejora del rendimientopasar argumentos por referencia constante ->pérdida de rendimiento! ¿por qué? así que no lo usoEl rendimiento ahora es casi el mismo que en el viejo programa. Tal vez debería haber un poco más de mejora.
Pero tengo otro problema: me sale un error de memoria en la funciónmult_strassen(...)
. ¿Por qué?terminate called after throwing an instance of 'std::bad_alloc'<br>what(): std::bad_alloc
C Principalhttp://pastebin.com/qPgDWGpW
c99 main.c -o matrix -O3
matriz.hhttp://pastebin.com/TYFYCTY7
matrix.cpphttp://pastebin.com/wYADLJ8Y
main.cpphttp://pastebin.com/48BSqGJr
g++ main.cpp matrix.cpp -o matrix -O3
.