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

Параллельная схема

Оценка числа pi с помощью N итераций осуществляется по следующему алгоритму:

float EstPiFloatOMP( int N )
{
  float      H;
  float      Estimate;
  int i;
  float      Sum2;
  float X;

  H = 1.0 /( float )( 2 * N );

  Sum2 = 0.0;

  for( i = 1; i < = N; i++ )
  {
    X = H *( float )( 2 * i - 1 );
    Sum2 = Sum2 + 1.0 /( 1.0 + X * X );
  }

  Estimate = 4.0 * Sum2 /( float )( N );

  return Estimate;
}

Вычисления в double-арифметике аналогичны. Единственным кодом, который возможно распараллелить здесь является цикл for. Т.е. параллельная реализация имеет вид:

float EstPiFloatOMP( int N )
{
  float     H;
  float     Estimate;
  int i;
  float     Sum2;
  float X;

  H = 1.0 /( float )( 2 * N );

  Sum2 = 0.0;

  #pragma omp parallel for private(X)  shared(H)  reduction(+: Sum2)
  for( i = 1; i < = N; i++ )
  {
    X = H *( float )( 2 * i - 1 );
    Sum2 = Sum2 + 1.0 /( 1.0 + X * X );
  }

  Estimate = 4.0 * Sum2 /( float )( N );

  return Estimate;
}

Таким образом на разных процессорах/ядрах вычисляются различные "куски" суммы ряда, которые затем собираются в мастер-потоке путем редукции (reduction(+: Sum2)).

Новости

22.10.2012
04.09.2012
05.04.2012
06.03.2012
02.03.2012