【发布时间】:2015-10-16 10:47:41
【问题描述】:
我在 Ubuntu 14.04 64bit 的硕士论文中成功使用了 Armadillo 和 OpenBLAS(安装和未安装 Armadillo)。性能非常令人印象深刻——我的代码主要由基本的矩阵运算组成。所有这些都是使用所有可用线程执行的。
现在我尝试在 Visual Studio 2013 的 Windows 7 64 位机器上使用 Armadillo 和 OpenBLAS。我在网上找到了一些帮助并成功添加了 PThread 库。代码本身可以工作,但性能很差。我使用 1000x1000 矩阵测试了三个基本操作——加法、乘法和逐元素乘法。在这三个中,只有经典乘法会使用所有 CPU 能力。另外两个使用 25% 的 CPU,这表明它们在单线程上运行。
对于 Ubuntu,我没有遇到过这种行为。有人有什么建议吗?我没有看到有人遇到类似问题的任何链接。
【问题讨论】:
-
正如 Janneb 指出的那样,由于算术运算的数量与 I/O 的数量在同一数量级上,线性时间算法(如矩阵加法和逐点乘法)通常受到带宽限制操作(加载和存储)。您所说的经典乘法(BLAS 中的矩阵乘法或 GEMM)是一种 O(n^3) 操作,并且有很多内容可以让多个处理器解决这个问题,而 I/O 不会占主导地位。跨度>
-
感谢您的补充意见,您让我更清楚了。
标签: c++ multithreading armadillo openblas