2015-11-05 3 views
2

В последнее время я работаю над довольно обширной программой, и сейчас я в такой ситуации, когда мне приходится использовать умножение матрицы. Дело в том, что для этой конкретной программы скорость имеет решающее значение. Я знаком с несколькими матричными установками, но мне хотелось бы знать, какой метод будет работать быстрее всего. Я провел обширные исследования, но получил очень мало результатов. Вот список алгоритмов умножения матриц Я знаком с:Каков самый быстрый способ умножения матрицы?

  • итерационного алгоритма
  • Разделить и алгоритм властвуй
  • Sub кубические алгоритмы
  • Shared Memory параллелизм

Если кому-то нужен разъяснения по методам, перечисленным мной, или по вопросу в целом, не стесняйтесь спрашивать.

+1

A: Библиотеки ручной настройки, разработанные специалистами с подробными знаниями и опытом архитектуры процессора, на котором будет выполняться код; другими словами, не сворачивайте свои собственные, попросите заимствовать или украсть реализацию. О, или на самом деле купить. –

+1

Этот вопрос слишком широк. Матрица может быть большой, небольшой, редкой, плотной ... Нет лучшего алгоритма для каждого контекста. Обратите внимание, что параллелизм с разделяемой памятью не является алгоритмом, и есть алгоритмы, которые ведут себя лучше или хуже в зависимости от параллельных архитектур, на которых вы находитесь. – coincoin

+1

Посмотрите на [связанный пост] (http://stackoverflow.com/questions/4455645/what-is-the-best-matrix-multiplication-algorithm?rq=1) –

ответ

2

Алгоритм Strassen и наивный (O (n^3)) один из них наиболее используются на практике.

Более сложные алгоритмы с более жесткими асимптотическими ограничениями не используются, поскольку их преимущества будут очевидны только для чрезвычайно больших матриц из-за их сложности, например. Coppersmith алгоритм.

Как уже указывалось, вы можете использовать библиотеку, такую ​​как ATLAS, которая будет автоматически настраивать алгоритм в зависимости от характеристик платформы, на которой вы выполняете, например. Размер кеша L1/L2.

+0

Je suis UN pamplemousse! – coincoin

+1

mon francais est ужасный !!! – igon

+0

Какие доказательства первого утверждения в этом ответе могут предоставить OP (или кто-либо еще)? –

2

Самый быстрый способ может быть с использованием уже существующей библиотеки, которая уже оптимизирована, вам не нужно каждый раз изобретать колесо.

Смежные вопросы