Почему есть подпрограмма blas (ISAMAX) для argmax abs, но нет для argmax?

Почему есть Блас подпрограмма ISAMAX для argmax abs, но не для Argmax ?

В C ++ использую станд :: max_element с флагом оптимизации компилятора -O3 Я получаю скорости, сравнимые с blas_isamax (16 мс против 9 мс), поэтому в данный момент мой вопрос больше интересует, чем нуждается в скорости.

4

Решение

BLAS был разработан для обеспечения низкоуровневых процедур, необходимых для реализации общих операций линейной алгебры (это является «подпрограммы базовой линейной алгебры», в конце концов).

Чтобы назвать только одно из многих применений, получение элемента вектора наибольшей величины необходимо для выбора сводной точки в LU факторизация, которая является одной из самых фундаментальных рабочих лошадей линейной алгебры. Для сравнения, получение элемента max в принципе никогда не требуется для линейной алгебры, поэтому это не одна из операций BLAS *.

(*) фактически было рекомендовано добавить максимальную операцию в BLAS в стандарте технического форума BLAS 2001 года, но пока он не получил широкого распространения.

5

Другие решения

Библиотека BLAS — это научная вычислительная библиотека, разработанная параллельно с LAPACK. ISAMAX Подпрограмма использует бесконечную норму вектора. Для получения дополнительной информации вы можете обратиться к ссылка википедии. Многие алгоритмы LAPACK нуждаются в норме бесконечности, поэтому библиотека BLAS определила эту стандартную подпрограмму.

С другой стороны, максимальное значение вектора очень необходимо в общих вычислениях и введен C ++ std::max_element, Однако эта функция не является обычной для научных вычислений.

3