gpt4 book ai didi

c++ - 为什么在尝试实现 OpenMPI 时设置单元数

转载 作者:行者123 更新时间:2023-11-28 04:59:47 24 4
gpt4 key购买 nike

我正在尝试学习如何使用 OpenMPI 并遇到了这个示例代码

#include "mpi.h”
int main(int argc, char **argv)
{
// Call MPI initialization
MPI_Init(&argc, &argv);

// Get my processor ID and number of processor
int myProcID;
int numProcs;
MPI_Comm_rank(MPI_COMM_WORLD, &myProcID);
MPI_Comm_size(MPI_COMM_WORLD, &numProcs);

// Set number of cells from command line argument
int numCells = atoi(argv[1]);

<etc…>

// Find which piece of the integral this
// processor is responsible for
int numCellsPerProc = numCells/numProcs;
int myStart = myProcID * numCellsPerProc;
int myEnd = myStart + numCellsPerProc;

// Account for unequal load by making sure
// last processor has correct end
if (myProcID == numProcs - 1) myEnd = numCells;
// Loop over cells and compute integral
// using trapezoidal rule
double myResult = 0.0;
for (int i = myStart; i < myEnd; ++i)
{
double xL = xMin + i*dx;
double xR = xL + dx;
myResult += 0.5 * (myFunction(xL)+myFunction(xR)) * dx;
}

// Sum result across processors
double totalResult;
MPI_Reduce(&myResult, &totalResult, 1, MPI_DOUBLE, MPI_SUM,
0, MPI_COMM_WORLD);

// Print the result, but only from root processor
if (myProcID == 0)
{
std::cout << "result = ";
std::cout << std::fixed << std::setprecision(10)
<< totalResult << std::endl;
}

// Call MPI_Finalize
MPI_Finalize();

return 0;
}

<etc>

请原谅我对处理器实际架构的无知。为什么示例代码设置单元格数?我认为每个处理器作为一个整体一次负责一项工作?
我根本不明白这些台词......

  // Set number of cells from command line argument
int numCells = atoi(argv[1]);

<etc…>

// Find which piece of the integral this
// processor is responsible for
int numCellsPerProc = numCells/numProcs;
int myStart = myProcID * numCellsPerProc;
int myEnd = myStart + numCellsPerProc

最佳答案

这取决于命令行参数 -- argv[1] -- 每个节点有多少作业(例如,在 OpenMPI 中,您可以通过 -N 指定每个节点的作业数)。此外,您可以生成线程以使用多核处理器。

实际上,您正在计算积分
\int_0^cell myFunction(x) \mathrm{d}x .
你 split 积分区间[0,cell]进入numProcs部分,因此每个作业都计算他的部分,最后,所有内容都通过归约求和。

(单词 cell - 在这种情况下不是一个好的变量名)

关于c++ - 为什么在尝试实现 OpenMPI 时设置单元数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46351909/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com