#include #include #include #include #include using namespace std; const int m = 1000; //предел массива от - m/2 до + m/2 в int create_num(int A) //рандомное число (переменная rank) { int number; srand(time(NULL) + A); number = (rand() % m) - m / 2; return number; } int file_read() // считываем количество потоков { ifstream fileout; fileout.open("run.bat");//открытие файла int max = -1; if (fileout.is_open())//Если открытие файла прошло успешно { string line; getline(fileout, line); getline(fileout, line); line = line.substr(line.find("n ") + 2); line = line.substr(0, line.find(" ")); fileout.close(); //Закрываем файл max = stoi(line); } else { cout << "file not open" << endl; } return max; } int main(int argc, char** argv) { int rank, size, n = 0; int max = file_read() ; // считываем количество вызовов int* rbuf = new int[max]; for (int i = 0; i < max; i++) rbuf[i] = 0; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); n = create_num(rank); MPI_Gather(&n, 1, MPI_INT, rbuf, 1, MPI_INT, 0, MPI_COMM_WORLD); cout << "Rank: " << rank << " Number: " << n << endl; if (rank == 0) { if (max != -1) //проверка считалось ли значение из файла { int sum = 0; for (int i = 0; i < max; i++) sum += rbuf[i]; cout << "summ = " << sum << endl; } else { cout << "value undefined"; } } MPI_Finalize(); return 0; }