Содержание
- 2. Основные понятия Топология – механизм сопоставления процессам коммуникатора альтернативной схемы адресации В MPI топологии – виртуальные
- 3. Определение типа топологии MPI_Topo_test(MPI_Comm comm, int *status) Возможные значения status: MPI_GRAPH MPI_CART MPI_UNDEFINED
- 4. Создание коммуникатора с декартовой топологией MPI_Cart_create(MPI_Comm comm_old, int ndims, int *dims, int *periods, int reorder, MPI_Comm
- 5. Коммуникатора с декартовой топологией Табл. 1. Преобразование индексов
- 6. Определение оптимальной конфигурации сетки MPI_Dims_create(int nnodes, int ndims, int *dims) Вычисляются только те компоненты для которых
- 7. Определение оптимальной конфигурации сетки: пример Табл. 2. Примеры работы функции
- 8. Получение числа измерений и другой информации MPI_Cartdim_get(MPI_Comm comm, int *ndims) MPI_Cart_get(MPI_Comm comm, int ndims, int *dims,
- 9. Получение идентификатора процесса по его координатам MPI_Cart_rank(MPI_Comm comm, int *coords, int *rank) Для измерений с периодическими
- 10. Определение координат процесса по его идентификатору MPI_Cart_coords(MPI_Comm comm, int rank, int ndims, int *coords)
- 11. Определение параметров сдвига данных MPI_Cart_shift(MPI_Comm comm, int direction, int disp, int *rank_source, int *rank_dest) MPI_PROC_NULL
- 12. Пример: Allreduce (1) Рис. 1. Схемы взаимодействий
- 13. int dest[][]={{1,0,3,2,5,4,7,6}, {2,3,0,1,6,7,4,5}, {4,5,6,7,0,1,2,3}}; sum = data; for(int i=0; i MPI_Send(sum,…dest[i][rank],…); MPI_Recv(r_data,…dest[i][rank],…); sum += r_data; }
- 14. MPI_Comm d_topo; int dims[3] = {2,2,2}; int periods[3] = {1,1,1}; int reorder = 0, src, dest;
- 15. Выделение подпространства в декартовой топологии MPI_Cart_sub(MPI_Comm comm, int *remain_dims, MPI_Comm *newcomm) remain_dims[i] = true remain_dims[i] =
- 16. Создание коммуникатора с топологией графа int MPI_Graph_create( MPI_Comm comm, int nnodes, int *index, int *edges, int
- 17. Создание коммуникатора с топологией графа (пример) int index[4] = { 2, 3, 4, 6 }; int
- 18. Непосредственные соседи процесса MPI_Graph_neighbors_count( MPI_Comm comm, int rank, int *neighbors_count) MPI_Graph_neighbors( MPI_Comm comm, int rank, int
- 19. Параметры графа MPI_Graphdims_get(MPI_Comm comm, int *nnodes, int *nedges) MPI_Graph_get(MPI_Comm comm, int nnodes, int nedges, int *index,
- 20. Пример создания и использования топологии типа «граф» Рис. 3. Общение процессов по коммуникационной схеме «master-slave»
- 21. Пример создания и использования топологии типа «граф» program example_graph include 'mpif.h' integer ierr, rank, rank1, i,
- 22. Пример создания и использования топологии типа «граф» size = 5 do i = 1, size index(i)
- 23. Пример создания и использования топологии типа «граф» call MPI_GRAPH_CREATE(MPI_COMM_WORLD, size, index, & edges, .TRUE., comm_graph, ierr)
- 24. Пример создания и использования топологии типа «граф» call MPI_GRAPH_NEIGHBORS_COUNT(comm_graph, rank, & num, ierr) call MPI_GRAPH_NEIGHBORS(comm_graph, rank,
- 25. Пример создания и использования топологии типа «граф» rank = 0 call MPI_SENDRECV(rank, 1, MPI_INTEGER, 1, 1,
- 26. Пример создания и использования топологии типа «граф» rank = 1 call MPI_SENDRECV(rank, 1, MPI_INTEGER, 0, 1,
- 28. Скачать презентацию