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

26 Сурак

1.В каких случаях эффективно использование параллельных методик программирования ?

В последнее время, чтобы получить возможность задействовать на практике ту дополнительную вычислительную мощность, стало необходимо задействовать параллельные вычисления. Сейчас по разным причинам производители процессоров предпочитают многоядерные архитектуры, и для получения всей выгоды от возросшей производительности ЦП программы должны переписываться в соответствующей манере. В итоге происходит неуклонное возрастание потребности в ресурсоемких расчетах, которые в ряде случаев можно выполнить только на базе высокопроизводительной техники с помощью методов параллельных вычислений. Параллельные вычисления применяются в:

1) системах поддержки проектирования (CAD – Computer Aided Design). В таких системах необходимость осуществлять моделирование в реальном масштабе времени предъявляет высокие требования к производительности программного обеспечения. 2) инженерных приложениях. К этому классу относятся разнообразные задачи из области прочностного моделирования, моделирование аварийных ситуаций и многие другие; 3) математическом моделировании физических процессов. В этот широкий класс входят задачи динамики жидкости и газа, электромагнитные и ядерные взаимодействия, процессы горения и т.п. Такие процессы, как правило, описываются системами уравнений в частных производных. 4) моделирование глобальных процессов в науках о Земле. В первую очередь, это – задачи прогноза изменения климата, предсказание природных катаклизмов. 5) вычислительной химии. Разнообразные задачи этой области направлены на изучение свойств вещества в различных состояниях. 6) бизнес-приложениях. К этой категории относятся задачи, связанные с анализом финансовых рынков и прогнозирования курсов валют. Также распространены оптимизационные задачи, по формированию наилучшего варианта использования финансовых или иных ресурсов, построения оптимальных транспортных и телекоммуникационных сетей, размещения предприятий в регионе и многие другие задачи.

2.Как можно вычислить время, которое тратится на расчет определенного участка кода в MPI?

DOUBLE PRECISION MPI_WTIME

Эта функция возвращает на вызвавшем процессе астрономическое время в секундах, прошедшее с некоторого момента в прошлом. Если некоторый участок программы окружить вызовами данной функции, то разность возвращаемых значений покажет время работы данного участка.

Пример:

int main (int argc, char **argv)

{

int rank, size,wtime;

double startwtime=0, endwtime; - началоиконецотсчёта

double s=0;

MPI_Init(&argc, &argv);

MPI_Comm_size(MPI_COMM_WORLD, &size);

MPI_Comm_rank(MPI_COMM_WORLD, &rank);

startwtime=MPI_Wtime(); //вызываемwtime дляначала

printf ("hello world %d, size %d\n", rank, size);

endwtime=MPI_Wtime(); // вызываем wtime для завершения

printf ("time %d\n",(endwtime-startwtime)*size); //вывод времени работы данного участка

MPI_Finalize();}

3. Напишите параллельную программу проверки совершенного числа.

Совершенное число́ - натуральное число, равное сумме всех своих собственных делителей (т. е. всех положительных делителей, отличных от самого́ числа). В данном случае программа должна вывести “Sovershennoe”.

int main(int argc,char **argv)

{

int size,rank;

MPI_Status status;

MPI_Init(&argc,&argv);

MPI_Comm_rank(MPI_COMM_WORLD,&rank);

MPI_Comm_size(MPI_COMM_WORLD,&size);

int k=496,p,l=0,x1,l1,l2=0,itog=0,i; // k - issleduemoe chislo

p=k/(size-1);

if (rank!=size-1) // schitaut vse processy, krome poslednego

// metod perebora delitelei

{ for (i=rank*p; i<(rank+1)*p; i++) { x1=k/(i+1); if (x1*(i+1)==k) {l=l+i+1;} }

MPI_Send(&l,1,MPI_INT,size-1,1,MPI_COMM_WORLD);}

else

{ for (i=0; i<size-1; i++) // poslednii process vse sobiraet

{ MPI_Recv(&l1,1,MPI_INT,i,1,MPI_COMM_WORLD, &status); itog+=l1; }

for (i=(size-1)*p; i<k-1; i++) { x1=k/(i+1); if (x1*(i+1)==k) {l2=l2+i+1;} } itog+=l2;

if (itog==k) { printf("Sovershennoe\n"); } else { printf("Ne yavlyaetsya sovershennym\n"); } }

MPI_Finalize();}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]