57 votos

¿Qué tan rápido podemos * realmente * multiplicar matrices?

Antecedentes: El Algoritmo de Strassen, que se describe aquí, tiene una complejidad computacional de $\text{O}(n^{2.807})$ para la multiplicación de dos $n \times n$ matrices (el exponente es $\frac{\log7}{\log2}$). Sin embargo, la constante es tan grande que este algoritmo es de hecho más lento en la práctica que el ingenuo de la multiplicación de la matriz para las pequeñas $n$. Del mismo modo, el Calderero-Winograd algoritmo, que tiene la menor complejidad asintótica de todos los conocidos algoritmos de la multiplicación de la matriz, tiene un exponente de $2.376$ y se discutió aquí anteriormente.

Pregunta: Recientemente, hice un reclamo en un documento entregado que el de Smith de forma normal algoritmo tiene super-cúbico de complejidad y un revisor replicó diciendo que, en realidad, la complejidad se ha reducido a la multiplicación de la matriz de tiempo = $n^{2.37\ldots}$. Yo no soy un experto en la matriz de algoritmos y volvería a cambiar la línea incorrecta, pero la experiencia me ha obligado a preguntarse, ¿cuáles son las implicaciones prácticas de decir "X se puede hacer en la multiplicación de la matriz de tiempo"? Más precisamente,

¿Existe una real implementación de software de Calderero Winograd? Si no, hay un obstáculo teórico para su existencia?

Por un teórico obstáculo no me refiero a algo como "Bien, sería mejor que las técnicas existentes para $n$ más grande que el número de átomos en el universo ¿cuál es el punto?", sino más bien algo así como "el algoritmo utiliza el axioma de elección, o la clasificación de los finitos simples grupos", etc.

PS: Bueno, por lo que también es este el papel que al parecer reduce la complejidad de la Calderero-Winograd enfoque a $2.3737$ de $2.376$, por lo que acepto la corrección acerca de CW ser el más rápido. La pregunta sigue en pie, si reemplazamos la CW por el método de V. V. Williams.

89voto

travelbug Puntos 16

Actualmente no hay implicaciones prácticas de cualquier rápida multiplicación de la matriz de algoritmos, además de Strassen es. El Calderero/Winograd algoritmo y sus descendientes (Stothers, Williams) son muy complejas, dependen probabilística de construcciones, etc. No hay ningún obstáculo teórico para la aplicación de ellos en el sentido de que usted está preguntando acerca de, y es algo que es humanamente posible, pero hay poco punto y no creo que nunca nadie ha hecho en realidad es. Sería complicado y doloroso, y el único propósito sería realmente el aprendizaje de cómo funciona el algoritmo, desde el punto por donde se iba a mejorar en el ingenuo cúbicos de tiempo de algoritmo es enorme (por lo que nunca realmente ver cualquier mejora). Existen otros algoritmos que sería algo más fácil de implementar, en el costo de peor rendimiento asintótica, pero también son totalmente impráctico.

También hay un problema más profundo si intenta utilizar algebraicas algoritmos en la práctica. La complejidad algebraica del modelo utilizado normalmente para estos problemas que se cuenta sólo a las operaciones aritméticas y considera que el acceso a la memoria para ser libre. En este sentido camino de regreso cuando, desde un único punto flotante operación fue relativamente caro, pero hoy en día la gestión de la memoria puede ser el verdadero cuello de botella en la práctica. Algebraicas complejidad es hermoso y teóricamente importante, pero no tiene en cuenta cuestiones prácticas importantes.

Si usted desea hacer la rápida multiplicación de la matriz en la práctica, presumiblemente en una computadora paralela. Que presenta más problemas de comunicación de la complejidad; ver http://arxiv.org/abs/1202.3173 para un análisis de la Strassen caso (tanto en la teoría y en la práctica).

40voto

Noor Odah Puntos 1

Recientemente hay una tesis doctoral acerca de la práctica de rápida multiplicación de la matriz algoritmos como Strassen:

La multiplicación de la matriz es una de las principales bloques de construcción para numerosos computación científica y, más recientemente, de la máquina de aprendizaje de las aplicaciones. El algoritmo de Strassen, el original de la Rápida Multiplicación de la Matriz (FMM) algoritmo, siempre ha fascinado a los científicos de la computación debido a su asombrosa propiedad de reducir el número de cálculos necesarios para la multiplicación de $n \times n$ matrices a partir de las $\mathcal{O}(n^3)$ a $\mathcal{O}(n^{2.807})$. Durante la última mitad de siglo, esto ha alimentado muchos teóricos de mejoras tales como otras variaciones de Strassen-como FMM algoritmos. Las implementaciones anteriores de estos FMM algoritmos llevó a la "calle de la sabiduría" que sólo son prácticos para los grandes, relativamente matrices cuadradas, que requieren de un considerable espacio de trabajo, y que son difíciles de lograr hilo a nivel de paralelismo. La tesis de este trabajo disipa estas nociones mediante la demostración de beneficios significativos para los pequeños y no de las matrices cuadradas, que no requiere espacio de trabajo más allá de lo que ya está incorporado en el alto rendimiento de las implementaciones de la multiplicación de la matriz, y el logro de beneficios en el rendimiento multi-core, muchos de núcleo, y arquitecturas de memoria distribuida.

Este trabajo incluye varias publicaciones:

El Algoritmo de Strassen Reloaded. En la Conferencia Internacional para La Computación de Alto Rendimiento, Redes, Almacenamiento y Análisis (SC16), Salt Lake City, UT, de noviembre de 2016.

La generación de las Familias de Práctica Rápida Multiplicación de la Matriz de los Algoritmos. En 31 de IEEE International Paralelo y Distribuido de Procesamiento de Simposio (IPDPS17), Orlando, FL, 29 de Mayo-2 de junio de 2017.

El Algoritmo de Strassen para el Tensor de la Contracción. En SIAM Journal on de Computación Científica (SISC), 40(3):C305-C326 de 2018.

Implementar el Algoritmo de Strassen con el ALFANJE en NVIDIA Volta Gpu. La LLAMA de Trabajo Nota nº 88, de La Universidad de Texas en Austin, Departamento de Ciencias de la computación. Informe técnico TR-18-08. El 23 de agosto de 2018.

El código fuente abierto repositorios están aquí:

https://github.com/flame/fmm-gen

https://github.com/flame/tblis-strassen

Aparte de eso, usted podría estar también interesado en este documento:

Un marco para la práctica paralelo rápida multiplicación de la matriz. En Actas del 20 de ACM SIGPLAN Simposio sobre los Principios y la Práctica de la Programación Paralela (PPoPP 2015).

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X