C++ 使用多台计算机执行失败
与我的工作(此处)相关,我现在正在测试一个简单代码的执行,该代码执行以下操作:C++ 使用多台计算机执行失败,c++,boost,graph,mpi,qsub,C++,Boost,Graph,Mpi,Qsub,与我的工作(此处)相关,我现在正在测试一个简单代码的执行,该代码执行以下操作: 初始化boost mpi环境 将图形从文件加载到分布式邻接列表中 最后,在每台机器上对其执行2个简单操作:计算边数并计算聚类系数 代码如下: #include "Common.h" #include "GraphFileReader.h" #include "GraphNeighbors.h" #include <boost/graph/metis.hpp> #include <boost/mp
- 初始化boost mpi环境
- 将图形从文件加载到分布式邻接列表中
- 最后,在每台机器上对其执行2个简单操作:计算边数并计算聚类系数
#include "Common.h"
#include "GraphFileReader.h"
#include "GraphNeighbors.h"
#include <boost/graph/metis.hpp>
#include <boost/mpi/environment.hpp>
#include <boost/mpi/communicator.hpp>
#include <time.h>
int main(int argc, char *argv []){
// Start mpi enviroment
boost::mpi::environment env(argc, argv);
boost::mpi::communicator world;
// Create the graph
GraphFileReader *graphFileReader;
undirectedAdjacencyList graph;
if(process_id(graph.process_group()) == 0){
// Load the graph's path
graphFileReader = new GraphFileReader(argv[1]);
// Read the graph file and adds the vertices and edges
graphFileReader->loadGraph(graph);
}
// Wait until the process 0 has finished loading the graph
world.barrier();
synchronize(graph.process_group());
GraphNeighbors graphNeighbors;
// Now each machine should process it's own graph piece
graphNeighbors.countEdges(graph);
graphNeighbors.clusteringCoefficient(graph);
// Wait for the other processes before finishing
world.barrier();
synchronize(graph.process_group());
cout << "\n process: " << world.rank() <<" finishing\n" << std::endl;
我的导师和我认为这可能是因为一台机器结束了,而另一台机器仍在执行它的操作,所以我们添加了同步和屏障(我实际上不知道两者之间的区别,所以我测试了几个结果相同的组合)
如果您需要其余代码(Common.h、GraphFileReader或GraphNeighbors),我可以将其上载并在此处发布链接,以避免大量发布。由于您正在考虑同步错误,我将简化您收到的错误消息: 图表:(boost)邻接列表。hpp:2679: boost::out_边(顶点描述符v,邻接列表&g):断言'v.owner==g.processor()'失败 等级1的退出状态:被信号6杀死 信号6由
abort()
触发,这反过来又由上述断言失败触发
我对这个图形库一无所知,但据我所知,您的处理器1似乎正在调用
out\u edges
并传递属于处理器0的顶点v
。由于您正在考虑同步错误,我将简化您收到的错误消息:
图表:(boost)邻接列表。hpp:2679:
boost::out_边(顶点描述符v,邻接列表&g):断言'v.owner==g.processor()'失败
等级1的退出状态:被信号6杀死
信号6由abort()
触发,这反过来又由上述断言失败触发
我对这个图形库一无所知,但据我所知,您的处理器1正在调用
out\u edges
并传递属于处理器0的顶点v
。非常感谢,我将尝试解决这个问题!非常感谢,我会努力解决这个问题!
graphs: /usr/include/boost/graph/distributed/adjacency_list.hpp:2679:
std::pair<typename boost::adjacency_list<OutEdgeListS, boost::distributedS<ProcessGroup,
InVertexListS, InDistribution>, DirectedS, VertexProperty, EdgeProperty, GraphProperty,
EdgeListS>::out_edge_iterator, typename boost::adjacency_list<OutEdgeListS,
boost::distributedS<ProcessGroup, InVertexListS, InDistribution>, DirectedS,
VertexProperty, EdgeProperty, GraphProperty, EdgeListS>::out_edge_iterator>
boost::out_edges(typename boost::adjacency_list<OutEdgeListS,
boost::distributedS<ProcessGroup, InVertexListS, InDistribution>, DirectedS,
VertexProperty, EdgeProperty, GraphProperty, EdgeListS>::vertex_descriptor, const
boost::adjacency_list<OutEdgeListS, boost::distributedS<ProcessGroup, InVertexListS,
InDistribution>, DirectedS, VertexProperty, EdgeProperty, GraphProperty, EdgeListS>&) [with
OutEdgeListS = boost::vecS, ProcessGroup = boost::graph::distributed::mpi_process_group,
InVertexListS = boost::vecS, InDistribution = boost::defaultS, DirectedS =
boost::undirectedS, VertexProperty = Node, EdgeProperty = boost::no_property, GraphProperty
= boost::no_property, EdgeListS = boost::listS]: Assertion `v.owner == g.processor()' failed.
_________________________________________________________________
I'm process: 0
I'm process: 1
Number of edges: 4
0.37694 milliseconds
Number of edges: 2
0.16284 milliseconds
rank 1 in job 1 compute-1-4_49342 caused collective abort of all ranks
exit status of rank 1: killed by signal 6
_________________________________________________________________
Epilogue Args:
Job ID: 138573.tucan
User ID: ***
Group ID: ***
Job Name: mpiGraphs.job
Resource List: 5746
Queue Name: ncpus=1,neednodes=2:ppn=2,nodes=2:ppn=2
Account String: cput=00:00:00,mem=420kb,vmem=13444kb,walltime=00:00:02
Date: Thu Mar 1 14:28:19 CET 2012
_________________________________________________________________
I'm process: 0
Number of edges: 6
8.46696 milliseconds
The network average clustering coefficient is: 0.53333
0.12708 milliseconds
process: 0 finishing