C MPI printf和发送/接收字符串

C MPI printf和发送/接收字符串,c,mpi,send,C,Mpi,Send,我是MPI的新手。我试图通过send和Recv发送字符串(稍后将是文件路径)。然而,输出很奇怪。我做错了什么 我有两台机器,名为七叶树和paso(以七叶树为主)。我的主机文件是: paso slots=4 buckeye slots=4 我编译(下面的源文件helloworld.c)时使用了以下内容: mpicc helloworld.c -o hello 然后,我运行了它: mpirun -np 8 --hostfile hosts ./hello "Test argument" 我让排

我是MPI的新手。我试图通过send和Recv发送字符串(稍后将是文件路径)。然而,输出很奇怪。我做错了什么

我有两台机器,名为七叶树和paso(以七叶树为主)。我的主机文件是:

paso slots=4
buckeye slots=4
我编译(下面的源文件helloworld.c)时使用了以下内容:

mpicc helloworld.c -o hello
然后,我运行了它:

mpirun -np 8 --hostfile hosts ./hello "Test argument"
我让排名4的人——大师——向排名5的人(同一台机器)发送信息“你好”,然后打印出来。我还打印了排名和处理者的名字。 这是源代码

#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>

int main(int argc, char** argv){
    MPI_Init(&argc, &argv);
    int world_size;
    MPI_Comm_size(MPI_COMM_WORLD, &world_size);
    int rank;
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    char processor_name[MPI_MAX_PROCESSOR_NAME];
    int name_len;
    MPI_Get_processor_name(processor_name, &name_len);

    printf("Hello world from processor %s, rank %d, out of %d processors...\n",
        processor_name, rank, world_size);
    //printf("Input argument is %s\n", argv[1]);

    /* communication */
    if (rank == 4){
        char * test  = "hello";
        printf("I am rank 4\n");
        MPI_Send(&test, 7, MPI_CHAR, 5, 0, MPI_COMM_WORLD);
    }
    else if (rank == 5){
        char * buf[10];
        MPI_Status status;
        int ierr;
        ierr = MPI_Recv(&buf, 7, MPI_CHAR, 4, 0, MPI_COMM_WORLD, &status);
        if (ierr == MPI_SUCCESS)
            printf("Rank %d (processor %s) received value %s.\n", rank, processor_name, buf);
        else   
            printf("Rank %d (processor %s) did not sucessfully receive a value!\n", rank, processor_name);
    }
    else
        printf("I'm rank %d\n", rank);
    MPI_Finalize();
}

提前非常感谢

一般来说,
MPI\u发送(&test,…)
应该是
MPI\u发送(test,…)
MPI\u Send
的第一个参数是
const void*buf
,只有一个
*
。使用
-Wall
编译时,我会收到有关printf语句的警告。。。但是您传递的参数来自
char*test=“hello”已经是指向只读数据的指针。@WeatherVane O yea。我做了MPI_发送(测试,…),但仍然得到相同的结果。fwiw
“hello”
只有6
MPI_字符长度。(但发送不太可能造成任何伤害)
Hello world from processor buckeye, rank 4, out of 8 processors...
I am rank 4
Hello world from processor buckeye, rank 5, out of 8 processors...
Rank 5 (processor buckeye) received value a
                                           @.
Hello world from processor buckeye, rank 6, out of 8 processors...
I'm rank 6
Hello world from processor buckeye, rank 7, out of 8 processors...
I'm rank 7
Hello world from processor paso, rank 0, out of 8 processors
Hello world from processor paso, rank 1, out of 8 processors
Hello world from processor paso, rank 2, out of 8 processors
Hello world from processor paso, rank 3, out of 8 processors