mpi第三站(1) -- 学习mpi里面的接收和发送 定点MPI_Send MPI_Recv

版权声明:博主原创文章属私人所有,未经允许 不可转发和使用 https://blog.csdn.net/a1066196847/article/details/89505027
#include "iostream"
#include "mpi.h"

void send(){
    //初始化MPI环境
    MPI_Init(NULL, NULL);

    // 得到当前进程的 rank 以及整个 communicator 的大小(所有进程的数量)
    int world_rank;
    MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
    int world_size;
    MPI_Comm_size(MPI_COMM_WORLD, &world_size);

    // We are assuming at least 2 processes for this task
    if (world_size < 2) {
        fprintf(stderr, "World size must be greater than 1");
        MPI_Abort(MPI_COMM_WORLD, 1);
    }

    int number;
    // 如果当前是0进程的话,我们就初始化一个数字 -1,然后将它发送给1进程,MPI_INT是这个数字的类型
    // 1是这个消息要往哪个进程去发,0是这个消息的tag,最后的MPI_COMM_WORLD指定了要使用的communicator
    if (world_rank == 0) {
        number = -1;
        MPI_Send(&number, 1, MPI_INT, 1, 0, MPI_COMM_WORLD);
    } else if (world_rank == 1) {
        // 如果是1进程,显式指定要接受的数字,然后指定这个1进程要接受0进程的数据
        // tag也是1,communicator也是一样,然后指定了接受到的信息的状态
        MPI_Recv(&number, 1, MPI_INT, 0, 0, MPI_COMM_WORLD,
                 MPI_STATUS_IGNORE);
        printf("Process 1 received number %d from process 0\n",
               number);
    }
    MPI_Finalize();
}


int main() {
    //尝试接受API
    send();
}


博主在代码中写到了很多的注释,具体的函数详解可以去网上其他的博客看很多的知识

CMakeLists.txt

# cmake要求的最低版本
cmake_minimum_required(VERSION 3.13)
# project的名字
project(test2)
# 设置c==的标准库的版本
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(CMAKE_CXX_STANDARD 14)

# 前面的已经安装好Openmpi了,使用下面命令自动寻找地址
find_package(MPI REQUIRED)
# 然后设置到 依赖中去
include_directories(${MPI_INCLUDE_PATH})

# 设置c++ c的编译命令
SET(CMAKE_CXX_COMPILER mpicxx)
SET(CMAKE_C_COMPILER mpicc)

# 将main.cpp加入到可执行文件中去
set(SOURCE_FILES main.cpp send.cpp send.h)
add_executable(test2 ${SOURCE_FILES})



然后在目录下

mpicxx main.cpp -o main.out  先编译

 mpirun -np 2 ./main.out   再执行

就会在交互界面出现

Process 1 received number -1 from process 0

猜你喜欢

转载自blog.csdn.net/a1066196847/article/details/89505027
mpi