Добавил:
baraevaliza
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабы по ПарАлг 2024 / Baraeva_Elizaveta_lb7
.pdf
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
