public void computeU(Iterable<File> partsOfA, File tmpDir) throws IOException {
// step 4, compute pieces of U
for (File file : partsOfA) {
MatrixWritable m = new MatrixWritable();
m.readFields(new DataInputStream(new FileInputStream(file)));
Matrix aI = m.get();
Matrix y = aI.times(new RandomTrinaryMatrix(seed, aI.numCols(), dim, false));
Matrix uI = r2.solveRight(y).times(svd.getU());
m.set(uI);