If type == "O" then the communication consists of an allreduce,
quadratic on the number of columns.
If type == "I" then the communication conists of an allgather.
If type == "F" then the communication is an allreduce, quadratic on
the number of columns.
If type == "M" then the communication consists of an allgather.
If type == "2" then the communication consists of the same as that of
an svd() call: an allreduce, quadratic on the number of columns.