2013-09-18 4 views
0

Я пытаюсь оптимизировать код обработки изображений проектаOpenCV Вычитание дороже, чем умножение

Performance analysis done by VS2013 preview

Анализ с помощью VS2013 предварительного просмотра показывает, что вычитают операция дороже, чем умножение (мул) операции.

В общем случае умножение является более дорогостоящим, чем вычитание справа.? Если да, то почему этого нет?

ответ

1

Я думаю, что это потенциально комбинация нескольких факторов.

  • t1 потребности, которые будут выделены в ходе subtract вызова, и это занимает немного времени
  • t1 вполне возможно, уже в кэше во время t1.mul(t1) вызова, так доступы быстрее
  • Я не уверен, какой тип td есть, но я уверен, что при добавлении 1 в saturate_cast происходит переход на каждый элемент в матрице до td; не требуется кастинг в звонках .mul()
  • вычитание и умножение - это операции с памятью, поэтому для всех, кроме наименьших матриц, правильно оптимизированный код скроет более высокую задержку команд умножения для достижения одинаковой пропускной способности для обеих операций, все при прочих равных условиях (например, кэширование и т.д.)
  • на .mul() звонки в месте операции, которая имеет значительные преимущества для кэширования
  • если это релиз сборки проекта, можно оптимизатор переставить код таким образом, чтобы запутать профилировщик, о том, какие трудоемкие машинные инструкции соответствуют строкам кода. Вы будете удивлены тем глубоким волшебством, которое участвует в оптимизированной реализации арифметических операций над матрицами в OpenCV.
Смежные вопросы