【问题标题】:Best parallel method for calculating the integral of a 2D function计算二维函数积分的最佳并行方法
【发布时间】:2011-10-18 09:42:04
【问题描述】:

在一些处理数字的程序中,我有一个函数,它在三个维度上只能是 1 或 0。我事先不知道函数,但我需要知道函数的总“表面”等于零。在类似的问题中,我可以在英国地图的 2D 表示上绘制一个矩形。该函数在海上等于 0,在地球上等于 1。我需要知道总水面。我想知道执行此操作的最佳并行算法或方法是什么。

我首先想到了以下方法; a) 将 2D 地图区域划分为矩形网格。对于属于每个单元格中心的每个点,检查它是否是水之土。这可以并行完成。在程序结束时,我将得到一个包含 1 和 0 的矩阵。我会得到一些精确的区域。现在我想提高这个精度,所以b)选择零和一之间边界区域的单元格(这样做的最佳标准是什么?)并在这些单元格中,再次将它们分成连续的单元格并重复该过程直到获得所需的精度。我想在这个过程中,关键参数是每个新阶段的网格大小,以及如何存储和检查属于边界区域的单元格。最后,从计算的角度来看,最优化的方法是执行最少检查次数以获得具有所需精度的总表面值的方法。

【问题讨论】:

  • 你对地图有什么规定吗?例如,如果您有同质区域,则不必检查给定区域中的像素。如果您有一些规则,您可以使用公式将地图的某些部分排除在检查之外,该公式在数学上描述了区域表面,您可以对地图中不适用您的规则的部分使用近似值。
  • 我明白你的意思,但我没有那个规则(例如,这可能适用于真实的英格兰地图)
  • 好的,这意味着您需要一个近似值。我认为这两个答案都是合理的。请记住,您想要的精度越高,需要的操作就越多,您想要的速度越大,获得的精度就越低。没有精确而快速的“神奇”解决方案。

标签: algorithm integration parallel-processing numerical-methods


【解决方案1】:

首先,您似乎在谈论 3D 功能,例如对于两个坐标 x 和 y,如果 (x, y) 属于海洋,则为 f(x, y) = 0,否则为 f(x, y) = 1

话虽如此,您可以使用以下简单方法。

  1. 将矩形分割成 N 个子矩形,其中 N 是 您的处理器(或处理器内核,或集群中的节点等)
  2. 对于每个子矩形,使用Monte Carlo method 计算 水面。
  3. 将 N 值相加即可计算出水面的总面积。

当然,您可以使用任何其他方法来计算曲面,Mothe Carlo 只是一个示例。但思路是一样的:将问题细分为 N 个子问题,并行求解,然后合并结果。

更新:对于蒙特卡洛方法,误差估计值减少 1/sqrt(N),其中 N 是样本数。例如,要将误差降低 2 倍,需要将样本点数增加 4 倍。

【讨论】:

  • 谢谢。是的,我同意你的观点,但关键是如何有一种非常有效的方法,从计算的角度来看,所以我会尽可能少地进行划分,等等。在你的回答中没有关于速度或准确性的细节,但我会看看
  • 在这个阶段很难谈论速度,因为我对你的地图一无所知。但很明显,如果您的地图是大小为 M x N 的位图,那么为了 100% 准确,您必须检查地图的每个点,这给了我们 O(M*N) 的复杂度。当然,要最小化它,您可以使用近似值。
  • 我认为MC方法不是提高准确率的最佳方法
  • 当然不是,但它很容易在您的真实数据上实现和衡量其性能。看起来您不需要额外的优化。
  • 我知道 MC 方法,我的算法确实需要高性能,这就是我在这里问的原因
【解决方案2】:

我相信你的态度是合理的。

选择位于 0 和 1 之间边界区域的单元格(这样做的最佳标准是什么?)

每个单元有 8 个分类单元 (3x3) 或 24 个分类单元 (5x5)。如果 9 或 25 个单元中至少有一个包含土地,并且这些单元中至少有一个包含水 - 提高整个单元块(3x3 或 5x5)的准确度并再次查询。

当准确度足够好时——不用分裂,只需将土地面积加到总和中即可。

效率

使用生产者-消费者队列。创建 n 个线程,其中 n 等于您机器上的内核数。所有线程都应该做同样的工作:

  • 从队列中取出一个地理单元
  • 如果单元的面积仍然很大 - 将其划分为 3x3 或 5x5 的单元,为每个拆分的单元检查陆地/海洋。如果有混合 - 将所有这些单元格排入队列。如果它只降落:只需添加区域。只有海:什么都不做。

首先,只需将整个区域划分为合理大小的单元格并将它们全部排入队列。

您还可以通过在混合时不添加所有 9 或 25 个单元格来优化,而是检查模式(仅顶部/底部/左侧/右侧单元格)。

编辑:

在准确性和性能之间进行权衡:如果初始像元大小太大,您可能会错过小湖泊或小岛屿。因此,优化标准应该是:从可以确保足够准确度的尽可能大的单元开始。

【讨论】:

  • 是的,我同意你的看法,但我担心的是,我怎样才能以最少的计算次数来做到这一点;即,哪些最佳数字适用于总初始细胞数、连续分裂以及原因
  • @Lior:也许OP的问题是如何根据精度计算所需的网格单元数。例如,给定精度 0.05,细胞数(或蒙特卡洛随机点)是多少?
  • 使用我建议的确定性方法,任何尺寸边小于网格分辨率的东西都可能被遗漏。我不是在建议随机抽样,所以这很简单。
  • 好的,您给出了最佳答案,但仍有更好的选择可供探索
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-10
  • 1970-01-01
  • 2010-09-19
相关资源
最近更新 更多