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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.88
Balzhan77
 Аватар для Balzhan77
0 / 0 / 0
Регистрация: 18.10.2013
Сообщений: 6
21.10.2013, 12:41     умножение матрицы на вектор в mpi #1
Есть задача на умножение матрицы на вектор.Как сделать так,чтобы в умножении использовались только функции 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; 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.10.2013, 12:41     умножение матрицы на вектор в mpi
Посмотрите здесь:

C++ Умножение матрицы на вектор
Умножение матрицы на вектор C++
C++ Реализовать умножение матрицы на матрицу и матрицы на вектор
Умножение матрицы на вектор-столбец C++
Умножение матрицы на вектор C++
C++ Умножение матрицы на вектор с использованием функций
Умножение матрицы на вектор C++
Неправильно производится умножение матрицы на вектор C++

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

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

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