现代 C++ 编程实战
吴咏炜
前 Intel 资深软件架构师
34196 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 51 讲
加餐 (1讲)
现代 C++ 编程实战
15
15
1.0x
00:00/00:00
登录|注册

23 | 数字计算:介绍线性代数和数值计算库

Choosing a multi-precision library for C++—a critique
The GNU MP bignum library
Boost.Multiprecision
Expression templates
Armadillo
mir-glas
Intel Math Kernel Library
OpenBLAS
ARPACK
LAPACK
Basic Linear Algebra Subprograms
平台细节
表达式模板
性能
接口易用性
Mir GLAS
Intel MKL
OpenBLAS
ARPACK
LAPACK
BLAS
参考资料
课后思考
内容小结
Boost.Multiprecision
Armadillo
参考文章

该思维导图由 AI 生成,仅供参考

你好,我是吴咏炜。
科学计算在今天已经完全可以使用 C++ 了。我不是从事科学计算这一领域的工作的,不过,在工作中也多多少少接触到了一些计算相关的库。今天,我就给你介绍几个有用的计算库。

Armadillo

说到计算,你可能首先会想到矩阵、矢量这些东西吧?这些计算,确实就是科学计算中的常见内容了。这些领域的标准,即是一些 Fortran 库定下的,如:
BLAS [1]
LAPACK [2]
ARPACK [3]
它们的实现倒不一定用 Fortran,尤其是 BLAS:
OpenBLAS [4] 是用汇编和 C 语言写的
Intel MKL [5] 有针对 Intel 的特定 CPU 指令集进行优化的汇编代码
Mir GLAS [6] 是用 D 语言写的
不管实现的方法是哪一种,暴露出来的函数名字是这个样子的:
ddot
dgemv
dsyrk
sgemm
……
这个接口的唯一好处,应该就是,它是跨语言并且跨实现的😅。所以,使用这些函数时,你可以切换不同的实现,而不需要更改代码。唯一需要修改的,通常就是链接库的名字或位置而已。
假设我们需要做一个简单的矩阵运算,对一个矢量进行旋转:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

C++科学计算库Armadillo和Boost.Multiprecision的文章深入介绍了它们在线性代数和高精度计算方面的应用。首先展示了Armadillo库的直观性和简洁性,并详细列举了其功能特点,包括支持稀疏矩阵、按元素的运算等。同时,介绍了Boost.Multiprecision库的高精度计算需求和易用性,突出了其优势。此外,还提到了表达式模板技术的应用,以及Armadillo库对BLAS和LAPACK的依赖。总的来说,文章内容丰富,涵盖了科学计算库的技术特点和实际应用,对读者快速了解C++科学计算库具有重要参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《现代 C++ 编程实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(7)

  • 最新
  • 精选
  • 廖熊猫
    易用的东西灵活性就稍微弱一些,在能快速完成业务的时候,我还是比较偏向易用性,一查文档马上就可以用起来,真的出现性能瓶颈的时候再去折腾复杂性能好的东西。 给需要学习线性代数的小伙伴推荐一个教材:http://textbooks.math.gatech.edu/ila/index.html 需要点英语基础才行。

    作者回复: 我的观点和你差不多……🤗 那个在线教材真棒!谢谢推荐。

    2020-01-17
    14
  • 三味
    当然更偏向易用性。实现更重要。一个算法不确定是否能实现,先从易用的库开始快速迭代算法实现。优化是最后要考虑的。 还有就是在选择第三方库的时候,我倾向于选择纯头文件的库。比如Eigen3。我用Eigen3无非就是矩阵计算,能够快速求解线性方程组的解就好,并没有高次方程求根这种(其实也有,为了求一个三次方程就要引用一个库,我选择找一个现成的实现)。 当然,开篇的例子的话,我肯定也不会用Eigen去求,三维空间下的数学,还是交给glm这种用于渲染的数学库比较好,纯头文件,易于集成,而且简单好用。 当然我说的只是图形渲染中常用的一些库。貌似还真没看到过图形学方面代码用犰狳库的,因为用不到吧。 最后,我看了一下老师最后列出来的博客,提到了From Mathematics to Generic Programming,哈哈,我手头上也有一本这书!当然是中文版的。。。《数学与泛型编程》。。当时以为是接触泛型编程,顺便了解一些数学才买的。结果买来之后第六章群那里我实在看不动了。。其实第五章我就看着老吃力了。。。即使如此,也感觉收获不小。比如,看这本书之前我一直不知道质数筛。。还有古人如何计算乘法,如何计算最大公约数等等。回头我还要继续啃一下这本书。

    作者回复: 看来你是真正搞计算的啊……我是偶尔碰一下而已。 《数学与泛型编程》绝对是好书。这本已经算是作者的另一本书的简化版本了(那本书更抽象,我也只啃了个开头而已了)。对于喜欢数学的程序员,我绝对大力推荐。

    2020-01-17
    5
  • 花晨少年
    科学计算这块最近几年突然热起来了,在调研xdl深度学习框架时,推理引擎cpu版本用的就是mkl库做各种矩阵运算,但是可能还是gpu版本的cuda库应用更广泛一些,听说cuda编程挺难的,需要了解很多异构硬件的细节。

    作者回复: 如何用 C++ 做异构计算,这是一个新领域。可以留意一下 SYCL。

    2020-01-18
    2
  • aL
    我之前用的eigen,感觉还不错,如果涉及到大规模数值运算的话,还是得上gpu吧!

    作者回复: 是的,异构计算也是新的重要方向。SYCL 就是其中之一,可以了解一下。

    2020-02-08
    1
  • Milittle
    专栏深度确实可以,我之前在做Matlab代码转C++的时候,可以说armadillo是一个比较好用的工具(最起码性能还过得去)。这个老师在专栏里面没有提到,我说一下,可以给小伙伴们提供一点帮助~万一你哪天需要把Matlab的算法做一个快速实现呢?

    作者回复: 嗯,看到过这种说法。我没啥体验,因为我不用MatLab。

    2020-03-19
  • Geek_dddde9
    工作中感觉eigen更友好一些
    2021-07-01
  • 我发现留言的都是大佬。学习了学习了。
    2020-02-01
收起评论
显示
设置
留言
7
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部