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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.88
Balzhan77
0 / 0 / 0
Регистрация: 18.10.2013
Сообщений: 6
#1

умножение матрицы на вектор в mpi - C++

21.10.2013, 12:41. Просмотров 3775. Ответов 0
Метки нет (Все метки)

Есть задача на умножение матрицы на вектор.Как сделать так,чтобы в умножении использовались только функции SEND и RECEIVE?


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
#include <stdio.h> 
#include <stdlib.h> 
#include "mpi.h" 
 
int main (int argc, char* argv[]) 
{ 
    // Умножение матрицы на вектор 
    int procs_rank, procs_count; 
    int i, j, n = 1000, local_n; 
    double *local_a, *b, *local_c, *a, *c; 
    MPI_Init(&argc, &argv); 
    MPI_Comm_size(MPI_COMM_WORLD, &procs_count); 
    MPI_Comm_rank(MPI_COMM_WORLD, &procs_rank); 
    local_n = n / procs_count; 
    local_a = (double *) malloc((local_n * n) * sizeof(double)); 
    b       = (double *) malloc(n * sizeof(double)); 
    local_c = (double *) malloc(local_n * sizeof(double)); 
    c       = (double *) malloc(n * sizeof(double)); 
    a       = (double *) malloc((n * n) * sizeof(double)); 
    //инициализируем матрицу в нулевом процессе 
    // и рассылаем его части по процессам 
    if (procs_rank == 0) 
    { 
    //матрицу удобнее рассматривать как одномерный массив но с индексами i*n+j 
        for (i=0; i<n; i++) 
            for (j=0; j<n; j++) 
                a[i*n+j]=rand(); 
        for (i=0; i<n; i++) 
            b[i] = rand(); 
    } 
    //рассылаем вектор b 
    MPI_Bcast(b, n, MPI_DOUBLE, 0, MPI_COMM_WORLD); 
    //разделяем матрицу на горизонтальные полосы 
    //шириной local_a и отпраляем процессам 
    MPI_Scatter(a, n * local_n, MPI_DOUBLE, local_a, n * local_n, MPI_DOUBLE, 0, MPI_COMM_WORLD); 
 
    for (i = 0; i < local_n; i++) 
        for (j = 0; j < n; j++) 
        local_c[i] += local_a[i*n+j] * b[j]; 
    //собираем результат в нулевом процессе 
    MPI_Gather(local_c, local_n, MPI_DOUBLE, c, local_n, MPI_DOUBLE, 0, MPI_COMM_WORLD); 
    if (procs_rank == 0) 
    { 
        for (i=0; i<n; i++) 
            printf("%f3.3 \n",c[i]); 
    } 
    MPI_Finalize(); 
    return 0; 
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.10.2013, 12:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос умножение матрицы на вектор в mpi (C++):

Умножение матрицы на вектор - C++
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include &lt;math.h&gt; typedef matrix; typedef vector; matrix...

Умножение матрицы на вектор - C++
...вопрос, чем будет отлтичатся умножение матрицы на вектор с числами и с тригонометрическими функциями... ...как нужно изменить...

Умножение матрицы на вектор - C++
Реализовал умножение матрицы на вектор при построчном разбиении. Как переделать, чтобы умножение было реализовано умножение разбиением...

Умножение матрицы на вектор - C++
получается неправильный ответ. 1) умножаю матрицу на число - ок 2) умножаю матрицу на матрицу - ок 3) умножаю матрицу на вектор -...

Умножение матрицы на вектор - C++
Нужна помощь, ребята! Вот код программы, выбивает 2 ошибки: 1- значение А должны быть константными, объявляю их как константные,...

Умножение матрицы на вектор - C++
Помогите, нужно создать классы: матрица целых чисел и вектор целых чисел. В классах определить указатели, память выделять динамически. В...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.10.2013, 12:41
Привет! Вот еще темы с ответами:

Реализовать умножение матрицы на матрицу и матрицы на вектор - C++
Доброй ночи форумчане,не знаю куда податься уже, я полный ноль в программировании, но дали задание написать на С++ прогу, Задание такое,...

Умножение матрицы на вектор-столбец - C++
День добрый (кому-как) Помогите, а? всю бОшку сломал, выдает Illegal Use of Floating Point не могу найти косяк. #pragma hdrstop ...

Умножение матрицы на вектор-столбец - C++ - C++
Доброго времени суток, вы можете мне подсказать в чем проблема, выдает ошибку E2060 Illegal use of floating point, что за ошибка я не знаю,...

Умножение матрицы на вектор. ошибка в вычислении - C++
Даны матрицы А и B nxn и вектора C и B nx1 Не правильно вычисляется произведение матрицы на вектор, помогите, в чем ошибка? 109 строка ...


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

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

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