Форум программистов, компьютерный форум, киберфорум
MPI
Войти
Регистрация
Восстановить пароль
Другие темы раздела
MPI Программа на MPI модуле https://www.cyberforum.ru/ mpi/ thread201111.html
Здравствуйте! Дана такая задачка следующего вида: q = max(3*MA+5*MB) где MA, MB – матриці размером NxM. Числа N та M задаются пользователем . Все элемент матрицы заполнить целыми числа в диапазоне . Количество узлов 4. Написать паралельную программу с помощью модулей PTHRead & MPI. Эту программу надо написать с помощью MPI. Мучала прошлую ночь.. ну ничего не получается.. #include...
Использование MPI MPI
Я скачал пакет mpich. Скинул в соответствующие папки Билдера файлы формата .lib и .h. Написал простейшую программу, подключив "mpi.h". Выдалась куча ошибок вида: Unresolved external '_MPI_Init' referenced from D:\...\UNIT1.OBJ
MPI Перемножение матриц в MPI коллективными функциями MPI только начали учить..литературы мало...а проги требуют..че то вроде как должно было бы работать...но -нет!!!помогите пожалуйста..что тут не так. даны две квадратные матрицы и их нужно перемножить на p процессах(в данном примере пока пользую 2 процесса с 2X2 матрицой) MPI_Bcast ом передаю матрицу one по разным процессам,куски перемножаю,а ответ собираю "совком" Gather...вот код #include... https://www.cyberforum.ru/ mpi/ thread187692.html MPI MPI, нахождение простых чисел https://www.cyberforum.ru/ mpi/ thread184161.html
Здравсвуйте! Пишу программу для нахождения простых чисел. Пишу в Visual Studio 2008 на C++. Программу написал и она работает на нескольких ПК. Но проблема в том, что результаты в главный процесс возвращаются неправильно. Допустим запускаем: компьютер с главным процессом: 5 процессов компьютер раб: 5 процессов. В результате в главный файл запишутся результаты от первых 5 и только от...
Как в mpi выбрать сеть для передачи? MPI
Добрый день. Есть суперкомпьютер, у которого для коммуникации используется infiniband и ethernet. Требуется протестировать отдельно одну и другую сеть. Как в mpi реализовать выбор сети? Знаю, что такая возможность существует, но конкретную команду найти не удается.
MPI mpi Пример под дос. может кто нибудь "перевести" под виндовс? builder c++ hello.c #include<mpi.h> #include<stdio.h> int main(int argc, char** argv) { int rank, size; MPI_Init(&argc, &argv); https://www.cyberforum.ru/ mpi/ thread107674.html
MPI распараллелить программу (mpi) Нужна помощь с MPI, нужно чтобы нулевой проц посылал из текстового файла(в котором x строк) x/(rank-1) строк каждому, получившие строки процы записывали бы строку в char s. Главная проблема:чтобы они записывали в переменную каждую строку по очереди выполняли определенную операцию с каждой строкой а потом делали это со всеми остальными. https://www.cyberforum.ru/ mpi/ thread72050.html Выделение памяти под массив в MPI MPI
ОС: ХЗ SP3 Компилятор: VS .NET 2003 Суть вот в чем, в универе достаточно много писали на плюсах, однако про MPI и знать не знали...Поэтому, если буду тупить - не бейте, плз) Проблема: в без MPI двумерный массив типа **A, можно было инициализировать так: A = (int**)malloc(n*sizeof(int*)); for(i = 0; i < n; i++) { A =(int*) malloc(n*sizeof(int));}
MPI Параллельная программа для метода холецкого с помощью openMp и mpi Товарищи,помогите пожалуйста с параллельным программированием: надо написать параллельную программу для метода холецкого с помощью openMp и mpi!и еще потоков! https://www.cyberforum.ru/ mpi/ thread36102.html  
6 / 6 / 0
Регистрация: 05.04.2010
Сообщений: 350
0

Распараллеливание на C++ и MPI - MPI - Ответ 1344606

05.02.2011, 13:33. Показов 5192. Ответов 0
Метки (Все метки)

Author24 — интернет-сервис помощи студентам
Задача состоит в том, чтобы написать параллельный алгоритм метода сопряженных градиентов для решения линейной системы.

Непосредственно метод сопряженных градиентов сожержит на некоторых этапах: скалярное умножение векторов и умножение матрицы на вектор. Причем, умножение матрицы на вектор-диагональное, а матрица симметричная, положительно определена, разреженная. Хранится она в виде вектора, куда записывается верхний треугольник матрицы. таким образом, трехдиагональная, к примеру, матрица из 1, имеющая размерность 5*5 будет записана так : 111111111.
Последовательный алгоритм уже мной написан. Так же в отдельной программе распараллелено скалярное произведение.

Загвоздка в распараллеливании матрично-векторного произведение и в том, чтобы все это сшить в одну программу(включая скалярное произведение).
Поможите чем можите icon_upset.gif

писал на VS 2005, C++ (и mpich2)
Тут имеются безуспешные(работает только при запуске одного процесса) попытки вставить распараллеленое скалярное произведение, если так можно выразиться
Код C++

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
 #include <mpi.h>
#include <iostream>
#include <stdio.h>
#include <math.h>
const  int N=5;//размерность матрицы
const int di=3;//количество диагоналей а матрице
const double eps=0.0001;
int proc_rank;
int proc_num;
using namespace::std;
//функция, реализующая последовательный алгоритм диагонального матрично-векторного произведения
double *Mov(double *A, double *b)
{
  double *x,*y;
  x=new double [N];
  y=new double [N];
  for(int i=0;i<N;i++)
  {
    x[i]=0;
    y[i]=0;
  }
  int k=0,t=0,l=0,f=0;
 
  for(int v=0;v<(di/2+1);v++)
  {
    k=N-v;
    for(int j=t;j<k+t;j++)
    {
      if(v==0)
        x[j]+=A[j]*b[j];
      else
      {
        x[l]+=A[j]*b[v+f];
        y[v+f]+=A[j]*b[l];
        l++;
        f++;
      }
    }
    f=0;
    l=0;
    t+=k;
  }
 
  for(int u=0;u<N;u++)
    x[u]+=y[u];
  delete []y;
 
  return x;
}
//скалярное произведение
double Dot_pr(double *a,double *b)
{
  double little_mult=0, mult=0,k,n1,n2;
  if(proc_rank==0)
     mult=little_mult;    
 
  k=N/proc_num;
  n1=k*proc_rank;
  n2=k*(proc_rank+1);
 
  if(proc_rank==proc_num-1)
    n2=N;
  for(int i=n1;i<n2;i++)
    little_mult=a[i]*b[i]+little_mult;
  MPI_Reduce(&little_mult,&mult,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD);
  if(proc_rank==0)
    return mult;
 
}
 
//сам метод сопряженных градиентов
double *Msg(double *A,double *b,double eps)
{
  double *x,*q,*err,*r,*p,w=0,w_infinity, wk=0,alfa=0,betta=0,gamma=0;
  x=new double [N];
  q=new double [N];
  r=new double [N];//невязка
  p=new double [N];
  err=new double[N];
 
  int step=0;
  for(int i=0;i<N;i++)
  {
    x[i]=0;
    q[i]=0;
    r[i]=b[i];
    p[i]=r[i];
  }
 
  w=Dot_pr(r,r);
  w_infinity=eps*w;
  while(w>=w_infinity)
  {
    q=Mov(A,p);
    gamma=Dot_pr(q,p);
    alfa=w/gamma;
    for(int h=0;h<N;h++)
    {
      x[h]=x[h]+alfa*p[h];
      r[h]=r[h]-alfa*q[h];
 
    }
 
    wk=Dot_pr(r,r);
    betta=wk/w;
    for(int g=0;g<N;g++)
      p[g]=r[g]+betta*p[g];
 
    w=wk;
    wk=0;
    gamma=0;
    step++;
  }
 
  cout<<"steps: "<<step<<endl;
 
  delete [] p;
  delete [] q;
  delete [] err;
  delete [] r;
 
  return x;
}
 
 
 
int main(int argc, char *argv[])
{
  int M=0; double *A,*b;
 
  MPI_Init(&argc, &argv);
  MPI_Comm_size(MPI_COMM_WORLD,&proc_num);
  MPI_Comm_rank(MPI_COMM_WORLD,&proc_rank);
  for(int i=0;i<(di/2+1);i++)
      M+=N-i;
  A=new double [M];
  b=new double [N];
  if (proc_rank==0)
  {
    cout<<"M="<<M<<endl;
    cout<<"b"<<endl;
    for(int k=0;k<N;k++)
      cin>>b[k];
    cout<<"A"<<endl;
    for(int j=0;j<M;j++)
      cin>>A[j];
   }
 
  MPI_Bcast(A,M,MPI_DOUBLE,0,MPI_COMM_WORLD);
  MPI_Bcast(b,N,MPI_DOUBLE,0,MPI_COMM_WORLD);  
  double *z;
  z=new double [N];
  z=Msg(A,b,eps);
  if(proc_rank==0)
    for(int i=0;i<N;i++)
      cout<<z[i]<<endl;
  delete []z;
  delete [] A;
  delete [] b;
  MPI_Barrier(MPI_COMM_WORLD);
  MPI_Finalize();
  return 0;
}


Вернуться к обсуждению:
Распараллеливание на C++ и MPI MPI
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.02.2011, 13:33
Готовые ответы и решения:

Распараллеливание итераций цикла MPI
Как можно распараллелить цикл, чтобы одна итерация передавалась одному потоку, вторая - второму...

Распараллеливание с MPI
Всем привет, помогите, пожалуйста распараллелить программу с помощью технологии MPI написанную на...

Парсинг лог файла и распараллеливание используя mpi
собственно, есть лог-файлы вида Нужно сортировать по дате, выводить собственно саму дату,...

Распараллеливание
Пишу в C++/CLI программу. Потребовалось распараллелить построение фрактала. Вопрос: кто-нибудь...

0
05.02.2011, 13:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.02.2011, 13:33
Помогаю со студенческими работами здесь

Распараллеливание
Здраствуйте. Подскажите как распаралелить функцию поиска минимального элемента в масиве средствами...

Распараллеливание
Написал программу для полного перебора всех возможных n-значных комбинаций состоящих из . Написал 3...

Распараллеливание
Подскажите, что не так. Есть массив из 13 элементов, мне нужно разбить на три блока, один блок...

Распараллеливание
Всем добрый вечер. Если кто знает подскажите,мне надо распараллелить перемножение...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru