Я изучаю MPI. У меня есть две машины Windows, на каждой из которых установлен VS2015, и я установил Microsoft HPC Pack 2012, Microsoft HPC Pack 2012 SDK 8.1, Microsoft MPI 8.1, и я могу запустить следующий код на каждой машине отдельно.
Я хочу соединить две машины для связи через MPI и запустить этот код, имея возможность указать, какой ID процесса выполняется на какой машине. Каков следующий шаг для достижения этого?
#include<iostream>
#include "mpi.h"#include <omp.h>
using namespace std;
int numOfProc, id, array_size, portion;
int *arr = NULL;
MPI_Status status;
const static int tag = 1;int main(int argc, char *argv[])
{
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numOfProc);
MPI_Comm_rank(MPI_COMM_WORLD, &id);
cout << "Hello from Process # " << id << '\n';
if (id == 0)//master
{
cin >> array_size;
arr = new int[array_size];
for (int i = 0; i < array_size; i++)
{
arr[i] = i + 1;
}
portion = array_size / numOfProc;
for (int p = 1; p < numOfProc; p++)
{
MPI_Send(&portion, 1, MPI_INT, p, tag, MPI_COMM_WORLD);
MPI_Send(&arr[(p - 1)*portion], portion, MPI_INT, p, tag, MPI_COMM_WORLD);
}
}
else // slaves
{
//cout << "Hello from Process # " << id << '\n';
MPI_Recv(&portion, 1, MPI_INT, 0, tag, MPI_COMM_WORLD, &status);
arr = new int[portion];
MPI_Recv(arr, portion, MPI_INT, 0, tag, MPI_COMM_WORLD, &status);omp_set_num_threads(2);
#pragma omp parallel for
for (int i = 0; i < portion; i++)
{
cout << "Thread [" << omp_get_thread_num() << "] is printing number " << arr[i] << "." << endl;
}
}
MPI_Finalize();
}
Задача ещё не решена.
Других решений пока нет …