犰狳中的并行化

Posted

技术标签:

【中文标题】犰狳中的并行化【英文标题】:Parallelisation in Armadillo 【发布时间】:2014-03-13 19:35:50 【问题描述】:

Armadillo C++ linear algebra library documentation 说明了使用 C++ 开发库的原因之一是 "ease of parallelisation via OpenMP present in modern C++ compilers",但犰狳代码不使用 OpenMP。我怎样才能获得与犰狳并行化的好处?这是通过使用high-speed LAPACK and BLAS replacements 之一实现的吗?我的平台是 Linux,英特尔处理器,但我怀疑这个问题有一个通用的答案。

【问题讨论】:

【参考方案1】:

好吧,看来并行化确实是通过使用高速 LAPACK 和 BLAS 替换实现的。在 Ubuntu 12.04 上,我使用包管理器安装了 OpenBLAS,并从源代码构建了 Armadillo 库。 examples 文件夹中的示例已构建并运行,我可以使用 OPENBLAS_NUM_THREADS 环境变量控制内核数量。

我创建了一个小项目openblas-benchmark,它在计算各种大小矩阵的矩阵积 C=AxB 时测量 Armadillo 的性能提升,但到目前为止我只能在 2 核机器上测试它。

性能图显示,对于大于 512x512 的矩阵,执行时间减少了近 50%。请注意,两个轴都是对数的; y 轴上的每条网格线表示执行时间加倍。

【讨论】:

我的错;我没有看到 X 轴上的对数刻度。 2x就是2x,好吧。如果我是你,我会再次检查它作为正确答案:= 我做到了,谢谢 :-) 性能图通常是对数标度的,因为多项式复杂性问题在图中显示为直线,并且可以从曲线的导数中读取指数。

以上是关于犰狳中的并行化的主要内容,如果未能解决你的问题,请参考以下文章

C++ Armadillo 和 OpenMp:外积求和的并行化 - 定义 Armadillo 矩阵的约简

Spark 中的并行集合

spark中的嵌套for循环并行化

使用 OpenMP 并行化 C 中的基数排序

了解 PySpark 中的 RDD(来自并行化)

与 CUDA 中的线程和块并行化