为什么argmax abs有blas子程序(ISAMAX),而argmax没有

Why is there a blas subroutine (ISAMAX) for argmax abs but none for argmax?

本文关键字:argmax 没有 ISAMAX 子程序 abs blas 为什么      更新时间:2023-10-16

为什么有针对argmax abs而没有针对argmax的blas子程序ISAMAX?

在使用带有编译器优化标志-O3的std::max_element的C++中,我获得的速度与blas_isamax相当(16毫秒vs 9毫秒),因此目前我的问题更多的是出于兴趣,而不是出于速度需求。

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

仅举一个例子,在LU因子分解中,获得向量的最大幅度元素对于枢轴选择是必要的,这是线性代数最基本的工作之一。相比之下,线性代数基本上不需要得到max元素,这就是为什么它不是BLAS运算之一的原因。

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

BLAS库是一个科学计算库,它是与LAPACK并行设计的。ISAMAX子程序利用向量的无穷大范数。有关更多信息,您可以参考维基百科的链接。许多LAPACK算法都需要无穷范数,因此BLAS库定义了这个标准子程序。

另一方面,在一般计算中广泛需要向量的最大值,C++引入了std::max_element。然而,这种功能在科学计算中并不常见。