向前移动和矩阵中的索引

move forward n indeces in matrix

我很难相信这不是骗局,但我找不到 任何 回答这个问题的帖子,所以我会尽力做到这一点一个不错的。

问题本质上是这样的:你有一个大小为 Row X Column 的矩阵,你的处理器数量是 P。分区的最大大小(每个处理器分配的元素数)为 ((Rows*Columns)/processors)+1,并且您必须执行一些逻辑以确保您不会越界。每个处理器都分配了一个起点,并且必须向前跳转 P 个索引。

所以在一个按顺序编号的 4x4 矩阵上,如下所示:

[1] [2] [3] [4]
[5] [6] [7] [8]
[9] [10][11][12]
[13][14][15][16]

ID 为 0 的处理器将获得 1、4、7、10、13 和 16。(最大分区大小)。

我导师给我们的算法是这样的:

i / columns = row# and i % columns = column#

这适用于他给我们的示例,例如 6 / 4 = 16 % 4 = 2,所以 6 位于索引 [1][2] 逻辑至少是直观的,但有几次失败了。

那么什么算法可以可靠地在 NxM 矩阵上生成所需值的索引?

您似乎有一个在 n 个处理器上循环分区的数组。

作为解决方案的提示(因为这是 class 的工作),将每个矩阵位置转换为数组中的一个位置,比如 i。然后对这个数字进行算术运算。

计算指数的"algorithm"是基于所有指数都是从零开始的,包括"matrix numbering":

    0  1  2  3

0   0  1  2  3
1   4  5  6  7
2   8  9 10 11
3  12 13 14 15

现在你可以看到 6 确实在第 1 行第 2 列。