【发布时间】:2016-07-19 00:45:47
【问题描述】:
我正在尝试在没有 root 权限的旧集群上运行代码。因此,在头节点上我自己的文件夹中,我安装了 gcc 和 OpenMPI 的较新版本的本地副本,我正在使用它来编译我的代码。作为试验,我决定编写一个“hello world”程序并在集群上运行它。当我将此代码编译为
mpic++ --std=c++11 -L/home/sidk/libraries/gcc/lib64 -o mpitrial mpitrial.cpp
mpitrial.cpp 在哪里
int main(int argc, char *argv[])
{
int rank=0,size=0;
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&size);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
cout<<"Hello from "<<rank<<" of "<<size<<endl;
MPI_Finalize();
}
然后我通过 PBS 扭矩作业调度程序将这些过程提交到集群。但是,每个进程(可能在集群中的任何节点上)在运行时,都会向我发送一条错误消息:
/lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /shared/users/sidk/mpitrial)
这似乎是说每个进程都与较旧的 C++ 库链接(因为较新的库位于文件夹 /home/sidk/libraries/gcc/lib64 中,而不是上面显示的路径)。在头节点上,我更新了 LD_LIBRARY_PATH 以指向较新的 C++ 库的位置。
有人可以就如何解决此问题提供建议吗?
非常感谢您的帮助,
悉达多
【问题讨论】:
-
“所以我安装了新版本 gcc 的本地副本”......然后“我的猜测是这是因为每个进程都与旧的 C++ 库链接”。这两种说法相互矛盾。如果您使用新版本的 gcc 进行编译和构建,那么生成的可执行文件显然会与新的而非旧的 C++ 库链接。这个问题令人困惑。你需要说得更清楚。
-
您好,已编辑。我希望它更清楚。我同意生成的可执行文件应该链接到新的 C++ 库。当我在本地机器上简单地使用 mpirun 运行它时,它可以工作,但是当我通过作业调度程序将相同的代码发送到集群时,我得到了上面提到的错误。
标签: c++ parallel-processing cluster-computing openmpi