为什么argmax abs有blas子程序(ISAMAX),而argmax没有
Why is there a blas subroutine (ISAMAX) for argmax abs but none for argmax?
为什么有针对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
。然而,这种功能在科学计算中并不常见。
相关文章:
- ArduinoJson 6.15.2:JsonObject没有命名类型
- 如果没有malloc,链表实现将失败
- 数组索引的值没有增加
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 在没有太多条件句的情况下,我如何避免被零除
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 变量没有改变?通过向量的函数调用
- 没有名称的C++模板参数
- 在线编译器中的分段C++没有打印消息
- 没有为自己的结构调用列表推回方法
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 没有用于初始化C++中的变量模板的匹配构造函数
- 调用'begin(int [n])'没有匹配函数
- 使用C++程序合并排序没有得到正确的输出
- 为什么在这个代码结束循环中没有得到结束
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 用MacOS Mojave编译C++:致命错误:mpi.h:没有这样的文件或目录
- 为什么argmax abs有blas子程序(ISAMAX),而argmax没有