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

С++ для начинающих

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

Работа с массивом с MPI C++ (есть код) - C++

25.11.2014, 11:05. Просмотров 438. Ответов 0
Метки нет (Все метки)

Задача инвертирования массива.
Как делаю я: определяю количество значений, которое будет далее разослано по процессам. Заполняю массив. Раздаю значения массива по процессам. Остаток оставляю для управляющего процесса. Инвертирую.
Код привожу ниже.
Еще ниже результат работы программы. Первая строчка - как массив заполнился. Далее столбиком идет результат инвертирования.
Проблема в том, что отрабатывает только один процесс. Не знаю, как собрать результат с процессов воедино. + Какой-то странный вывод, некоторых чисел. Помогите, пожалуйста.
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
//Инвертирование массива
#include <mpi.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
#define MYTAG 1
 
int main(int argc, char *argv[])
{
        int n, size, i, dest, rank;
    int a[10], arr[10];;
        MPI_Status status;
 
        MPI_Init(&argc, &argv);
        MPI_Comm_size(MPI_COMM_WORLD, &size);
        MPI_Comm_rank(MPI_COMM_WORLD, &rank);
 
        if (rank == 0)
                n = 10 / size + 1;
        MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);
 
        if (rank == 0) {
                for (dest = 1; dest < size; dest++) {
                        for (i = 0; i < n; i++) {
                                a[i] = i + dest;
                    printf("%d ", a[i]);
                        }
                        MPI_Send(a, n, MPI_INT, dest, MYTAG, MPI_COMM_WORLD);
                }
                n = 10 - n * (size - 1);
            for (i = 0; i < n; i++) {
                a[i] = i;
                printf("%d ", a[i]);
            }
 
        } else {
                MPI_Recv(a, n, MPI_INT, 0, MYTAG, MPI_COMM_WORLD, &status);
        }
 
        int temp;
    for (i = 0; i < n / 2; i++) {
        temp = a[n-i-1];
        a[n-i-1] = a[i];
        a[i] = temp;
    }
 
        //MPI_Gather(a, 1, MPI_INT, arr, 1, MPI_INT, 0, MPI_COMM_WORLD);
 
 
    printf("\n");
        if (rank == 0) {
            for(int i = 0; i < 10; i++) {
                printf("a[%d] = %d \n", i, a[i]);
            }
                
        }
 
        MPI_Finalize();
        return 0;
}
Миниатюры
Работа с массивом с MPI C++ (есть код)  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2014, 11:05     Работа с массивом с MPI C++ (есть код)
Посмотрите здесь:

Работа с символьным массивом C++
Работа с массивом структур C++
C++ Работа с символьным массивом
C++ Работа с массивом строк в С
есть код и есть ошибка нужно найти дырку C++
MPI. Ошибка в выводимых данных. (Код присутствует) C++
C++ Работа с массивом! Сдвиг
Работа с одним массивом C++
C++ Работа с массивом чисел
Работа с файлами и массивом C++
C++ Работа с массивом в файле

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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