首页 > 解决方案 > 微分方程松弛技术的算法正确性

问题描述

我有一个多线程算法来解决微分方程的松弛问题。本质是这样的;给你一个 NxN 矩阵,并用它们的邻居的平均值反复替换值,直到它们稳定到给定的精度 P,边界除外。我想验证我为此设计的多线程算法的正确性:

  1. 对角线单元格被识别;这是通行证#1
  2. 反对角线单元被识别。这是通行证#2
  3. Pass #1 中的项目数除以要运行的进程的线程数。这给了我们每个线程必须处理的单元数,n。
  4. 对 Pass #2, m 也是如此。
  5. 每个线程从 Pass #1 中随机分配 n 个独家项目,为 Pass #2 分配 m 个项目。
  6. 线程为 Pass #1 执行它们的计算。
  7. 线程将检查 Pass #2 单元格的辅助单元格(即计算平均值所需的单元格)是否有任何变化。如果没有,他们设置一个标志。
  8. 一旦所有线程都完成了 Pass #1,它们就可以自由地移动到 Pass #2。
  9. 执行 Pass #2 的计算。
  10. 线程再次检查,但这次是通过 #1 单元格。如果标志是从步骤 7 设置的,并且此检查也成功,则计算完成并且线程将自身标记为已完成。如果不是,则从步骤 6 开始重复该过程。

为了说明我所说的对角线和反对角线单元的含义,请参见下文: 在此处输入图像描述 在此处输入图像描述

我想知道的是,当满足退出条件时,这是否保证计算完成?我问这个是因为我已经在 C 中实现了这段代码,但是我得到了一些不确定的行为,有时线程不会将值计算到所需的精度。

标签: cmultithreadingalgorithmmatrix

解决方案


推荐阅读