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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ По умолчанию Построить описание класса, содержащего информацию о почтовом адресе организации http://www.cyberforum.ru/cpp-beginners/thread983301.html
Построить описание класса, содержащего информацию о почтовом адресе организации. Предусмотреть возможность раздельного изменения составных частей адреса, создания и уничтожения объектов этого класса. Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса. --- Помогите пожалуйста!) пользовался поиском по...
C++ массивы, индексы ячеек доброго времени суток. нуждаюсь в помощи более опытных программистов. Задача - даны три тройки чисел А.Б.В, каждая тройка определяет линию, которая задана уравнением ax+by=c, если точки пересечения этих линий создают вершины треугольника то вывести координаты треугольника, иначе указать прямые которые паралельны. #include <iostream> using namespace std; int main() { int i, j; ... http://www.cyberforum.ru/cpp-beginners/thread983271.html
Написать программу по обработке файла, состоящего из структур C++
Написать программу по обработке файла, состоящего из структур. Массив структур не использовать. В программе реализовать следующие действия по обработке файла: 1.Создание - (готово) 2.Открыть файл -(готово) 3.Просмотр 4.Добавление нового элемента 5.Удаление(Редактирование) 6.Вывести результат в файл - (готово)
Вызов метода в классе из другого C++
Не получается выполнить следующую цепочку действий. Запускаю метод в классе B через main, он запускает метод в классе A который должен запустить метод 2 в классе B. class A; class B; class A { privat: B *b; public: void function_a1 {
C++ Составить алгоритм многопоточного умножения матриц http://www.cyberforum.ru/cpp-beginners/thread983178.html
Помогите составить алгоритм многопоточного умножения матриц на С++.
C++ Работа с GDIplus Подскажите плиз какие библиотеки подключать и в какой последовательности. Ошибки выскакивают такого рода: error C2664: 'Gdiplus::Status Gdiplus::Graphics::DrawRectangle(const Gdiplus::Pen *,Gdiplus::REAL,Gdiplus::REAL,Gdiplus::REAL,Gdiplus::REAL)' : cannot convert parameter 1 from 'Gdiplus::Pen' to 'const Gdiplus::Pen *' error C2512: 'Gdiplus::Pen' : no appropriate default constructor... подробнее

Показать сообщение отдельно
Balzhan77
0 / 0 / 0
Регистрация: 18.10.2013
Сообщений: 6

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

21.10.2013, 12:41. Просмотров 3706. Ответов 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; 
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru