【问题标题】:Run parallel code for a matrix dependent on previous values为依赖于先前值的矩阵运行并行代码
【发布时间】:2013-04-25 02:12:35
【问题描述】:

我有一个矩阵,必须从矩阵内的先前值并行计算。如果你们中的任何人都可以给我一个提示,那就太好了。假设我有一个像

这样的矩阵
| 4 5 6 7 8|
| 5 5 5 5 5|
| 6 6 6 6 6|
| 9 9 9 9 9|

此处的值将计算为位置 (1,1) 将从 (0,0)、(0,1) 和 (1,0) 三个相邻元素计算。它将是其值的最小值,依此类推。每个元素都依赖于其前三个邻居来计算其值。谁能给我一个提示如何并行完成。谢谢。

【问题讨论】:

  • 我发布的代码here 将使用 3D(立方)体积在 3D 矩阵中的每个位置找到最小值。将其简化为 2D 案例应该不会太难。
  • 这是并行计算的肮脏秘密。很多现实世界的算法都有内部依赖,会阻碍或阻碍并行性。

标签: c++ visual-studio-2010 visual-c++ matrix cuda


【解决方案1】:

对于这种依赖,您可以并行计算反对角线的元素。您必须初始化最顶行和最左边的列,然后逐步为每个反对角线进行:

0 0 0 0 .. 0 1 2 3 .. 0 2 3 .. 0 3 ... ..

我在示意图中表示通行证号 0 = 初始化,1 = 第一步,2= 第二步..

例如,您可以并行计算步骤 2 中的每个单元,然后并行计算步骤 3 中的每个单元,依此类推,就像波前扫描矩阵一样(这是一种已知技术)

不幸的是,由于单元格之间存在数据依赖关系,因此您需要等待该步骤完成才能继续进行下一个步骤。 此外,由于元素的数量是可变的,因此此方法将无法充分利用某些处理器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 2020-02-29
    • 1970-01-01
    • 2018-09-30
    • 2016-05-29
    • 1970-01-01
    • 2021-05-04
    相关资源
    最近更新 更多