  The peak performance of any SpMV depends primarily on the available memory
bandwidth and its effective use. GPUs, ASICs, and new FPGAs have higher and
higher bandwidth; however, for large scale and highly sparse matrices, SpMV is
still a hard problem because of its random access pattern and workload
imbalance. Here, we show how to turn randomness to our advantage. We propose a
matrix permutation pre-processing step that aims to maximize the entropy of the
distribution of the nonzero elements. We seek any permutation that uniformly
distributes the non-zero elements' distribution, thereby generating a SpMV
problem that is amenable to work load balancing or to speed up sort algorithms.
We conjecture these permutations would be most effective for matrices with no
dense rows or columns and, as in preconditioning, when the matrix is reused. We
shall show that entropy maximization is an optimization that any architecture
may take advantage although in different ways. Most importantly, any developer
can consider and deploy. We shall present cases where we can improve
performance by 15\% on AMD-based (GPU-CPU) systems.
