[Swift-devel] problems with external dependencies

Michael Wilde wilde at mcs.anl.gov
Sun Mar 22 16:28:12 CDT 2009


Im trying to adapt the example of external dependencies in the user 
guide to enable me to wait for a procedure that does lot of parallel 
work to complete, and then analyze its results.

Im trying this approach, instead of ordinary dependencies, because the 
list of datasets produced in the parallel operations exceeds the command 
line length limits of wrapper.sh.

So Im trying to use externals to indicate that the parallel work has 
completed, then call a local analysis script with just one item from the 
parallel outputs, and this script will then locate all the other outputs 
with similar names by perusing a local directory passed as a string. 
(theres a few more elegant variants on this, but this simple hack will 
suffice for the current need).

Problem is that in the following test example to see if this will work, 
the script does not seem to wait for the echo app invocations to 
complete before running the final trace() function:

type file;

app (file o) echo (int i) { echo i stdout=@o; }

(external o) populateDatabase() {
   trace("I am populateDatabase");
   int j[] = [0:9];
   file r[];
   foreach i in j {
     r[i] = echo(i);
   }
}

analyseDatabase(external i) {
   trace("i am analyseDatabase");
}

external database;

database = populateDatabase();
analyseDatabase(database);

---

Instead, I get:

Swift svn swift-r2724 (swift modified locally) cog-r2333

RunID: 20090322-1553-ltauz86a
Progress:
SwiftScript trace: i am analyseDatabase
SwiftScript trace: I am populateDatabase
Progress:  Selecting site:7 Stage in:1 Finished successfully:2
Progress:  Selecting site:2 Stage in:1 Active:1 Finished successfully:6
Final status:  Finished successfully:10
sur$

---
while I was expecting:


SwiftScript trace: i am analyseDatabase
SwiftScript trace: I am populateDatabase
Progress:  Selecting site:7 Stage in:1 Finished successfully:2
Progress:  Selecting site:2 Stage in:1 Active:1 Finished successfully:6
Final status:  Finished successfully:10
sur$


--

Ive been trying the same with an array of externals, to no avail (yet).

Can you offer any guidance on how to do this, or whether its possible 
with the current implementation of external?



More information about the Swift-devel mailing list