Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Другие возможности MPI-2




Внешние интерфейсы

Коллективные операции

В MPI-2 расширены возможности коллективных обменов сообщениями.

Расширения заключаются в обобщении некоторых операций коллективного обмена на интеркоммуникаторы, введении дополнительных конструкторов интеркоммуникаторов, введении двух новых операций обмена - обобщённой операции "all-to-all" и операции исключающего сканирования. Есть и другие расширения.

Подпрограмма MPI_Comm_create может использоваться для создания интеркоммуникаторов.

Механизм внешних интерфейсов позволяет программисту добавить новую функциональность поверх базовой функциональности MPI.

Обобщённые запросы дают возможность определить новые неблокирующие операции.

При использовании стандартных запросов операции, связанные с ними, выполняются средой исполнения MPI и приложение на этот процесс не влияет.

При использовании обобщённых запросов "ответственность" за выполнение операции берёт на себя приложение. Оно сообщает MPI о завершении операции.

Операции с обобщёнными запросами:

  • MPI_Grequest_start
  • MPI_Grequest_complete

и некоторые другие.

Среди других возможностей MPI-2:

  • Операции декодирования производных типов.
  • Ассоциирование пользовательской информации с полями структуры status.
  • Присвоение имён объектам MPI (например, коммуникаторам, окнам и др.).
  • Многопоточность (MPI_Init_thread, MPI_Thread_single, MPI_Thread_multiple и др.).
  • Новые операции кеширования атрибутов.
  • Параллельные операции ввода-вывода (MPI_File_open, MPI_File_close, MPI_File_read, MPI_File_write и др.).

 

Задание 1

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

#include "mpi.h"

#include <stdio.h>

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

{

int myid, numprocs;

 

fprintf(stdout,"Process %d of %d\n", myid, numprocs);

MPI_Finalize();

return 0;

}

Задание 2

В исходном тексте программы на языке C пропущены вызовы процедур стандартного блокирующего двухточечного обмена. Предполагается, что при запуске двух процессов один из них отправляет сообщение другому. Добавить эти вызовы, откомпилировать и запустить программу.

#include "mpi.h"

#include <stdio.h>

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

{

int myid, numprocs;

char message[20];

int myrank;

MPI_Status status;

int TAG = 0;

MPI_Init(&argc, &argv);

MPI_Comm_rank(MPI_COMM_WORLD, &myrank);

if (myrank == 0)

{

strcpy(message, "Hi, Second Processor!");

MPI_Send(...);

}

else

{

MPI_Recv(...);

printf("received: %s\n", message);

}

MPI_Finalize();

return 0;

}

Задание 3

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

#include "mpi.h"

#include <stdio.h>

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

{

int myrank, size, message; int TAG = 0;

MPI_Status status;

MPI_Init(&argc, &argv);

MPI_Comm_rank(MPI_COMM_WORLD, &myrank);

MPI_Comm_size(MPI_COMM_WORLD, &size);

message = myrank;

if((myrank % 2) == 0)

{

if((myrank + 1)!= size) MPI_Send(...);

}

else

{

if(myrank!= 0) MPI_Recv(...);

printf("received:%i\n", message);

}

MPI_Finalize(); return 0;

}

 

 




Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 642; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.