1. A reconfigurable cache memory comprising: a programmable memory unit; a functional unit in communication with the programmable memory unit, wherein the functional unit executes applications using the programmable memory unit; and reconfiguration module for determining an optimal configuration of memory for a particular application and programming the programmable memory unit to the optimal configuration.