【问题标题】:Solve multiple small linear systems parallelly并行求解多个小型线性系统
【发布时间】:2018-10-03 13:26:08
【问题描述】:

我想在算法的每次迭代中求解 10 个线性系统 (Ax = b)。

每个系统的 A 约为 10 x 11(超定)。

CPU 有 8 个核心。

如果我要求每个 CPU 解决 10 个线性系统中的一个,则 6 个 cpu 必须等待解决最后 2 个系统。

如果我用多线程求解器一个一个地求解每个系统,性能会很差吗?我担心错误共享,因为矩阵 A 很小。

Eigen 是否有针对这种情况的多线程求解器?

再次感谢。

【问题讨论】:

  • 我应该用零填充 b 和 A 吗?
  • 每个系统的A都一样吗?
  • 不一样的A.
  • Padding A 给它的大小可能是你架构上 SIMD 数据包大小的倍数(例如,如果你使用浮点数和 AVX,则为 8 的倍数)——但这取决于您使用的求解器(当然,如果有意义,您需要进行基准测试)。

标签: linear-algebra eigen eigen3


【解决方案1】:

尝试在如此小的问题 (10 x 11) 中利用多线程只会减慢速度。如果您想比并行运行 10 个求解做得更好,请尝试在您的管道中找到更多并行任务。

【讨论】:

  • 可以与给定问题并行化的一个小事情是拆分分解和求解(首先在 8 个线程中分解,然后在 2 个线程中分解,在 6 个线程中求解前 8 个系统它们不会分解最后两个系统)——但手动执行此操作可能是过早的微优化。
猜你喜欢
  • 2017-03-23
  • 2012-03-31
  • 1970-01-01
  • 2017-12-13
  • 1970-01-01
  • 2019-08-14
  • 2017-12-28
  • 2017-03-09
相关资源
最近更新 更多