1. A method for performing memory-aware matrix factorization on a graphics processing unit, the method comprising: determining one or more types of memory on the graphics processing unit; determining one or more characteristics of each of the one or more types of memory; assigning each of a plurality of memory accesses of a matrix factorization algorithm to one of the one or more types of memory based on the one or more characteristics; and executing the matrix factorization algorithm on the graphics processing unit.