MPI_Dims_create在远程计算机上引发错误
MPI_Dims_create throws error on remote machine
作为算法的第一步,我正在尝试设置笛卡尔网格。在我的本地机器(带clang的OS X)上,我的代码运行。在研究集群(带有GNU的Linux)上,我得到了以下错误。
$mpirun -n 4 ./test.exe
[shas0137:67495] *** An error occurred in MPI_Dims_create
[shas0137:67495] *** reported by process [3694788609,1]
[shas0137:67495] *** on communicator MPI_COMM_WORLD
[shas0137:67495] *** MPI_ERR_DIMS: invalid topology dimension
[shas0137:67495] *** MPI_ERRORS_ARE_FATAL (processes in this communicator will now abort,
[shas0137:67495] *** and potentially your MPI job)
[shas0137:67491] 3 more processes have sent help message help-mpi-errors.txt / mpi_errors_are_fatal
[shas0137:67491] Set MCA parameter "orte_base_help_aggregate" to 0 to see all help / error messages
设置"porte_base_help.aggregate"参数只需重复错误消息4次(每个进程一次)
大多数MPI例程在文档中都有错误代码列表,但MPI_ERR_DIMS没有针对MPI_DIMS_create 列出
版本详细信息:本地
$ mpic++ -v
Apple LLVM version 9.0.0 (clang-900.0.37)
Target: x86_64-apple-darwin16.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
版本详细信息:研究集群
$ mpic++ -v
Using built-in specs.
COLLECT_GCC=/curc/sw/gcc/6.1.0/bin/g++
COLLECT_LTO_WRAPPER=/curc/sw/gcc/6.1.0/libexec/gcc/x86_64-pc-linux-gnu/6.1.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../gcc-6.1.0/configure --prefix=/curc/sw/gcc/6.1.0 --enable-languages=c,c++,fortran,go --disable-multilib --with-tune=intel
Thread model: posix
gcc version 6.1.0 (GCC)
MCVE
(或者尽我所能接近可验证的,因为这只发生在某些配置上)
#include <mpi.h>
int main(int argc, char* argv[]) {
MPI_Init(&argc, &argv);
MPI_Status st;
MPI_Comm comm = MPI_COMM_WORLD;
MPI_Comm grid_comm;
int size;
int err = MPI_Comm_size(comm, &size);
//Error handling
if (err != MPI_SUCCESS) {
return 1;
}
std::cout << size << std::endl;
//This call throws the error
int dims[3];
err = MPI_Dims_create(size, 3, dims);
//Error handling
if (err != MPI_SUCCESS) {
return 2;
}
MPI_Finalize();
return 0;
}
TLDR
我声明了dim数组,但没有初始化。在我的本地机器上,我碰巧得到了一块干净的内存。
为什么这很重要
我忽略了这一点的重要性,部分原因是我忽略了dims既是一个输入参数也是一个输出参数。我假设作为一个输出参数,dims中的任何值都会被MPI例程覆盖。
我查阅的原始文档(来自MPICH)非常简短。
MPI_Dims_create
输入/输出参数
调暗
大小为ndims的整数数组,指定中的节点数每个维度值0表示MPI_Dims_create应该填写一个合适的值(强调矿)
即非零值不会被例程覆盖。
更多信息请访问MPI论坛MPI文档:
6.5.2.笛卡尔便利函数:MPI_DIMS_CREATE
(…)调用方可以通过以下方式进一步约束此例程的操作指定阵列调光的元素。如果dims[i]设置为正number,例程不会修改维度中的节点数i;只有dims[i]=0的那些条目被调用修改。
dims[i]的负输入值是错误的。(…)
简而言之,在研究集群上,未初始化的dims数组中的值要么为负数,要么大于我试图分配的节点数。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- C++为什么我的编译器成功了,但我的计算机给出了调试错误?
- 系统错误:程序无法启动,因为您的计算机中缺少MSVCP140D.DLL。尝试重新安装该程序以解决此问题
- 致命错误LNK1112:在 npm 安装期间,模块计算机类型'X86'与目标计算机类型'x64'冲突
- 在计算机级别,应用程序以二进制方式运行,然后当发生运行时错误时,它如何呈现回错误代码
- C MSVCP120D.DLLL在您的计算机错误VS2017中缺少
- 如何在Windows 10上修复Visual Studio 2017中特定于计算机的虚幻IntelliSense错误
- 致命错误LNK1112:通过 vcvarsall .bat x86 运行构建'X86'模块计算机类型'x64'与目标计算机类型冲突
- gdal201.dll在Visual Studio 2012上的计算机错误中缺少
- 计算机中缺少"sfml-system.dll",错误
- QtGui4.lib(QtGui4.dll):致命错误LNK1112:模块计算机类型"X86"与目标计算机类型"x64"冲突
- 一台计算机中出现 msvs 2013 错误 C2057,另一台计算机中没有错误。这是怎么回事?
- Visual Studio c ++ LoadLibary 错误:程序无法启动,因为您的计算机中缺少 dll
- msvcprtd.lib(MSVCP100D.dll):致命错误LNK1112:模块计算机类型"X86"与目标计算机类型"x64"冲突
- 错误:类计算机组合已在 computer.obj 中定义
- Visual C++2010-将项目复制到其他计算机后出现多个未解决的外部错误
- 计算机视觉-在TensorFlow上运行C++inception-v3时出现非法指令错误
- 致命错误LNK1112:2010 年模块计算机类型"X86"与目标计算机类型"X64"冲突
- 错误 LNK1112:模块计算机类型"x64"与目标计算机类型"X86"冲突