编写一个并行的向量加法程序 1) 读向量,并利用MPI_Scatter将读取的向量分发给各进程 2) 打印向量,并利用MPI_Gather将各进程的结果汇总 3) 实现向量加法并行函数
时间: 2024-06-01 22:11:33 浏览: 20
#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>
#define N 10
void add_vectors(int *vec1, int *vec2, int *result, int n);
int main(int argc, char** argv) {
int rank, size;
int *vec1, *vec2, *result;
int i;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
if (rank == 0) {
vec1 = (int*)malloc(N * sizeof(int));
vec2 = (int*)malloc(N * sizeof(int));
result = (int*)malloc(N * sizeof(int));
printf("Input vector 1:\n");
for (i = 0; i < N; i++) {
scanf("%d", &vec1[i]);
}
printf("Input vector 2:\n");
for (i = 0; i < N; i++) {
scanf("%d", &vec2[i]);
}
}
int *local_vec1 = (int*)malloc(N / size * sizeof(int));
int *local_vec2 = (int*)malloc(N / size * sizeof(int));
int *local_result = (int*)malloc(N / size * sizeof(int));
MPI_Scatter(vec1, N / size, MPI_INT, local_vec1, N / size, MPI_INT, 0, MPI_COMM_WORLD);
MPI_Scatter(vec2, N / size, MPI_INT, local_vec2, N / size, MPI_INT, 0, MPI_COMM_WORLD);
add_vectors(local_vec1, local_vec2, local_result, N / size);
MPI_Gather(local_result, N / size, MPI_INT, result, N / size, MPI_INT, 0, MPI_COMM_WORLD);
if (rank == 0) {
printf("Result vector:\n");
for (i = 0; i < N; i++) {
printf("%d ", result[i]);
}
printf("\n");
free(vec1);
free(vec2);
free(result);
}
free(local_vec1);
free(local_vec2);
free(local_result);
MPI_Finalize();
return 0;
}
void add_vectors(int *vec1, int *vec2, int *result, int n) {
int i;
for (i = 0; i < n; i++) {
result[i] = vec1[i] + vec2[i];
}
}
相关推荐
![text/x-c](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)