IT이야기

MPI 통신에 MPI_B캐스트 사용

cyworld 2022. 4. 19. 22:33
반응형

MPI 통신에 MPI_B캐스트 사용

MPI_Bcast를 사용하여 루트 노드에서 다른 모든 노드로 메시지를 브로드캐스트하려고 함.하지만 내가 이 프로그램을 실행할 때마다 항상 시작에 걸려.뭐가 문제인지 아는 사람 있어?

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

int main(int argc, char** argv) {
        int rank;
        int buf;
        MPI_Status status;
        MPI_Init(&argc, &argv);
        MPI_Comm_rank(MPI_COMM_WORLD, &rank);

        if(rank == 0) {
                buf = 777;
                MPI_Bcast(&buf, 1, MPI_INT, 0, MPI_COMM_WORLD);
        }
        else {
                MPI_Recv(&buf, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &status);
                printf("rank %d receiving received %d\n", rank, buf);
        }

        MPI_Finalize();
        return 0;
}

이것은 MPI에 익숙하지 않은 사람들에게 공통적인 혼란의 원천이다.브로드캐스트에서 전송된 데이터를 수신하는 데 사용하는 것이 아니라 를 사용하는 경우.

네가 원하는 건 이것이야

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

int main(int argc, char** argv) {
        int rank;
        int buf;
        const int root=0;

        MPI_Init(&argc, &argv);
        MPI_Comm_rank(MPI_COMM_WORLD, &rank);

        if(rank == root) {
           buf = 777;
        }

        printf("[%d]: Before Bcast, buf is %d\n", rank, buf);

        /* everyone calls bcast, data is taken from root and ends up in everyone's buf */
        MPI_Bcast(&buf, 1, MPI_INT, root, MPI_COMM_WORLD);

        printf("[%d]: After Bcast, buf is %d\n", rank, buf);

        MPI_Finalize();
        return 0;
}

MPI 집단 통신의 경우, 모든 사람이 참여해야 한다; 모든 사람은 Bcast, 또는 Allreduce, 또는 당신이 가진 것을 불러야 한다. (그래서 Bcast 루틴에는 "루트"를 명시하는 매개변수가 있다. 또는 누가 전송을 하고 있는가; 만약 Bcast라고 불리는 송신자만 있다면, 당신은 이것이 필요하지 않을 것이다.)수신자를 포함한 모든 사람이 방송을 부른다; 수신자는 수신자만 게시하는 것이 아니다.

그 이유는 집단 운영이 통신에 모든 사람을 참여시킬 수 있기 때문에, 통신 패턴을 최적화하기 위한 범위(예: 루트 프로세서가 다른 모든 등급에 걸쳐 루핑을 하고 전송을 하는 것)가 아니라, 어떤 일이 일어나기를 원하는지(모든 사람이 한 프로세스의 데이터를 얻는다)를 명시하기 위해서(예: 루트 프로세서가 다른 모든 등급에 걸쳐서 루프를 하고 전송을 한다)가 되기 때문이다.필요한 계층적 통신log(P)…보다 오히려 스텝을 밟다PP 프로세스에 대한 단계).

MPI_Bcast집합적 운영이며, 완료하기 위해서는 모든 과정에 의해 호출되어야 한다.

그리고 전화할 필요가 없다.MPI_Recv사용할 때MPI_Bcast. 당신에게 도움이 될 수 있는 게시물이 있다. 여기를 클릭하십시오.

참조URL: https://stackoverflow.com/questions/7864075/using-mpi-bcast-for-mpi-communication

반응형