0

我很难相信这不是一个骗局,但我不能找到任何帖子回答这个问题,所以我会尽力使它成为一个好的。向前移动n个矩阵

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

上的4×4矩阵

所以其被顺序编号如下所示:

[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 /列=列#和我%列=列#

这个工作对他给了我们像6/4 = 1的例子, 6 % 4 = 2所以6在索引[1][2] 逻辑至少是直观的,但在几次失败。

那么在NxM矩阵上能够可靠地产生期望值的索引的算法是什么?

+0

您的问题陈述很好奇。我没有看到把这个想象成二维矩阵的优点。你似乎有一个数组是循环分区的* n *处理器。也许用这种方式来解决问题将有助于你理解解决方案。 –

+0

该任务要求使用矩阵,我很确定教师将在测试中期望此算法。 – Csteele5

+0

如果你不认为这些公式在某些场合有效,你应该提供一个你认为它不能正常工作的例子。 – Sneftel

回答

1

计算指标所给出的“算法”是基于所有指标是从零开始,包括“矩阵编号”:

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列。

+0

哦,非常好,所以算法的工作,我只需要迭代时添加1到每个索引。谢谢 – Csteele5

+0

没错。并且可能还会首先从您输入的矩阵索引“i”中减去1。 –

1

您好像有一个数组循环分区到n个处理器。

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

+0

这是在这种情况下获得这些值的唯一可靠方法吗?我写了一个函数来做到这一点,但感觉就像是我避免了这个任务。 – Csteele5