Matrix multiplication, a little faster

Elaye Karstadt, Oded Schwartz

Research output: Contribution to journalArticlepeer-review

9 Scopus citations

Abstract

Strassen's algorithm (1969) was the first sub-cubic matrix multiplication algorithm. Winograd (1971) improved the leading coefficient of its complexity from 6 to 7. There have been many subsequent asymptotic improvements. Unfortunately, most of these have the disadvantage of very large, often gigantic, hidden constants. Consequently, Strassen-Winograd's O(nlog2 7) algorithm often outperforms other fast matrix multiplication algorithms for all feasible matrix dimensions. The leading coefficient of Strassen-Winograd's algorithm has been generally believed to be optimal for matrix multiplication algorithms with a 2 × 2 base case, due to the lower bounds by Probert (1976) and Bshouty (1995). Surprisingly, we obtain a faster matrix multiplication algorithm, with the same base case size and asymptotic complexity as Strassen-Winograd's algorithm, but with the leading coefficient reduced from 6 to 5. To this end, we extend Bodrato's (2010) method for matrix squaring, and transform matrices to an alternative basis. We also prove a generalization of Probert's and Bshouty's lower bounds that holds under change of basis, showing that for matrix multiplication algorithms with a 2 × 2 base case, the leading coefficient of our algorithm cannot be further reduced, and is therefore optimal. We apply our method to other fast matrix multiplication algorithms, improving their arithmetic and communication costs by significant constant factors.

Original languageAmerican English
Article number1
JournalJournal of the ACM
Volume67
Issue number1
DOIs
StatePublished - Jan 2020

Bibliographical note

Publisher Copyright:
© 2020 Copyright held by the owner/author(s). Publication rights licensed to ACM.

Keywords

  • Bilinear algorithms
  • Fast matrix multiplication

Fingerprint

Dive into the research topics of 'Matrix multiplication, a little faster'. Together they form a unique fingerprint.

Cite this