MPI_File_open挂起

时间:2013-07-08 01:21:49

标签: mpi mpi-io

我怀疑我没有正确地给出文件路径 - 我不是一个linux家伙,所以我不知道真正的错误 - 代码:

int main(int argc, char** argv) {
    // ...
    char *filename = argv[3];

    MPI_Init(&argc, &argv);
    const int rank = get_rank();
    if (!rank) printf("%s\n", argv[3]); // /home/users1/stdxx/public_html/grid.txt
    // ...
    MPI_File * fh;
    if (!rank) {
        fprintf(stderr, "%d\n", rank); // I see this : 0
        if (MPI_File_open(MPI_COMM_WORLD, filename, MPI_MODE_RDONLY, 
                                            MPI_INFO_NULL, fh) != MPI_SUCCESS) {
            fprintf(stderr, "Cannot open file %s\n", filename); // never seen
        }
    // rest runs fine if I comment out the MPI_File_open call
    }


int get_rank() {
    int rank = -1;
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    return rank;
}
即使我提供了无效的路径,

也会挂起 如果我注释掉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_html/grid.txt形式的路径,它就会以Cannot open file sftp://stdxxxxx@linux11.di.uoa.gr/home/users1/stdxxxxx/public_html/grid.txt

的方式开心

为什么?

通过linux机器集群中的netbeans远程运行。命令:

  

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

"${OUTPUT_PATH}"是可执行文件

mpirun --versionmpiexec --version会产生invalid "local" arg: --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)

1 个答案:

答案 0 :(得分:0)

获胜者是:

MPI_File * fh = malloc(sizeof * fh);

argghh - C的简单乐趣

当我给它sftp: uris(我猜因为它永远不会到达指针部分)时,仍然感兴趣它为什么不会崩溃 - 而且构造文件名的正确方法是什么 1 - 所以我还没有接受我的回答。

1 :来自here

  

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

  

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