/**
* Copyright 2007-2008 University Of Southern California
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import edu.isi.pegasus.planner.dax.*;
public class HierarchicalDiamonds {
/**
* Create an example DIAMOND DAX
* @param args
*/
public static void main(String[] args) {
if (args.length != 1) {
System.out.println("Usage: java ADAG <pegasus_location>");
System.exit(1);
}
try {
TopDiamond(args[0]).writeToFile("top.dax");
SubDiamond(args[0]).writeToFile("sub.dax");
}
catch (Exception e) {
e.printStackTrace();
}
}
private static ADAG TopDiamond(String pegasus_location) throws Exception {
java.io.File cwdFile = new java.io.File (".");
String cwd = cwdFile.getCanonicalPath();
ADAG dax = new ADAG("topdiamond");
File fa = new File("f.a");
fa.addPhysicalFile("file://" + cwd + "/f.a", "local");
dax.addFile(fa);
File fb1 = new File("f.b1");
File fb2 = new File("f.b2");
File fc1 = new File("f.c1");
File fc2 = new File("f.c2");
File fd = new File("f.d");
fd.setRegister(true);
Executable preprocess = new Executable("pegasus", "preprocess", "4.0");
preprocess.setArchitecture(Executable.ARCH.X86_64).setOS(Executable.OS.LINUX);
preprocess.setInstalled(true);
preprocess.addPhysicalFile("file://" + pegasus_location + "/bin/pegasus-keg", "condorpool");
Executable findrange = new Executable("pegasus", "findrange", "4.0");
findrange.setArchitecture(Executable.ARCH.X86_64).setOS(Executable.OS.LINUX);
findrange.setInstalled(true);
findrange.addPhysicalFile("file://" + pegasus_location + "/bin/pegasus-keg", "condorpool");
Executable analyze = new Executable("pegasus", "analyze", "4.0");
analyze.setArchitecture(Executable.ARCH.X86_64).setOS(Executable.OS.LINUX);
analyze.setInstalled(true);
analyze.addPhysicalFile("file://" + pegasus_location + "/bin/pegasus-keg", "condorpool");
dax.addExecutable(preprocess).addExecutable(findrange).addExecutable(analyze);
// Add a preprocess job
Job j1 = new Job("j1", "pegasus", "preprocess", "4.0");
j1.addArgument("-a preprocess -T 120 -i ").addArgument(fa);
j1.addArgument("-o ").addArgument(fb1);
j1.addArgument(" ").addArgument(fb2);
j1.uses(fa, File.LINK.INPUT);
j1.uses(fb1, File.LINK.OUTPUT);
j1.uses(fb2, File.LINK.OUTPUT);
dax.addJob(j1);
// Add left Findrange job
Job j2 = new Job("j2", "pegasus", "findrange", "4.0");
j2.addArgument("-a findrange -T 120 -i ").addArgument(fb1);
j2.addArgument("-o ").addArgument(fc1);
j2.uses(fb1, File.LINK.INPUT);
j2.uses(fc1, File.LINK.OUTPUT);
dax.addJob(j2);
// Add subdax
File subdax = new File("sub.dax");
subdax.addPhysicalFile("file://" + cwd + "/sub.dax", "local");
dax.addFile(subdax);
DAX j3 = new DAX("j3", subdax.getName());
dax.addDAX(j3);
// Add analyze job
Job j4 = new Job("j4", "pegasus", "analyze", "4.0");
j4.addArgument("-a analyze -T 120 -i ").addArgument(fc1);
j4.addArgument("-o ").addArgument(fd);
j4.uses(fc1, File.LINK.INPUT);
j4.uses(fd, File.LINK.OUTPUT);
dax.addJob(j4);
dax.addDependency("j1", "j2");
dax.addDependency("j1", "j3");
dax.addDependency("j2", "j4");
dax.addDependency("j3", "j4");
return dax;
}
private static ADAG SubDiamond(String pegasus_location) throws Exception {
java.io.File cwdFile = new java.io.File (".");
String cwd = cwdFile.getCanonicalPath();
ADAG dax = new ADAG("subdiamond");
File fa = new File("f.a");
fa.addPhysicalFile("file://" + cwd + "/f.a", "local");
dax.addFile(fa);
File fb1 = new File("sf.b1");
File fb2 = new File("sf.b2");
File fc1 = new File("sf.c1");
File fc2 = new File("sf.c2");
File fd = new File("sf.d");
fd.setRegister(true);
Executable preprocess = new Executable("pegasus", "preprocess", "4.0");
preprocess.setArchitecture(Executable.ARCH.X86_64).setOS(Executable.OS.LINUX);
preprocess.setInstalled(true);
preprocess.addPhysicalFile("file://" + pegasus_location + "/bin/pegasus-keg", "condorpool");
Executable findrange = new Executable("pegasus", "findrange", "4.0");
findrange.setArchitecture(Executable.ARCH.X86_64).setOS(Executable.OS.LINUX);
findrange.setInstalled(true);
findrange.addPhysicalFile("file://" + pegasus_location + "/bin/pegasus-keg", "condorpool");
Executable analyze = new Executable("pegasus", "analyze", "4.0");
analyze.setArchitecture(Executable.ARCH.X86_64).setOS(Executable.OS.LINUX);
analyze.setInstalled(true);
analyze.addPhysicalFile("file://" + pegasus_location + "/bin/pegasus-keg", "condorpool");
dax.addExecutable(preprocess).addExecutable(findrange).addExecutable(analyze);
// Add a preprocess job
Job s1 = new Job("s1", "pegasus", "preprocess", "4.0");
s1.addArgument("-a preprocess -T 120 -i ").addArgument(fa);
s1.addArgument("-o ").addArgument(fb1);
s1.addArgument(" ").addArgument(fb2);
s1.uses(fa, File.LINK.INPUT);
s1.uses(fb1, File.LINK.OUTPUT);
s1.uses(fb2, File.LINK.OUTPUT);
dax.addJob(s1);
// Add left Findrange job
Job s2 = new Job("s2", "pegasus", "findrange", "4.0");
s2.addArgument("-a findrange -T 120 -i ").addArgument(fb1);
s2.addArgument("-o ").addArgument(fc1);
s2.uses(fb1, File.LINK.INPUT);
s2.uses(fc1, File.LINK.OUTPUT);
dax.addJob(s2);
// Add right Findrange job
Job s3 = new Job("s3", "pegasus", "findrange", "4.0");
s3.addArgument("-a findrange -T 120 -i ").addArgument(fb2);
s3.addArgument("-o ").addArgument(fc2);
s3.uses(fb2, File.LINK.INPUT);
s3.uses(fc2, File.LINK.OUTPUT);
dax.addJob(s3);
// Add analyze job
Job s4 = new Job("s4", "pegasus", "analyze", "4.0");
s4.addArgument("-a analyze -T 120 -i ").addArgument(fc1);
s4.addArgument(" ").addArgument(fc2);
s4.addArgument("-o ").addArgument(fd);
s4.uses(fc1, File.LINK.INPUT);
s4.uses(fc2, File.LINK.INPUT);
s4.uses(fd, File.LINK.OUTPUT);
dax.addJob(s4);
dax.addDependency("s1", "s2");
dax.addDependency("s1", "s3");
dax.addDependency("s2", "s4");
dax.addDependency("s3", "s4");
return dax;
}
}