为什么argmax abs有blas子程序(ISAMAX)但argmax没有?

new*_*ing 4 c++ blas absolute-value lapack argmax

为什么有BLAS子程序ISAMAX为argmax ABS而不是argmax

在使用std :: max_element和编译器优化标志的C++中,-O3我的速度与blas_isamax(16 ms vs 9 ms)相当,所以目前我的问题更多的是出于对速度的需求而不是出于兴趣.

Ste*_*non 5

BLAS旨在提供实现常见线性代数运算所必需的低级程序(毕竟它 "基本线性代数子程序").

仅举几个用途中的一个,获取矢量的最大幅度元素对于LU分解中的枢轴选择是必要的,LU分解是线性代数中最基本的工具之一.相比之下,获得max元素基本上对于线性代数来说基本上是不必要的,这就是为什么它不是BLAS操作之一*.

(*)实际上建议在2001年BLAS技术论坛标准中将最大操作添加到BLAS中,但尚未广泛采用.