如何在部分代码中有效地使用MPI?

如何在部分代码中有效地使用MPI?,mpi,Mpi,我的应用程序涉及在串行时间执行中运行myfuns。它调用dothings…,其中有一个对象实例和其他传递给它的对象实例。这个函数包含一个循环,每个循环都执行广度优先搜索,这非常耗时。我使用OpenMP进行循环,但它的速度只提高了一点点,还不够好。我正在考虑使用MPI并行来处理更多的进程,但不确定如何有效地使用它来处理嵌入序列代码深处的这部分代码 void dothings (object obji...) { std::vector retvec; for (i = 0; i <

我的应用程序涉及在串行时间执行中运行myfuns。它调用dothings…,其中有一个对象实例和其他传递给它的对象实例。这个函数包含一个循环,每个循环都执行广度优先搜索,这非常耗时。我使用OpenMP进行循环,但它的速度只提高了一点点,还不够好。我正在考虑使用MPI并行来处理更多的进程,但不确定如何有效地使用它来处理嵌入序列代码深处的这部分代码

void dothings (object obji...) {
   std::vector retvec;
   for (i = 0; i < somenumber; i++) {
     /* this function involves breadth first search using std:queue */
     retval = compute(obji, i);
     retvec.push_back(retval);
   }
}

/* myfuns() gets called in a sequential manner */
void myfuns() {
  dothings(objectInstance,...)
}

在考虑并行计算之前,第一个问题是目前代码的效率如何?。例如,在您的代码片段中,使用reserve会有什么效果,比如std::vector retvec;retvec.reservesomenumber;,避免不必要的重新分配?如果没有关于你问题的更多细节,就很难回答你的问题。在单个节点上,我不知道MPI是否比OpenMP更有效。@francis,谢谢你的建议,我专注于搜索。但正如你所说,改变所有需要重新分配的地方是值得的。