Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабы по ПарАлг 2024 / Baraeva_Elizaveta_lb7

.pdf
Скачиваний:
1
Добавлен:
09.09.2026
Размер:
397 Кб
Скачать
☆
11
printf("Введите матрицу A по строкам:\n"); for (int i = 0; i < m * m; i++) {
scanf("%d", &a[i]); }
printf("Введите матрицу B по строкам:\n");
for (int i = 0; i < m * m; i++) { scanf("%d", &b[i]);
}
MPI_Bcast(&m, 1, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast(&block_size, 1, MPI_INT, 0, MPI_COMM_WORLD);
}
int *local_a = malloc(block_size * block_size * sizeof(int)); int *local_b = malloc(block_size * block_size * sizeof(int));
int *local_c = calloc(block_size * block_size, sizeof(int));
MPI_Datatype block_type, resized_block_type; MPI_Type_vector(block_size, block_size, m, MPI_INT, &block_type);
MPI_Type_create_resized(block_type, 0, sizeof(int), &resized_block_type); MPI_Type_commit(&resized_block_type);
MPI_Comm cart_comm;
create_cartesian_topology(&cart_comm, p);
scatter_matrices(a, b, block_size, m, proc_rank, p, local_a, local_b, resized_block_type);
if (proc_rank == 0) start_time = MPI_Wtime();
fox_algorithm(cart_comm, block_size, p, local_a, local_b, local_c);
if (proc_rank == 0) {
end_time = MPI_Wtime(); printf("The program has taken %lf seconds\n", end_time - start_time);
}
gather_result(c, block_size, m, proc_rank, p, local_c, resized_block_type);
MPI_Barrier(MPI_COMM_WORLD);
printf("Матрица С:\n"); print_matrix(c, m);
if (proc_rank == 0) {
free(a);
free(b); free(c);
}
free(local_a); free(local_b);
free(local_c);
MPI_Comm_free(&cart_comm); MPI_Type_free(&block_type);
MPI_Type_free(&resized_block_type); MPI_Finalize(); return 0; }
Соседние файлы в папке Лабы по ПарАлг 2024