Top image
Skip Navigation Links
Общие сведения
Доступ
Поддержка
Материалы
Ссылки
Контакты
Вход в систему

Разработка приложений

В качестве примера параллельной программы для этого задания будет использоваться параллельный алгоритм вычисления числа Пи. В данной работе рассматриваются только технические вопросы использования Microsoft High Performance Computing 2008; вопросы реализации параллельного алгоритма вычисления числа Пи рассматриваются в соответствующих курсах по параллельному программированию. В данном задании будут рассмотрены вопросы использования Visual Studio 2008 для компиляции параллельной MPI программы для использования в среде MS MPI:

·         Запустите Microsoft Visual Studio 2008

·         Создайте новый проект: выберите пункт меню File->New->Project. В окне выбора нового проекта выберите консольное Win32 приложение (Other Languages->Visual C++->Win32->Win32 Console Application), введите имя проекта в поле “Name” (например, “ parallelpi”) и убедитесь, что путь до проекта выбран правильно (поле “Location”). Нажмите кнопку “OK” для выбора остальных настроек создаваемого проекта

 

·         В открывшемся окне нажмите кнопку “Next

 

·         В открывшемся окне выберите настройки проекта (можно оставить все настройки по умолчанию). Нажмите кнопку Finish

 
 

·         В окне Solution Explorer щелкните 2 раза на файле parallelpi.cpp (имя файла совпадает с введенным названием проекта)

 
 

·         Удалите содержимое файла и замените его следующим (см. лабораторную работу "Параллельный метод вычисления числа Пи"):

#include "stdafx.h"

#include <stdlib.h>

#include <stdio.h>

#include <math.h>

#include <mpi.h>

 

void main(int argc, char *argv[]) {

  int     NumIntervals    = 0;   // num intervals in the domain [0,1]

  double  IntervalWidth   = 0.0; // width of intervals

  double  IntervalLength  = 0.0; // length of intervals

  double  IntrvlMidPoint  = 0.0; // x mid point of interval

  int     Interval        = 0;   // loop counter

  int     done            = 0;   // flag

  double  MyPI            = 0.0; // storage for PI approximation results

  double  ReferencePI = 3.141592653589793238462643; // value for comparison

  double  PI;

  char  processor_name[MPI_MAX_PROCESSOR_NAME];

  char  (*all_proc_names)[MPI_MAX_PROCESSOR_NAME];

  int    numprocs;

  int    MyID;

  int    namelen;

  int    proc = 0;

 

  MPI_Init(&argc,&argv);

  MPI_Comm_size(MPI_COMM_WORLD,&numprocs);

  MPI_Comm_rank(MPI_COMM_WORLD,&MyID);

  MPI_Get_processor_name(processor_name,&namelen);

 

  all_proc_names = (char(*)[128]) malloc(numprocs * MPI_MAX_PROCESSOR_NAME);

 

  MPI_Gather(processor_name, MPI_MAX_PROCESSOR_NAME, MPI_CHAR,

    all_proc_names, MPI_MAX_PROCESSOR_NAME, MPI_CHAR, 0, MPI_COMM_WORLD);

  if (MyID == 0) {

    for (proc=0; proc < numprocs; ++proc)

      printf("Process %d on %s\n", proc, all_proc_names[proc]);

  }

 

  IntervalLength = 0.0;

  if (MyID == 0) {

    if (argc > 1) {

      NumIntervals = atoi(argv[1]);

    }

    else {

      NumIntervals = 100000;

    }

    printf("NumIntervals = %i\n", NumIntervals);

  }

 

  // send number of intervals to all procs

  MPI_Bcast(&NumIntervals, 1, MPI_INT, 0, MPI_COMM_WORLD);

 

  if (NumIntervals != 0)

  {

    //approximate the value of PI

    IntervalWidth   = 1.0 / (double) NumIntervals;

 

    for (Interval = MyID+1; Interval <= NumIntervals; Interval += numprocs){

      IntrvlMidPoint = IntervalWidth * ((double)Interval - 0.5);

      IntervalLength += (4.0 / (1.0 + IntrvlMidPoint*IntrvlMidPoint));

    }

    MyPI = IntervalWidth * IntervalLength;

 

    // Calculating the sum of all local alues of MyPI

    MPI_Reduce(&MyPI, &PI, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);

 

    //report approximation

    if (MyID == 0) {

      printf("PI is approximately %.16f, Error is %.16f\n",

        PI, fabs(PI - ReferencePI));

    }

  }

 

  MPI_Finalize();

}

·         Выполните настройки проекта Visual Studio 2008 для компиляции MPI части проекта в соответствии с указаниями пункта “Настройка интегрированной среды разработки Microsoft Visual Studio 2008”,

·         Выполните команду Build->Rebuild Solution для компиляции и линковки проекта,

·         Поздравляем! Компиляция параллельной программы для MS MPI успешно завершена.

 
Bottom image