MapReduce:
----------

// inputs is a list of file references
inputs = [file(pc1, /tmp/input1), file(pc1, /tmp/input2), file(pc2, /tmp/input3), file(pc2, /tmp/input4)];
mapper = "uk.ac.cam.cl.cloudmake.Mapper";
reducer = "uk.ac.cam.cl.cloudmake.Reducer";
num_reducers = 10;
 
outputs = map_reduce(inputs, mapper, reducer, num_reducers);

function map_reduce(input_partitions, map_class, reduce_class, num_reducers) {
	map_outputs = [];
	foreach (i in range(0, len(input_partitions))) {
		map_outputs[i] = run_java_class(map_class, input_partitions[i], num_reducers)   ;
	}
	reduce_outputs = [];
	foreach (i in range(0, num_reducers)) {
		reducer_inputs = []
		foreach (j in range(0, len(input_partitions))) {
			reducer_inputs[j] = map_outputs[j][i];
		}
		reduce_outputs[i] = run_java_class(reduce_class, reducer_inputs, 1);
	}
	return reduce_outputs;

}

Power iteration (PageRank):
---------------------------

inputs = [file(pc1, /tmp/input1), file(pc2, /tmp/input2), file(pc3, /tmp/input3), ...];
curr_vector = file(pc1, /tmp/vector);

do {
	result_parts = [];
	foreach (i in range(len(inputs))) {
		result_parts[i] = run_c_program("matrix_vector", inputs[i], curr_vector);
	}
	new_vector = combine(result_parts);
	converged = compare(curr_vector, new_vector, EPSILON); 
} while (!*converged);

Halo swapping:
--------------

// m x n array of inputs 
m = M;
n = N;
curr_state = [ [ cell_1_1, cell_1_2, cell_1_3, ... ], [ cell_2_1, ... ], [ cell_3_1, ... ], ... ];
 