我怀疑我没有正确地给出文件路径 - 我不是一个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 --version
或mpiexec --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)
答案 0 :(得分:0)
获胜者是:
MPI_File * fh = malloc(sizeof * fh);
argghh - C的简单乐趣
当我给它sftp:
uris(我猜因为它永远不会到达指针部分)时,仍然感兴趣它为什么不会崩溃 - 而且构造文件名的正确方法是什么 1 - 所以我还没有接受我的回答。
1 :来自here:
在filename参数中指定文件名的格式取决于实现,必须由实现记录。
和
在MPI的某些实现上,文件命名空间可能与所有应用程序的所有进程不同。例如,“c:\ tmp \ foo”可以表示不同进程上的不同文件,或者单个文件可能具有许多名称,具体取决于进程位置。用户负责确保filename参数引用单个文件,因为实现可能无法检测到此类命名空间错误。