Я написал программы на С++, Python и Java для матричного умножения и протестировал их скорость для умножения двух матриц 2000 x 2000 (см. post). Стандартная ikj-имплантация - которая находится в - взяла:
Теперь я применил алгоритм Strassen для умножения матриц - который находится в - в Python и С++, как это было в wikipedia, Это время, которое у меня есть:
Почему матричное умножение Штрассена намного медленнее, чем стандартное умножение матрицы?
<ч/" > Идеи:
- Некоторые эффекты кеша
- Реализация:
- (результирующая матрица 2000 x 2000 верна)
- null-multipication (не должно быть так важно для 2000 x 2000 → 2048 x 2048)
Это особенно удивительно, поскольку это противоречит опыту других:
- Почему мой мультипликатор Matrix Strassen так быстро?
- Матричное умножение: Штрассен против Стандарта - Штрассен был еще медленнее для него, но он был, по крайней мере, в том же порядке.
edit: причина, по которой в моем случае умножение матрицы Штрассена было медленнее:
- Я сделал это полностью рекурсивным (см. там)
- У меня было две функции
strassen
иstrassenRecursive
. Первый изменил матрицу на степень двух, если требуется, и назвал вторую. НоstrassenRecursive
не рекурсивно называл себя, аstrassen
.