package com.asgow.ciel.examples.smithwaterman; import com.asgow.ciel.executor.Ciel; import com.asgow.ciel.references.Reference; import com.asgow.ciel.tasks.FirstClassJavaTask; public class SmithWaterman implements FirstClassJavaTask { public void invoke() throws Exception { Reference horizontalString = Ciel.RPC.packageLookup("x"); Reference verticalString = Ciel.RPC.packageLookup("y"); int numHorizontalChunks = Integer.parseInt(Ciel.args[0]); int numVerticalChunks = Integer.parseInt(Ciel.args[1]); Reference[] horizontalChunks = Ciel.spawn(new PartitionInputString(horizontalString, numHorizontalChunks)); Reference[] verticalChunks = Ciel.spawn(new PartitionInputString(verticalString, numVerticalChunks)); Reference[][][] taskResults = new Reference[numVerticalChunks][numHorizontalChunks][]; taskResults[0][0] = Ciel.spawn(new SmithWatermanBlockTask(horizontalChunks[0], verticalChunks[0], null, null, null, -1, -1, -1, 1)); for (int j = 1; j < horizontalChunks.length; ++j) { taskResults[0][j] = Ciel.spawn(new SmithWatermanBlockTask(horizontalChunks[j], verticalChunks[0], null, null, taskResults[0][j-1][2], -1, -1, -1, 1)); } for (int i = 1; i < verticalChunks.length; ++i) { taskResults[i][0] = Ciel.spawn(new SmithWatermanBlockTask(horizontalChunks[0], verticalChunks[i], null, taskResults[i-1][0][1], null, -1, -1, -1, 1)); for (int j = 1; j < horizontalChunks.length; ++j) { taskResults[i][j] = Ciel.spawn(new SmithWatermanBlockTask(horizontalChunks[j], verticalChunks[i], taskResults[i-1][j-1][0], taskResults[i-1][j][1], taskResults[i][j-1][2], -1, -1, -1, 1)); } } Ciel.tailSpawn(new SmithWatermanResultTask(taskResults[verticalChunks.length-1][horizontalChunks.length-1][0])); } public void setup() { } public Reference[] getDependencies() { return new Reference[0]; } }