Форум программистов, компьютерный форум CyberForum.ru

Вычисление суммы чисел, от параллельных процессов MPI - C++

Восстановить пароль Регистрация
 
ainur_fa
0 / 0 / 0
Регистрация: 09.10.2015
Сообщений: 32
11.11.2016, 09:49     Вычисление суммы чисел, от параллельных процессов MPI #1
Задача такая, запускаются параллельно 5 процессов, каждый из них генерит рандомное число и отправляет соседнему процессу, нужно вывести сумму всех этих чисел.
Вот что получилось

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <mpi.h>
#include <stdio.h>
#include <iostream>
 
    int rank, size;
    //int spisok1[5]={0};
    int *spisok1 = new int[5];
    int summ = 0;
 
int main (int argc, char **argv)
{
    MPI_Status status;
    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    MPI_Comm_size(MPI_COMM_WORLD, &size);
    //Каждый процесс высылает следующему сообщение 
    int chislo = rank * 100 + rand() % 50+1;
    MPI_Sendrecv(&chislo, 1, MPI_INT,(rank+1)%size,(rank+1)%size,
                &spisok1[rank], 1, MPI_INT,(rank+size-1)%size, rank,
                MPI_COMM_WORLD, &status);
    printf("process %d imeet chislo %d \n", rank, chislo);
 
    MPI_Finalize();
 
    for (int i =0; i<5; i++)
    {
        summ+=spisok1[i];
    }
    printf("summa = %d \n", summ);
    return 0;
}
запускаю
C:\temp>mpirun -np 5 Testmpich.exe
process 1 imeet chislo 142
process 3 imeet chislo 342
process 2 imeet chislo 242
process 4 imeet chislo 442
process 0 imeet chislo 42
summa = 1734830266
summa = 1734830066
summa = 1734830166
summa = 1734829966
summa = 892679473
_______________________________________
передача "по кольцу" процессами проходит успешно, но в сумме выводит нечто непонятное мне...
Насколько я понимаю после MPI_Finalize(); параллельные процессы завершаются, и в конце должна вычисляться сумма. Что тут не так, спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.11.2016, 09:49     Вычисление суммы чисел, от параллельных процессов MPI
Посмотрите здесь:

Вычисление суммы квадратов чисел от 1 до 20 C++
Вычисление суммы квадратов чисел C++
C++ Программирование параллельных процессов
C++ Linux MPI. Разбиение процессов на группы
Программирование параллельных процессов С++ Builder TThread C++ Builder
C++ вычисление суммы ряда из 10 чисел
C++ Вычисление суммы чисел, кратных 29
C++ Вычисление суммы S квадратов чисел от 1 до N

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gng
605 / 451 / 122
Регистрация: 08.09.2013
Сообщений: 1,153
13.11.2016, 22:20     Вычисление суммы чисел, от параллельных процессов MPI #2
Цитата Сообщение от ainur_fa Посмотреть сообщение
Вот что получилось
Что написали, то и получилось.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>
#define tag 17
 
int main(int argc, char *argv[]) {
  int rank, size;
  MPI_Init(&argc, &argv);
  MPI_Comm_rank(MPI_COMM_WORLD, &rank);
  MPI_Comm_size(MPI_COMM_WORLD, &size);
 
  int buf = 0;
  if (rank) MPI_Recv(&buf, 1, MPI_INT, rank-1, tag, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
 
  srand48(rank);
  buf+= lrand48() % 100;
 
  if (rank != size-1) MPI_Send(&buf, 1, MPI_INT, rank+1, tag, MPI_COMM_WORLD);
  else printf("Proc %d, sum %d\n", rank, buf);
 
  MPI_Finalize();
  return 0;
}
Yandex
Объявления
13.11.2016, 22:20     Вычисление суммы чисел, от параллельных процессов MPI
Ответ Создать тему
Опции темы

Текущее время: 11:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru