根据先前的值运行矩阵的并行代码

时间:2013-05-01 02:49:24

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

我有一个矩阵,必须从矩阵内的先前值并行计算。如果你们中的任何人能够给我一个如何完成它的提示,那将是很好的。假设我有一个类似

的矩阵
| 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)三个相邻元素计算。它将是其值的最小值,依此类推。每个元素都依赖于其前三个邻居来计算其值。任何人都可以给我一个暗示如何在并行中完成它。谢谢。

1 个答案:

答案 0 :(得分:0)

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

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

我在原理图中表示了通过号码 0 =初始化,1 =第一步,2 =第二步......

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

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