Содержание
- 2. Лекция 5 2008 Аннотация В лекции рассматриваются коллективные обмены. Среди них – широковещательная рассылка. Обсуждаются операции
- 3. План лекции 2008 Особенности коллективных обменов. Широковещательная рассылка. Операции распределения и сбора данных. Операции приведения. Синхронизация.
- 4. Коллективные обмены 2008
- 5. Коллективные обмены 2008 В операцию коллективного обмена вовлечены не два, а большее число процессов.
- 6. Коллективные обмены 2008 Общая характеристика коллективных обменов: коллективные обмены не могут взаимодействовать с двухточечными. Коллективная передача
- 7. Коллективные обмены 2008 Виды коллективных обменов: широковещательная передача - выполняется от одного процесса ко всем; распределение
- 8. Коллективные обмены 2008 Широковещательная рассылка
- 9. Коллективные обмены 2008 Широковещательная рассылка выполняется подпрограммой: int MPI_Bcast(void *buffer, int count, MPI_Datatype datatype, int root,
- 10. Коллективные обмены 2008 Пример 1 использования широковещательной рассылки #include "mpi.h" #include int main(int argc,char *argv[]) {
- 11. Коллективные обмены 2008 MPI_Bcast(&data, count, MPI_BYTE, 0, MPI_COMM_WORLD); printf("received: %s\n", data); } MPI_Finalize(); return 0; }
- 12. Коллективные обмены 2008 Пример 2 использования широковещательной пересылки #include "mpi.h" #include int main(int argc, char *argv[])
- 13. Коллективные обмены 2008 printf("Enter a, b, n\n"); scanf("%f %f %i", &a, &b, &n); MPI_Bcast(&a, count, MPI_FLOAT,
- 14. Коллективные обмены 2008 Распределение данных int MPI_Scatter(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *rcvbuf, int rcvcount,
- 15. Коллективные обмены 2008 Процесс с рангом root распределяет содержимое буфера передачи sendbuf среди всех процессов. Содержимое
- 16. Коллективные обмены 2008 Сбор данных Сбор данных от остальных процессов в буфер главной задачи выполняется подпрограммой:
- 17. Коллективные обмены 2008 Порядок склейки определяется рангами процессов, то есть в результирующем наборе после данных от
- 18. Коллективные обмены 2008 Сбор данных
- 19. Коллективные обмены 2008 Сбор данных от всех процессов и распределение их всем процессам: int MPI_Allgather(void *sendbuf,
- 20. Коллективные обмены 2008 Блок данных, переданный от j-го процесса, принимается каждым процессом и размещается в j-м
- 21. Коллективные обмены 2008 Операция приведения Операция приведения, результат которой передается одному процессу int MPI_Reduce(void *buf, void
- 22. Коллективные обмены 2008 MPI_Reduce применяет операцию приведения к операндам из buf, а результат каждой операции помещается
- 23. Коллективные обмены 2008 Пример 1 использования операции редукции В этой программе сначала создается подгруппа, состоящая из
- 24. Коллективные обмены 2008 #include "mpi.h" #include int main(int argc,char *argv[]) { int myrank, i; int count
- 25. Коллективные обмены 2008 if(myrank != MPI_UNDEFINED) { MPI_Reduce(&sendbuf, &recvbuf, count, MPI_INT, MPI_SUM, root, subcomm); if(myrank ==
- 26. Коллективные обмены 2008 Предопределенные операции приведения
- 27. Коллективные обмены 2008 Допускается определение собственных операций приведения. Для этого используется подпрограмма: int MPI_Op_create(MPI_User_function *function, int
- 28. Коллективные обмены 2008 Описание типа пользовательской функции выглядит следующим образом: typedef void (MPI_User_function)(void *a, void *b,
- 29. Коллективные обмены 2008 После завершения операций приведения пользовательская функция должна быть удалена. Удаление пользовательской функции выполняется
- 30. Коллективные обмены 2008 Пример использования операции приведения: вычисление числа π методом Монте-Карло. Два файла pi_compute.c и
- 31. Коллективные обмены 2008 srandom (mytid); avepi = 0; for (i = 0; i homepi = dboard(trials);
- 32. Коллективные обмены 2008 #include #define sqr(x) ((x)*(x)) float mc_trials(int trials) { double x_coord, y_coord, pi, r;
- 33. Коллективные обмены 2008 pi = 4.0 * (double)score/(double)trials; return(pi); }
- 34. Коллективные обмены 2008 Операция сканирования Операции сканирования (частичной редукции) выполняются следующей подпрограммой: int MPI_Scan(void *sendbuf, void
- 35. Коллективные обмены 2008 При выполнении операции сканирования в буфере приёма процесса с рангом i будут содержаться
- 36. Коллективные обмены 2008 Векторная операция распределения данных Векторная подпрограмма распределения данных: int MPI_Scatterv(void *sendbuf, int *sendcounts,
- 37. Коллективные обмены 2008 Входные параметры: displs - целочисленный массив, длина которого равна количеству процессов в коммуникаторе.
- 38. Коллективные обмены 2008 Векторная операция сбора данных Сбор данных от всех процессов в заданном коммуникаторе и
- 39. Коллективные обмены 2008 Пересылка данных по схеме «каждый - всем» int MPI_Alltoall(void *sendbuf, int sendcount, MPI_Datatype
- 40. Коллективные обмены 2008 Векторными версиями MPI_Allgather и MPI_Alltoall являются подпрограммы MPI_Allgatherv и MPI_Alltoallv. Векторные операции позволяют
- 41. Коллективные обмены 2008 Синхронизация Синхронизация с помощью «барьера» выполняется с помощью подпрограммы: int MPI_Barrier(MPI_Comm comm) MPI_Barrier(comm,
- 42. 2008 В этой лекции мы рассмотрели: особенности и свойства коллективных обменов; различные операции коллективного обмена –
- 43. 2008 Задания для самостоятельной работы Решения следует высылать по электронной почте: [email protected]
- 44. 2008 Задания для самостоятельной работы Составьте алгоритм и напишите параллельную программу вычисления произведения матрицы на вектор.
- 45. 2008 Задания для самостоятельной работы Напишите параллельную программу вычисления произведения матрицы на матрицу. Используйте ленточную декомпозицию
- 47. Скачать презентацию