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

时间:2015-02-10 16:08:48

标签: c++ lapack blas absolute-value argmax

为什么argmax abs有blas子例程ISAMAXargmax没有?{/ p>

在C ++中使用带有编译器优化标志-O3的{​​{3}}我的速度可与blas_isamax(16 ms vs 9 ms)相媲美,所以目前我的问题更多的是出于兴趣而不是需要速度。

2 个答案:

答案 0 :(得分:5)

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

仅仅列举众多用途中的一种,在LU factorization中进行枢轴选择需要获得矢量的最大幅度元素,这是线性代数最基本的工作之一。相比之下,获得max元素基本上对于线性代数来说基本上是不必要的,这就是为什么它不是BLAS操作之一*。

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

答案 1 :(得分:3)

BLAS库是一个科学计算库,它与LAPACK并行设计。 ISAMAX子程序利用向量的无穷大范数。有关详细信息,请参阅wikipedia's link。许多LAPACK算法需要无穷大规范,因此BLAS库定义了这个标准子程序。

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