Memory devices used in all the existing devices, in consumer, industrial, military and aeronautical space may be composed of non-volatile memory or volatile memory. The main difference between non-volatile memory and volatile memory is that non-volatile memory can retain data without requiring a persistent power supply. Typically, data may be read from non-volatile memory, transferred and stored temporarily in volatile memory, then manipulated using processing units, and the results are stored back in the non-volatile memory. In general, it may be desirable to increase the overall speed of the above operations. However, transferring the data from the non-volatile memory to the volatile memory for data manipulation may be limited in speed by hardware bandwidth (e.g., the Von Neumann bottleneck where for example, instruction fetch and data operation cannot occur at the same time over a shared memory bus). Thus, there is a continual need for a new processing unit and memory architecture to overcome this limitation.