我需要解决类似于方程Ax = b的问题,其中A是一个非常大(但稀疏)的矩阵。 (它的稀疏度为97%;但其大小约为1,000,000,000 x 33,000,000)
没有陷入不必要的细节,解决方案实际上是一个迭代解决方案,其中一个“猜测X”,然后一个插回猜测的“X”回到方程,评估它,然后重新确定“X的下一个版本”。矩阵A和向量“b”在这些迭代中不改变。 (可能有1,000到100,000次迭代)。
我关心的是如何以这样的方式编写这个迭代逻辑,即我们不会在每次迭代中继续复制矩阵A(甚至是向量B)。 (理论上,甚至向量“x”也不需要在每次迭代中重新实例化,但是成本非常小。)如果这是一个单线程应用程序,那么实现逻辑非常容易。但我不确定如何在数据流架构中有效地做到这一点。 (我本能地觉得也许“侧面输入”在这里可能会有所帮助;或者,不是传递矩阵A的部分来回并重新复制数据,也许只是传递指向对象的指针?)
答案 0 :(得分:1)
通常,您最终会复制数据,因为不同的工作人员在不同时间需要不同部分的整体数据。 如果您可以将整体问题分解为足够小的部分,每个部分都可以在内存中进行迭代,那么您可以降低通信成本。此外,如果可以将每次迭代表示为增量更新,使得delta甚至比数据更稀疏,那么您也可以改进。