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

C++

Войти
Регистрация
Восстановить пароль
 
ainur_fa
0 / 0 / 0
Регистрация: 09.10.2015
Сообщений: 34
#1

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

11.11.2016, 09:49. Просмотров 319. Ответов 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(); параллельные процессы завершаются, и в конце должна вычисляться сумма. Что тут не так, спасибо.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.11.2016, 09:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вычисление суммы чисел, от параллельных процессов MPI (C++):

Программирование параллельных процессов С++ Builder TThread - C++ Builder
Здравствуйте! Пожалуйста объясните или подскажите книгу.... Мне надо создать два массива чисел, а потом по графу ими оперировать разними...

Вычисление суммы квадратов простых чисел, лежащих в заданном интервале - Visual C++
Составить программу вычисления суммы квадратов простых чисел, лежащих в интервале (M,N).

Вычисление суммы квадратов четных чисел и суммы кубов нечетных чисел - C++
Написать программу вычисления суммы S квадратов четных и кубов нечетных чисел от 1 до N. Проверку числа на четность осуществить с помощью...

Вычисление суммы четных и суммы нечетных чисел в одномерном массиве - C++
1) Написать программу для вычисления суммы четных и суммы нечетных чисел в одномерном массиве!

Программирование параллельных процессов - C++
Лабораторная работа для дисциплины &quot;операционные системы&quot; Существует ли еще фриленс на форуме? Не отказался бы от бескорыстной помощи...

Вычисление суммы S квадратов чисел от 1 до N - C++
С помощью цикла «пока» или цикла «до» написать программу вычисления суммы S квадратов чисел от 1 до N.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
gng
644 / 490 / 133
Регистрация: 08.09.2013
Сообщений: 1,326
13.11.2016, 22:20 #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;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.11.2016, 22:20
Привет! Вот еще темы с ответами:

Вычисление суммы чисел, кратных 29 - C++
Составьте программу вычисления суммы чисел кратных 29 в диапазоне от 29 до 1160.

Вычисление суммы квадратов чисел - C++
Народ выручайте дан текстовый файл, содержащий записанные в столбик числа, надо вычислить сумму их квадратов Мне не нужен весь код(...

вычисление суммы ряда из 10 чисел - C++
срочно нужно на экзамене сижу, а как делать фиг знает 3 задание

Вычисление суммы квадратов чисел от 1 до 20 - C++
Всем привет, нужна помощь, буду очень благодарен. 1.(использования оператора switch) По заданному числовому коду учебной группы,...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru