MPI为什么这个简单的循环不起作用?

时间:2014-02-12 21:15:28

标签: c mpi

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "mpi.h"
#define BUFFER_SIZE 65536

int main (int argc, char **argv) {
        int int_buff[BUFFER_SIZE];
        char char_buff[BUFFER_SIZE];
        int n, myid;
        int buflen, ntimes;
        double starttime, endtime;

        MPI_Status status;
        MPI_Init(&argc, &argv);
        MPI_Comm_rank(MPI_COMM_WORLD, &myid);
        buflen = 2;

        if (myid == 0) {
                int i;
                for (i = 0 ; i++ ; i < 500  ) {
                printf("Lala");
                }
        }
        MPI_Finalize();
        return EXIT_SUCCESS;
}

我正在使用mpiexec --hostfile hostfile -np 2 ping_pong。什么都没有打印,但是当我更改循环顶部for(;;)它有效时,为什么会这样?

3 个答案:

答案 0 :(得分:5)

for循环中的表达式错误。 for loop的语法是

 for(INITIALIZATION; CONDITION; INCREMENT/DECREMENT)
     Statement 

更改

for (i = 0 ; i++ ; i < 500  )  

for (i = 0 ; i < 500; i++  )

答案 1 :(得分:3)

在您的代码中,您有:

for (i = 0 ; i++ ; i < 500)

你混淆了i ++(在每次迭代时该做什么)和i&lt; 500(迭代条件)。尝试:

for (i = 0 ; i < 500; i++)

答案 2 :(得分:1)

如其他答案所述,你的for循环颠倒了条件和增量部分。 有趣的是,这仍然是一段有效的代码。

您的代码实际执行的操作是第一次尝试进入循环时检查条件,执行增量(具有实际递增i的副作用,但返回预递增值。增量部分只需执行与500的比较,结果将被忽略。

由于i从0开始,你的循环条件评估为false并立即退出