将for循环更改为阻塞分区

changing for loop to block parition

本文关键字:分区 for 循环      更新时间:2023-10-16

我想改变for循环为块方案

我有这样一个for循环:假设n = 8And node = 4

n: [1] [2] [3] [4] [5] [6] [7] [8]

id: 0 1 2 3 0 1 2 3

id = 0;
while (id < node){
for (i = id + 1; i <= n; i = i + node)
     {
         //do stuff here
         id = i; 
     }enter code here
id+1;
}//end while

我想让它这样做:

n = 8节点= 4

n: [1] [2] [3] [4] [5] [6] [7] [8]

id: 0 0 1 1 2 2 3 3

n = 16节点= 4

n:[1][2][3][4][5][6][7][8]…[13] [14] [15] [16]

id: 0 0 0 0 1 1 1…3 3 3 3

n = 8节点= 2

n: [1] [2] [3] [4] [5] [6] [7] [8]

id: 0 0 0 0 1 1 1 1

,其中每个id分配给top n,如示例

我有这个,但它只适用于特定的场景n= 8 &节点= 4

...
b = id + 1
for (i = n-(n-(id+b)); i <= (n-(n-(id+b))+1); i+= 1)
...

我可能误解了你的问题,但这给出了id的输出,如你所描述的:

    for (int i = 0; i < n; i++)
    {
        id = i / (n / node);
        // do stuff
    }

我使用n从0开始,但如果您从1开始,只需通过将所有内容都设置为n-1来调整计算

试试下面的代码:

int node = 4;
int n = 16;
for (id = 0; id < node; id++) {
    for(int j = 0; j < n / node; j++) {
        //do some stuff
    }
}

或者您可以使用以下代码:

int node = 4;
int n = 16;
for (int i = 0; i < node; i++) {
    id = i;
    for(int j = 0; j < n / node; j++) {
        //do some stuff
    }
}