MPI\u文件\u打开挂起

MPI\u文件\u打开挂起,mpi,mpi-io,Mpi,Mpi Io,我怀疑我没有正确地给出文件路径-我不是linux爱好者,所以我不知道到底出了什么问题-代码: int main(int argc,char**argv){ // ... char*filename=argv[3]; MPI_Init(&argc,&argv); const int rank=get_rank(); 如果(!rank)printf(“%s\n”,argv[3]);///home/users1/stdxx/public_html/grid.txt // ... MPI_文件*fh;

我怀疑我没有正确地给出文件路径-我不是linux爱好者,所以我不知道到底出了什么问题-代码:

int main(int argc,char**argv){
// ...
char*filename=argv[3];
MPI_Init(&argc,&argv);
const int rank=get_rank();
如果(!rank)printf(“%s\n”,argv[3]);///home/users1/stdxx/public_html/grid.txt
// ...
MPI_文件*fh;
如果(!秩){
fprintf(stderr,“%d\n”,rank);//我看到了:0
如果(MPI文件)打开(仅限MPI通信世界、文件名、MPI模式、,
MPI\u信息为空,fh)!=MPI\u成功){
fprintf(stderr,“无法打开文件%s\n”,文件名);//从未见过
}
//如果我注释掉MPI\u File\u open调用,rest运行正常
}
int get_rank(){
整数秩=-1;
MPI通信等级(MPI通信世界和等级);
返回等级;
}
即使我给出的路径无效,也会挂起
如果我注释掉
If(!rank)
它会崩溃:

rank 6 in job 54  linux21_60559   caused collective abort of all ranks
  exit status of rank 6: killed by signal 11 
rank 8 in job 54  linux21_60559   caused collective abort of all ranks
  exit status of rank 8: killed by signal 11 
rank 5 in job 54  linux21_60559   caused collective abort of all ranks
  exit status of rank 5: killed by signal 9 
rank 4 in job 54  linux21_60559   caused collective abort of all ranks
  exit status of rank 4: killed by signal 11 
rank 2 in job 54  linux21_60559   caused collective abort of all ranks
  exit status of rank 2: killed by signal 9 
rank 1 in job 54  linux21_60559   caused collective abort of all ranks
  exit status of rank 1: killed by signal 9 
另一方面,如果我给它一个
sftp://stdxxxxx@linux11.di.uoa.gr/home/users1/stdxxxxx/public\u html/grid.txt
它会以一种愉快的方式打开文件sftp://stdxxxxx@linux11.di.uoa.gr/home/users1/stdxxx/public\u html/grid.txt

为什么?

在linux计算机群集中通过netbeans远程运行此命令。命令:

/usr/local/mpich2/bin/mpiexec-machinefilemachines-np9“${OUTPUT_PATH}”84 9/home/users1/stdxxxxx/public_html/grid.txt

“${OUTPUT\u PATH}”
是可执行文件

mpirun--version
mpiexec--version
导致
无效的“本地”参数:--version

编辑:

mpicc -v
mpicc for 1.1.1p1
Using built-in specs.
Target: i486-linux-gnu
Configured with: ../src/configure -v --enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.2 --program-suffix=-4.2 --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --enable-targets=all --enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu
Thread model: posix
gcc version 4.2.4 (Ubuntu 4.2.4-1ubuntu4)
获胜者是:

MPI_文件*fh=malloc(sizeof*fh);
argghh-C的简单乐趣

当我给它
sftp:
uri时,它为什么不会崩溃(我猜是因为它永远不会到达指针部分)以及构建文件名1的正确方法是什么?所以我还不接受我的答案

1:发件人:

在filename参数中指定文件名的格式取决于实现,必须由实现记录

在某些MPI实现中,文件命名空间可能与所有应用程序的所有进程不同。例如,“c:\tmp\foo”可能表示不同进程上的不同文件,或者单个文件可能有许多名称,具体取决于进程位置。用户负责确保filename参数引用单个文件,因为实现可能无法检测此类命名空间错误


MPI\u File\u open
是一个集合例程,指定的通信器中的所有列组都必须调用它。您将调用限制为仅
rank==0
,因此它挂起。@Hristo:这解决了我最后的疑问-谢谢-在构造这些文件名的过程中有任何注释吗?您可以将它们作为可能的副本发布