为什么 argmax abs 有一个blas子例程ISAMAX而不是argmax?
在使用带有编译器优化标志的std::max_element的C++ 中,-O3
我得到的速度与 blas_isamax 相当(16 毫秒对 9 毫秒),所以目前我的问题更多是出于兴趣而不是出于对速度的需要。
为什么 argmax abs 有一个blas子例程ISAMAX而不是argmax?
在使用带有编译器优化标志的std::max_element的C++ 中,-O3
我得到的速度与 blas_isamax 相当(16 毫秒对 9 毫秒),所以目前我的问题更多是出于兴趣而不是出于对速度的需要。
BLAS 旨在提供实现常见线性代数运算所需的低级例程(毕竟它是“基本线性代数子程序”)。
仅举其中一种用途,获取向量的最大数量元素对于LU 分解中的枢轴选择是必要的,这是线性代数最基本的主力之一。相比之下,线性代数基本上不需要获取最大元素,这就是为什么它不是 BLAS 操作之一*。
(*) 实际上,在 2001 年 BLAS 技术论坛标准中建议将最大操作添加到 BLAS,但尚未得到广泛采用。
BLAS 库是一个科学计算库,它与 LAPACK 并行设计。该ISAMAX
子程序利用向量的无穷范数。有关更多信息,您可以参考维基百科的链接。许多 LAPACK 算法需要无穷范数,所以 BLAS 库定义了这个标准子程序。
另一方面,在通用计算和引入的 C++ 中广泛需要向量的最大值std::max_element
。然而,这个函数在科学计算中并不常见。