Lect_6_24112015 (MPI), страница 3
Описание файла
Файл "Lect_6_24112015" внутри архива находится в папке "MPI". PDF-файл из архива "MPI", который расположен в категории "". Всё это находится в предмете "параллельное программирование для высокопроизводительных вычислительных систем" из 11 семестр (3 семестр магистратуры), которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 3 страницы из PDF
прогр. длявысокопроизводительных систем",24.11.201556Алгоритм Фокса (1)typedef struct {int p; /* Общее число процессов */MPI_Comm comm; /* Коммуникатор для сетки */MPI_Comm row_comm; /* Коммуникатор строки */MPI_Comm col_comm; /* Коммуникатор столбца */int q; /* Порядок сетки */int my_row; /* Номер строки */int my_col; /* Номер столбца */int my_rank; /* Ранг процесса в коммуникаторе сетки */} GRID-INFO-TYPE;Лекции спецкурс "Пар.
прогр. длявысокопроизводительных систем",24.11.201557Алгоритм Фокса (2)void Setvup_grid(GRID_INFO_TYPE* grid) {intintintintintold_rank;dimensions[2];periods[2];coordinates[2];varying-coords[2];/* Настройка глобальной информации о сетке */MPI_Comm_size(MPI_COMM_WORLD, &(grid->p));MPI_Comm_rank(MPI_COMM_WORLD, &old_rank);grid->q = (int) sqrt((double) grid->p);dimensions[0] = dimensions[1] = grid->q;periods[0] = periods[1] = 1;MPI_Cart_create(MPI_COMM_WORLD, 2, dimensions, periods, 1,&(grid->comm));Лекции спецкурс "Пар. прогр. длявысокопроизводительных систем",24.11.201558Алгоритм Фокса (3)MPI_Comm_rank(grid->comm, &(grid->my_rank));MPI_Cart_coords(grid->comm, grid->my_rank, 2, coordinates);grid->my_row = coordinates[0];grid->my_col = coordinates[1];/* Настройка коммуникаторов для строк и столбцов */varying_coords[0] = 0; varying_coords[1] = 1;MPI_Cart_sub(grid->comm, varying_coords, &(grid->row_comm));varying_coords[0] = 1; varying_coords[1] = 0;MPI_Cart_sub(grid->comm, varying_coords, &(grid->col_comm));} /* Setup_grid */Лекции спецкурс "Пар.
прогр. длявысокопроизводительных систем",24.11.201559Алгоритм Фокса (4)void Fox(int n, GRID_INFO_TYPE* grid, LOCAL_MATRIX_TYPE*local_A,LOCAL_MATRIX_TYPE* local_B, LOCAL_MATRIX_TYPE*local_C){LOCAL_MATRIX_TYPE* temp_A;int step;int bcast_root;int n_bar; /* порядок подматрицы = n/q */int source;int dest;int tag = 43;MPI_Status status;n_bar = n/grid->q;Set_to_zero(local_C);Лекции спецкурс "Пар. прогр. длявысокопроизводительных систем",24.11.201560Алгоритм Фокса (5)/* Вычисление адресов для циклического сдвига B */source = (grid->my_row + 1) % grid->q;dest = (grid->my_row + grid->q-1) % grid->q;/* Выделение памяти для рассылки блоков A */temp_A = Local_matrix_allocate(n_bar);for (step = 0; step < grid->q; step++) {bcast_root = (grid->my_row + step) % grid->q;if (bcast_root == grid->my_col) {MPI_Bcast(local_A, 1, DERIVED_LOCAL_MATRIX, bcast_root,grid->row_comm);Local_matrix_multiply(local_A, local_B, local_C);Лекции спецкурс "Пар.
прогр. длявысокопроизводительных систем",24.11.201561Алгоритм Фокса (6)} else {MPI_Bcast(temp_A, 1, DERIVED_LOCAL_MATRIX, bcast_root,grid->row_comm);Local_matrix_multiply(temp_A, local_B, local_C);}MPI_Send(local_B, 1, DERIVED_LOCAL_MATRIX, dest, tag,grid->col_comm);MPI_Recv(local_B, 1, DERIVED_LOCAL_MATRIX, source, tag,grid->col_comm, &status);} /*for*/}/*Fox*/Лекции спецкурс "Пар. прогр. длявысокопроизводительных систем",24.11.201562Задание .Реализовать блочные параллельныеалгоритмы матричного умноженияФокса и Кеннона Провести исследованиеэффективности разработанныхалгоритмов.Лекции спецкурс "Пар. прогр. длявысокопроизводительных систем",24.11.201563.