def even_split_data(X, s=2):
    """
        Column-wise split data matrix across s servers evenly.
        :param X: d x n data matrix
        :param s: split across s servers
        :return: A list of splitted data matrices.
	"""
    num_cols = X.shape[1]
    batch_size = num_cols // s
    Ais = []
    start_idx = 0
    while start_idx < num_cols:
        end_idx = start_idx + batch_size
        if num_cols - end_idx < batch_size:
            Ais.append(X[:, start_idx:])
            start_idx = num_cols
        else:
            Ais.append(X[:, start_idx:end_idx])
            start_idx = end_idx
    return Ais