版权声明:博主原创文章属私人所有,未经允许 不可转发和使用 https://blog.csdn.net/a1066196847/article/details/89523705
main.cpp
#include "iostream"
#include "mpi.h"
using namespace std;
// 写一个贪吃蛇-然后蛇头撞蛇尾死掉的程序
void tanchishe(){
// 初始化
MPI_Init(NULL, NULL);
// 定义进程号 rank 秩
int world_rank;
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
// 找到一共有多少个 进程
int world_size;
MPI_Comm_size(MPI_COMM_WORLD, &world_size);
int token;
if(world_size == 0){
MPI_Recv(&token, 1, MPI_INT, world_rank-1, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
cout << "Process "<<world_rank<<" received block "<<token<<" from process "<<world_rank-1;
}else{
token=-1;
}
MPI_Send(&token, 1, MPI_INT, (world_rank+1)%world_size, 0, MPI_COMM_WORLD);
if(world_rank == 0){
MPI_Recv(&token, 1, MPI_INT, world_size-1, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
cout << "Process "<<world_rank<<" received block "<<token<<" from process "<<world_rank-1;
}
MPI_Finalize();
}
int main() {
// // 第一个helloworld程序
// first();
// //尝试接受API
// send();
// // 用学习到的接受、发送 写一段程序
// fun();
// 用学习到的接受、发送 写一个贪吃蛇最后死掉的程序
tanchishe();
}
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