1. A computer program product for performing memory-aware matrix factorization on a graphics processing unit, the computer program product comprising: a non-transitory storage medium readable by a processing circuit and storing instructions for execution by the processing circuit for performing a 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, wherein the one or more types of memory include a register memory, a cache memory and a global memory and wherein the cache memory includes a shared memory and a texture memory, wherein the texture memory is read-only.