我有一个 n 平方循环,我想将其分成块以同时运行。循环如下所示:
for i = n to m
for j = i to m
// Do something
根据评论编辑: n = 0,m = 60000 的具体示例:
for i = 0 to 60000
for j = i to 60000
所以,我并没有真正进行 n 平方迭代,而是 n 平方 / 2。随着 i 变大,内部外观中的迭代次数变得更少。
假设 n = 0 和 m = 60000,我想将其分解为 5 个单独的进程以并行运行。如何选择 n 和 m 以使 5 个不同的过程具有相等的迭代?
我知道 60000 / 5 = 12000。所以,我们可以这样分解:
0 - 11999
12000 - 23999
24000 - 35999
36000 - 47999
48000 - 60000
想法是将其分解为具有相同迭代次数的 x 个循环(此处 x 为 5)。像这样的东西:
for i = 0 to 11999
for j = i to 60000
for i = 12000 to 23999
for j = i to 60000
for i = 24000 to 35999
for j = i to 60000
for i = 36000 to 47999
for j = i to 60000
for i = 48000 to 60000
for j = i to 60000
但是,最后的循环将进行较少的比较。所以,这不是正确的答案。
似乎这是一个微积分问题,您需要计算出曲线下的相等面积。但是,这个数学对我来说已经生疏了大约 20 年。当然,我正在寻找一个给定 n = 0 和 m > 0 的通用解决方案。
编辑2: 澄清上述问题。
谢谢