c - MPI 广播和减少
问题描述
我在下面有这段代码..当我运行它时,mpiexec -n 2
我在控制台日志中得到输出,就像The input sequence is as follows: 0 1 2 3
我试图获得一个输出序列,0 2 6 12
该序列是PartialResult
在forloop中添加的 这是forloop的结果,我得到了这个对于每个进程,所以当我使用 2 个进程运行时,它会被打印两次。
Partial result in forloop: 0
Partial result in forloop: 1
Partial result in forloop: 3
Partial result in forloop: 6
我想添加它们,以便输出序列(当 rank == 0 时)返回0 2 6 12
. 这可以在 MPI_Reduce 步骤之后实现吗?
下面是整个 C 代码。
int main(void)
{
int my_rank, comm_sz;
int i;
int Count = 4;
int Number[4];
int PartialResult = 0;
int Result;
MPI_Init(NULL, NULL);
MPI_Comm_size(MPI_COMM_WORLD, &comm_sz);
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
if(my_rank == 0)
{
printf("The input sequence is as follows: \n");
for (i = 0; i < Count; i++)
{
Number[i] = i;
printf("%d ", Number[i]);
}
printf("\n");
}
// Process 0 sends data to all of the processes
MPI_Bcast(Number, Count, MPI_INT, 0, MPI_COMM_WORLD);
for (i = 0; i < Count; i++)
{
Number[i] += my_rank;
PartialResult += Number[i];
printf("\n");
printf("Partial result in forloop: %d \n", PartialResult);
}
MPI_Reduce(&PartialResult, &Result, 1, MPI_INT, MPI_PROD, 0, MPI_COMM_WORLD);
printf("partial result after reduce: %d \n", PartialResult);
// Print out the result
if (my_rank == 0) {
printf("\n");
for (i = 0; i < Count; i++) {
printf("\n");
printf("\n");
printf("Result[i]: %d \n", Result[i]);
}
}
MPI_Finalize();
return 0;
}
解决方案
推荐阅读
- android - Android 操作系统稳定性/压力测试
- amazon-athena - Connect to Athena using SQL workbench
- bash - Wrap a single oversize column with awk / bash (pretty print)
- pdf - convert PDF to EPS to PNG without text
- algorithm - STL algorithm for splitting a vector into multiple smaller ones based on lambda
- qt5 - 如何从另一个头文件触发插槽
- javascript - 重新加载页面时如何保持选定的选项卡打开
- html - 如何更改 ` 中标签的颜色
- ` 和 `
- `
- docker - 静态配置微服务在特定机器上运行
- javascript - 从包含对象的嵌套数组数组创建新对象