public void startScatter(DistVector x, Vector y) {
        if (x.size() != y.size())
            throw new IllegalArgumentException(
                    "Vectors must be of the same global size");

        // Assemble the arrays to send
        for (int i = 0; i < comm.size(); ++i)
            if (i != comm.rank())
                for (int j = 0; j < sendI[i].length; ++j)
                    sendD[i][j] = x.get(sendI[i][j]);

        // Start the sends and recieves
        for (int i = 0; i < comm.size(); ++i)
            if (i != comm.rank()) {
                if (send[i])
                    t[i] = comm.isend(sendD[i], i);
                if (recv[i])
                    t[i + comm.size()] = comm.irecv(recvD[i], i);
            }
    }