Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Что это? 
:(
    Опции темы
vio
Дата 23.5.2005, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 25.9.2004

Репутация: нет
Всего: нет



Уменя есть такая программа:
Код

#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <math.h>
#include <mpi\mpi.h>
#include <dos.h>
#pragma hdrstop

#define MAX_DIM 10000
#define MAX_PROC 10
#define tol 0.001

//--------------------------------------------------
double Distance(double x[], double y[],int n);
int n;
#pragma argsused
void main(int argc, char* argv[])
{
  int **a;
  int **a_local;
  double *x_local;
  double *b;
  double *b_local;
  randomize();
  int nr;
  int max_iter,iter_num,p,my_rank;
  int i_local,i_global,j,n_bar;
  double *x_old;
  double *x_new;
  //инициализация
  MPI_Init(&argc,&argv);
  MPI_Comm_rank(MPI_COMM_WORLD,&my_rank);
  MPI_Comm_size(MPI_COMM_WORLD,&p);
  n=50;max_iter=50;
  n_bar=n/p;
  MPI_Datatype TVector;
  MPI_Type_vector(1,n,MAX_DIM,MPI_FLOAT,&TVector);
  MPI_Type_commit(&TVector);
int gr,gr2,comm;
  if (p>n){
  MPI_Comm_group(MPI_COMM_WORLD,&gr);
  int ranks[MAX_PROC];
  int len=p-n;
  for(int i=0;i<len;i++)
  ranks[i]=p-i-1;
  MPI_Group_excl(gr,len,ranks,&gr2);
  MPI_Comm_create(MPI_COMM_WORLD,gr2,&comm);
}
  else comm=MPI_COMM_WORLD;
  
a=new int *[n];// массив указателей на столбцы
for (int i=0;i<n;i++)
a[i]= new int [n]; // массив элементов столбца
a_local=new int *[n_bar];// массив указателей на столбцы
for (int i=0;i<n;i++)
a_local[i]= new int [n]; // массив элементов столбца
b=new double[n];
x_new=new double[n];
x_old=new double[n];
x_local=new double[n];
b_local=new double[n];

if(!my_rank){ // Если нулевой процессор
  int k;
  for (int i=0;i<n;i++){
    for(int j=0;j<n;j++){
       if(i==j){ a[i][j]=random(89)+10;}
       else {a[i][j]=random(10)+10;}
    };
    b[i]=random(90);
  };
};

int disp[MAX_PROC];
int cnt[MAX_PROC];
int temp=p-n*n_bar;
for (int i=0;i<p;i++){
   if(i>temp) {cnt[i]=n_bar+1;}
   else {cnt[i]=n_bar;};
   if (i==0) {disp[i]=0;}
   else { disp[i]=disp[i-1]+cnt[i-1];}
}
MPI_Scatterv(a, cnt, disp, TVector,a_local,cnt[my_rank], TVector, 0, comm);
MPI_Scatterv(b, cnt, disp, MPI_DOUBLE, b_local, cnt[my_rank], MPI_DOUBLE, 0, comm);
int k;
struct time t;
gettime(&t);
printf("The current time is: %2d:%02d:%02d.%02d\n",
t.ti_hour, t.ti_min, t.ti_sec, t.ti_hund);
iter_num=0;
for (int i=0;i<n;i++){
  x_new[i]=b[i];
  x_old[i]=x_new[i];
}
do{
   for (int i=0;i<n;i++){
     x_old[i]=x_new[i];
   }
   iter_num++;
   for(i_local=0;i_local<n;i_local++){
      i_global=i_local+disp[my_rank];
      x_local[i_local]=b_local[i_local];
      for(j=0;j<i_local;j++)
         x_local[i_local] = x_local[i_local]-x_old[j];
      for(j=i_local+1;j<n;j++)
         x_local[i_local] = x_local[i_local]-x_old[j];
      x_local[i_local]= x_local[i_local]/a_local[i_local][i_global];
    }
MPI_Allgather(x_local,cnt[my_rank],MPI_FLOAT,x_new,cnt[my_rank],MPI_FLOAT,MPI_COMM_WORLD);
}while((iter_num<max_iter)&&(Distance(x_new,x_old,n)>=tol));
//
if (Distance(x_new,x_old,n)<=tol)
  printf("Iteration converged\n");
else
  printf("Iteration not converged\n");

gettime(&t);
printf("The current time is: %2d:%02d:%02d.%02d\n",
   t.ti_hour, t.ti_min, t.ti_sec, t.ti_hund);

getch();

MPI_Finalize();
}
//----------------------------------------------------------
double Distance(double x[], double y[],int n){
int i;
double sum=0.0,t;
for (i=0;i<n;i++){ 
  t=(x[i]-y[i])*(x[i]-y[i]);
  sum += t;
}
return sqrt(sum);
}



Скажите пожалуйста: это программа для параллельного програмирования или для простого С++?
PM MAIL   Вверх
bilbobagginz
Дата 25.5.2005, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 4
Всего: 317



эта программа включила в себя файлик <mpi/mpi.h>
и это таки не просто так smile
видимо ей нужнa библиотека MPI. MPI-ев есть 2:
LAM и MPICH
но, в последствии программа включила в себя:
<conio.h>
<dos.h>
что шибко огорчает: это программа под Борленд Си/Си++ компилятор ( дос/винда )
Далее...
насколько что тут распараллеленно - нехоца судить, но прога бежит с помошью библиотеки паралельного программирования... т.е. её не знаю как компиляют:
обычно есть спец. компилятор эм.пи.ай-ского кода ( mpiCC ), хотя под винду/дос - может они приклеиваются к Борланду.
короче непонятно какая это программа, но в ней упоминается использование паралельной библиотеки.
а MPI - это не особенный язык, а Си с дополнительной бибилиотекой.
надеюсь помог чуть-чуть.

пока.








--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
versus
Дата 30.5.2005, 01:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 8.3.2005
Где: Переславль-Залесс кий

Репутация: 2
Всего: 3



Цитата
MPI-ев есть 2
LAM и MPICH

Реализаций стандарта MPI мно-о-ого.
mpich,
mpich-g2,
mpich-gm,
lam,
ScaMPI,
mvapich,
pacx-mpi,
...

Это сообщение отредактировал(а) versus - 30.5.2005, 01:25
PM MAIL WWW   Вверх
bilbobagginz
Дата 30.5.2005, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 4
Всего: 317



спасибо, извиняюсь за небольшую неточность..
а вы с какой из них работали ?

( я давно работал лишь с тем что писал, и именно они были имхо де-факто стандартными библиотеками лет 5 назад )




--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0546 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.