¿Cuál es la sobrecarga en la multiplicación de matriz dispersa?

10

¿La multiplicación de matrices (Mat * Mat y Mat * Vec) se escala con el número de ceros o con el tamaño de la matriz? O alguna combinación de los dos.

¿Qué pasa con la forma?

Por ejemplo, tengo una matriz de 100 x 100 con 100 valores, o una matriz de 1000 x 1000 con 100 valores.

Al cuadrar estas matrices (o multiplicarlas por matrices similares con una dispersión similar), ¿la primera (100x100) será más rápida que la segunda (1000x1000)? ¿Depende de dónde están los valores?

Si depende de la implementación, estoy interesado en la respuesta para PETSc.

Andrew Spott
fuente

Respuestas:

11

El costo de la multiplicación escasa de matriz-vector se escala linealmente con el número de entradas distintas de cero, ya que cada entrada se multiplica una vez por alguna entrada en el vector.

UNA

UNA=(δ1β1δ2β2δnorte-1βnorte-1γ1γ2γnorte-1δnorte),

UNAO(norte)UNA2UNAUNA2UNA2

Jack Poulson
fuente
4

En primer lugar, depende de la implementación. Si implementa una matriz dispersa como una matriz densa y completa los ceros distintos de cero, se escalará con el tamaño general de la matriz. Si se almacena como cero, se escalará a medida que el tiempo de acceso se escala con el tamaño de la matriz.

O(r2norte2)

Una cosa a tener en cuenta, sin embargo, es que no tiene sentido almacenar lo que no está allí; Si le importa este rendimiento, ¿por qué está almacenando 100 valores para una matriz 1000x1000? Eso significa que al menos el 90% de las filas / columnas no tienen valores distintos de cero y podrían eliminarse por completo de la matriz. Si el patrón de valores distintos de cero no cambia, considere la posibilidad de eliminar las filas siempre cero de esta matriz y de la matriz de destino; eliminará alrededor del 90% del esfuerzo, dejando el rendimiento de las dos matrices (100 2 , 1000 2 ) ampliamente equivalente.

Phil H
fuente
Las filas y columnas vacías a menudo tienen función con respecto a un problema (es decir, mantener un mapeo uniforme entre el número de fila y la ubicación en una imagen, por ejemplo) Sin embargo, habrá una compensación que no los eliminará.
meawoppl
Exactamente; hacer que su rendimiento de tiempo de ejecución sea alrededor de 10 veces peor solo para mantener una asignación que pueda almacenar en una sola matriz de 100 entradas no es una compensación normal. Dado que la pregunta era sobre el rendimiento como el tamaño en blanco de las escalas de la matriz, este es un punto bastante importante particularmente para PETSc, ya que preguntó.
Phil H
3

En este documento se proporciona un modelo completo de rendimiento de SpMV . Muestra claramente que el limitador principal es el ancho de banda, aunque puede disminuir la carga mediante el uso de múltiples vectores. Después de eso, te encuentras con limitaciones de problemas de instrucción y un límite de instrucciones de escritura pendientes, creo.

Matt Knepley
fuente