An upgrade breaks input redirection

Pete Wyckoff pw at osc.edu
Wed Jul 14 16:10:05 EDT 2004


bill at Princeton.EDU wrote on Tue, 13 Jul 2004 15:49 -0400:
> Upgrade of a cluster to Intel v8 compilers has now broken input 
> redirection which was functioning with a patched version of 
> OpennPBS_2_3_16 and mpiexec-0.73 running under a Linux 2.4.20-18.7smp 
> kernel.
[..]
> When run with mpiexec the error file looks like this:
> forrtl: Illegal seek
> forrtl: severe (39): error during read, unit 5, file stdin
> Image              PC        Routine            Line        Source 
> 
> a.out              08087C75  Unknown               Unknown  Unknown
> a.out              08058DF1  Unknown               Unknown  Unknown
> a.out              080593E8  Unknown               Unknown  Unknown
> a.out              0804CFA0  Unknown               Unknown  Unknown
> a.out              08049DA7  Unknown               Unknown  Unknown
> a.out              08049F94  Unknown               Unknown  Unknown
> a.out              42017589  Unknown               Unknown  Unknown
> a.out              08049C31  Unknown               Unknown  Unknown
> mpiexec: Warning: task 0 exited with status 39.
> 
> 
> But when run with ./a.out <inp all seems well.  The a.out exec was 
> compiled with the mpif90 command.  I don't know who is at fault here, 
> the compiler or mpiexec.  I have been told that old programs continue to 
> work, even with the newly compiled mpiexec, but once recompiled with the 
> v8 Intel compilers, all redirection breaks.

I can't figure out why a compiler upgrade would change behavior.
For what it's worth, we're using an early release of the 8.0 compilers,
20031231, and your test case continues to work fine here.

You can do "mpiexec strace ./a.out < inp" to see if you can catch it
doing a seek on the input stream (0).  That does not seem to happen
here, just some ioctls then reads.

Under the hood, what happens is the pbs_mom reads an environment
variable set up by mpiexec during the launch of a.out vi tm_spawn().
This envvar is a port number to which the mom connects the file
descriptor 0 of the to-be-spawned process.  The input is thus read
through a socket, not directly connected to a file, but that's how
it has been for years now with mpiexec and PBS.

Let me know if you get any more information on what's going on here.

		-- Pete



More information about the mpiexec mailing list