Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методичка для MPI.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
506.88 Кб
Скачать

5. Пример выполнения

Процесс номер 2 запущен на компьютере: 'prog1.'

Процесс номер 0 запущен на компьютере: 'prog2.'

Процесс номер 3 запущен на компьютере: 'prog3.'

Процесс номер 1 запущен на компьютере: 'prog4.'

Введите количество интервалов (n): (0 для выхода) 1024

резульат: pi=3.1415927330626534, Расхождение с эталоном 0.0000000794728603

время работы 0.157488 секунд

Введите количество интервалов (n): (0 для выхода) 100000

резульат: pi=3.1415926535981167, Расхождение с эталоном 0.0000000000083236

время работы 0.011448 секунд

Введите количество интервалов (n): (0 для выхода) 1000000

резульат: pi=3.1415926535899033, Расхождение с эталоном 0.0000000000001101

время работы 0.100975 секунд

Введите количество интервалов (n): (0 для выхода) 10000000

резульат: pi=3.1415926535896856, Расхождение с эталоном 0.0000000000001075

время работы 1.004657 секунд

Введите количество интервалов (n): (0 для выхода) 100000000

резульат: pi=3.1415926535902168, Расхождение с эталоном 0.0000000000004237

время работы 9.993571 секунд

Введите количество интервалов (n): (0 для выхода) 0

6. Примечания

Для замера скорости расчета, следует завести переменную, со временем начала работы, например startwtime = MPI_Wtime();.Данная функция вернет количество прошедших секунд с 01.01.2971. После окончания расчетов, следует получить переменную endwtime = MPI_Wtime();. Разница endwtime-startwtime и будет временем выполнения расчетов в секундах.

У каждого процесса локальная переменная sum – своя, т.е. в ней разные данные. Поэтому складывать функцией MPI_Reduce() надо в другую переменную, например mypi.

Для того чтобы функция MPI_Reduce() складывала, следует указать в аргументе типа функции MPI_SUM.

С полным форматом данных функций можно ознакомится в приложении к данной методичке или на ресурсах, указанных в приложении.

Для выяснения расхождения можно использовать эталон:

double PI25DT = 3.141592653589793238462643; // эталон

Не забывайте использовать fflush(stdout) после printf().

Стандартная инициализация это:

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);// имя компьютера

Лабораторная работа № 4 Передача данных отдельным процессам

  1. Подготовка к работе

Необходимо иметь в наличии кластер на базе MPI. Уметь программировать на языке C. Ознакомиться с функциями точечной отправки сообщений, используя интерфейс MPI, указанными в Приложении.

  1. Контрольные вопросы

  1. Может ли параллельная программа работать на гетерогенном кластере?

  2. Что такое гетерогенный кластер?

  3. Чем отличается параллельная программа (с интерфейсом MPI) от обычной программы?

  4. Опишите способ расчета числа π, использованного в данной лабораторной работе.

  5. Назначение функции MPI_ Reduce.

  6. Назначение функции MPI_Wtime.

  7. Почему число прериодов желательно задавать числу процессов?

  8. Поясните ход программы по блок-схеме.