Почему есть Блас подпрограмма ISAMAX для argmax abs, но не для Argmax ?
В C ++ использую станд :: max_element с флагом оптимизации компилятора -O3
Я получаю скорости, сравнимые с blas_isamax (16 мс против 9 мс), поэтому в данный момент мой вопрос больше интересует, чем нуждается в скорости.
BLAS был разработан для обеспечения низкоуровневых процедур, необходимых для реализации общих операций линейной алгебры (это является «подпрограммы базовой линейной алгебры», в конце концов).
Чтобы назвать только одно из многих применений, получение элемента вектора наибольшей величины необходимо для выбора сводной точки в LU факторизация, которая является одной из самых фундаментальных рабочих лошадей линейной алгебры. Для сравнения, получение элемента max в принципе никогда не требуется для линейной алгебры, поэтому это не одна из операций BLAS *.
(*) фактически было рекомендовано добавить максимальную операцию в BLAS в стандарте технического форума BLAS 2001 года, но пока он не получил широкого распространения.
Библиотека BLAS — это научная вычислительная библиотека, разработанная параллельно с LAPACK. ISAMAX
Подпрограмма использует бесконечную норму вектора. Для получения дополнительной информации вы можете обратиться к ссылка википедии. Многие алгоритмы LAPACK нуждаются в норме бесконечности, поэтому библиотека BLAS определила эту стандартную подпрограмму.
С другой стороны, максимальное значение вектора очень необходимо в общих вычислениях и введен C ++ std::max_element
, Однако эта функция не является обычной для научных вычислений.