计算前缀和。进程0按顺序读取n个数后,分别计算n个数的前缀和,并将任务分配到各个进程,最后进程0打印出各前缀和。在你的主目录下,保存的文件名为prefix.c。
时间: 2024-02-16 15:00:31 浏览: 77
简单计算器 中缀转后缀 求和
好的,以下是计算前缀和的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>
int main(int argc, char *argv[]) {
int n = 10; // 假设有10个数
int nums[n]; // 存放输入的n个数
int prefix_sum[n]; // 存放计算好的前缀和
int i, sum = 0, rank;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
if (rank == 0) {
printf("请输入 %d 个数:\n", n);
for (i = 0; i < n; i++) {
scanf("%d", &nums[i]);
}
}
MPI_Bcast(nums, n, MPI_INT, 0, MPI_COMM_WORLD);
for (i = 0; i < n; i++) {
sum += nums[i];
prefix_sum[i] = sum;
}
MPI_Gather(prefix_sum, n, MPI_INT, prefix_sum, n, MPI_INT, 0, MPI_COMM_WORLD);
if (rank == 0) {
printf("前缀和为:\n");
for (i = 0; i < n; i++) {
printf("%d ", prefix_sum[i]);
}
printf("\n");
}
MPI_Finalize();
return 0;
}
```
这里我们使用了 MPI 的广播、聚集等操作,将任务分配到各个进程并计算前缀和,最后再将结果聚集到进程0中打印。注意在进程0中读取输入的数值,其他进程中使用 MPI_Bcast() 广播输入的数值。
阅读全文