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

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

int main(int argc,char **argv)

{

int size,rank,i,n=12;

float a[]={10.0,-1.0,2.0,3.0,7.0,6.0,3.0,1.0,-2.0,4.0,-9.0,20.0};

MPI_Status status;

MPI_Init(&argc,&argv);

MPI_Comm_rank(MPI_COMM_WORLD,&rank);

MPI_Comm_size(MPI_COMM_WORLD,&size);

float f=0,min=0,mini=0;

int nachalo,konec,shag;

shag=n/(size-1);

if(rank!=size-1)

{

nachalo=rank*shag;

konec=rank*shag+shag;

min=a[nachalo];

for(i=nachalo;i<konec;i++)

if(a[i]<min)

min=a[i];

MPI_Send(&min,1,MPI_FLOAT,size-1,1,MPI_COMM_WORLD);

}

if(rank==size-1){

mini=32000;

for(i=0;i<size-1;i++)

{ MPI_Recv(&min,1,MPI_FLOAT,i,1,MPI_COMM_WORLD,&status);

if(mini>min)

mini=min; }

printf("%f\n",mini);

}

MPI_Finalize();}

383 Сурак

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

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

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

2. Есть мнение, что для написания программ mpi достаточно лишь 5-ти основых функций. Назовите их. Как Вы относитесь к данному высказыванию ?

1) Любая MPI-программа должна начинаться с вызова функции инициализации MPI (функция MPI_Init(&argc, &argv)) - создается группа процессов, в которую помещаются все процессы приложения, и создается область связи (объединяет все процессы приложения), описываемая предопределенным коммуникатором MPI_COMM_WORLD. 2) Функция завершения MPI программ MPI_Finalize()- закрывает все MPI-процессы и ликвидирует все области связи. 3) Функция определения номера процесcа MPI_Comm_rank(comm, &rank) – comm – коммуникатор, rank-номер процесса, вызвавшего функцию. 4) Функция передачи сообщения - MPI_Send(void* buf, int count, MPI_Datatype datatype, int dest,int tag, MPI_Comm comm) buf- адрес начала расположения пересылаемых данных;

count - число пересылаемых элементов; datatype - тип посылаемых элементов; dest - номер процесса-получателя в группе, связанной с коммуникатором comm; tag - идентификатор сообщения, comm - коммуникатор области связи. 5) Функция приема сообщения MPI_Recv(void* buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status *status) source - номер процесса-отправителя;status- атрибуты принятого сообщения.

Действительно, любую программу можно написать с помощью этих 5 функций, однако для облегчения выполнения задачи необходимо использовать дополнительные функции MPI.

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