c - 微分方程松弛技术的算法正确性
问题描述
我有一个多线程算法来解决微分方程的松弛问题。本质是这样的;给你一个 NxN 矩阵,并用它们的邻居的平均值反复替换值,直到它们稳定到给定的精度 P,边界除外。我想验证我为此设计的多线程算法的正确性:
- 对角线单元格被识别;这是通行证#1
- 反对角线单元被识别。这是通行证#2
- Pass #1 中的项目数除以要运行的进程的线程数。这给了我们每个线程必须处理的单元数,n。
- 对 Pass #2, m 也是如此。
- 每个线程从 Pass #1 中随机分配 n 个独家项目,为 Pass #2 分配 m 个项目。
- 线程为 Pass #1 执行它们的计算。
- 线程将检查 Pass #2 单元格的辅助单元格(即计算平均值所需的单元格)是否有任何变化。如果没有,他们设置一个标志。
- 一旦所有线程都完成了 Pass #1,它们就可以自由地移动到 Pass #2。
- 执行 Pass #2 的计算。
- 线程再次检查,但这次是通过 #1 单元格。如果标志是从步骤 7 设置的,并且此检查也成功,则计算完成并且线程将自身标记为已完成。如果不是,则从步骤 6 开始重复该过程。
我想知道的是,当满足退出条件时,这是否保证计算完成?我问这个是因为我已经在 C 中实现了这段代码,但是我得到了一些不确定的行为,有时线程不会将值计算到所需的精度。
解决方案
推荐阅读
- ios - 谷歌地图未在 Flutter 的 IOS 设备中加载
- postgresql - Phoenix Ecto 模型嵌套
- go - 为什么我的两个切片之一因“运行时错误:索引超出范围”而恐慌?
- javascript - React 中用于引导和 css 模块的模板文字
- c# - .NET Core 3.1 控制台应用程序作为 Windows 服务
- sql-server - 循环 XML 数据
- jquery - 按钮上的toggleClass动态Jquery
- docker - 为什么 nginx 没有在 Windows Server 2019 docker 容器中启动?
- javascript - jQuery Ajax 多次提交表单
- flutter - 将 Row 固定到其他 UI 小部件顶部的 Scroll View 底部