Hierarchical QR factorization algorithms for multi-core cluster systems