Новости
О Центре
Кластер
Обучение
Основной курс по параллельному программированию
Учебные курсы
Магистратура
Дополнительное образование
Работы студентов
Библиотека
Исследования
Конференции
Полезные ссылки
NVIDIA
Контакты
О сайте
Имя:
Пароль:
запомнить:
Забыли пароль? Регистрация

Параллельная реализация

void method1(double **matrix,double **f, int dim, double eps, double h)

void method1(double **matrix,double **f, int dim, double eps, double h)

{

      double temp=0,d=0,dmax=0;

      int i,j;

 

      omp_lock_t dmax_lock;

      omp_init_lock(&dmax_lock);

      do

      {

            dmax = 0; // максимальное изменение значений u

            #pragma omp parallel for shared(matrix,dim,dmax) private(i,temp,d)

            for ( i=1; i<dim+1; i++ )

            {

                  #pragma omp parallel for shared(matrix,dim,dmax,h) private(j,temp,d)

                  for (j=1; j<dim+1; j++ )

                  {

                    temp = matrix[i][j];

 

                        matrix[i][j] = (matrix[i-1][j]+matrix[i+1][j]+matrix[i][j-1]+matrix[i][j+1]-h*h*f[i][j])/4;

                        d = fabs(temp-matrix[i][j]);

                        omp_set_lock(&dmax_lock);

                        if ( dmax < d )   dmax = d;

                        omp_unset_lock(&dmax_lock);

                  } // конец вложенной параллельной области

            } // конец внешней параллельной области

      } while ( dmax > eps );

}

 

 

void method2(double **matrix,double **f, int dim, double eps, double h)

{

       double temp=0,d=0,dmax=0,dm=0;

       int i,j;

 

       omp_lock_t dmax_lock;

     omp_init_lock(&dmax_lock);

     do {

                  dmax = 0; // максимальное изменение значений u

                  #pragma omp parallel for shared(matrix,dim,dmax) private(j,i,temp,d,dm)

                  for ( i=1; i<dim+1; i++ )

                  {

                        dm = 0;

                        for ( j=1; j<dim+1; j++ )

                        {

                             temp = matrix[i][j];

                             matrix[i][j] = (matrix[i-1][j]+matrix[i+1][j]+matrix[i][j-1]+matrix[i][j+1]-h*h*f[i][j])/4;

                             d = fabs(temp-matrix[i][j]);

                             if ( dm < d )

                             {

                                   dm = d;

                             }

                        }

                        omp_set_lock(&dmax_lock);

                        if ( dmax < dm )

                        {

                             dmax = dm;

                        }

                        omp_unset_lock(&dmax_lock);

                         

                  } // конец параллельной области

       

       }

       while ( dmax > eps );

}

 

Новости

22.10.2012
04.09.2012
05.04.2012
06.03.2012
02.03.2012