A neural network processor hosted on a computing device, the neural network processor comprising: one or more neurons; a layer descriptor list comprising a list of descriptors defining configurations for layers of a deep neural network stored in a main memory of the host computing device, the list of descriptors comprising: at least one memory-to-memory (M2M) descriptor, and at least one operation descriptor; a second memory device for storing data to be operated on by the one or more neurons; and a descriptor list controller configured to load the layer descriptor list of descriptors from the main memory of the host computing device and to pre-fetch the descriptors from the loaded layer descriptor list for execution, wherein the descriptor list controller is further configured to: separately buffer the at least one M2M descriptor and the at least one operation descriptor; execute, subject to set dependencies, the at least one M2M descriptor to perform a M2M operation to transfer the data to be operated on by the one or more neurons from the main memory of the host computing device to the second memory device, and separately execute the at least one operation descriptor stored in the main memory to cause the one or more neurons to perform an operation on the data in the second memory device. one or more neurons; a layer descriptor list comprising a list of descriptors defining configurations for layers of a deep neural network stored in a main memory of the host computing device, the list of descriptors comprising: at least one memory-to-memory (M2M) descriptor, and at least one operation descriptor; a second memory device for storing data to be operated on by the one or more neurons; and a descriptor list controller configured to load the layer descriptor list of descriptors from the main memory of the host computing device and to pre-fetch the descriptors from the loaded layer descriptor list for execution, wherein the descriptor list controller is further configured to: separately buffer the at least one M2M descriptor and the at least one operation descriptor; execute, subject to set dependencies, the at least one M2M descriptor to perform a M2M operation to transfer the data to be operated on by the one or more neurons from the main memory of the host computing device to the second memory device, and separately execute the at least one operation descriptor stored in the main memory to cause the one or more neurons to perform an operation on the data in the second memory device. at least one memory-to-memory (M2M) descriptor, and at least one operation descriptor; a second memory device for storing data to be operated on by the one or more neurons; and a descriptor list controller configured to load the layer descriptor list of descriptors from the main memory of the host computing device and to pre-fetch the descriptors from the loaded layer descriptor list for execution, wherein the descriptor list controller is further configured to: separately buffer the at least one M2M descriptor and the at least one operation descriptor; execute, subject to set dependencies, the at least one M2M descriptor to perform a M2M operation to transfer the data to be operated on by the one or more neurons from the main memory of the host computing device to the second memory device, and separately execute the at least one operation descriptor stored in the main memory to cause the one or more neurons to perform an operation on the data in the second memory device. execute, subject to set dependencies, the at least one M2M descriptor to perform a M2M operation to transfer the data to be operated on by the one or more neurons from the main memory of the host computing device to the second memory device, and separately execute the at least one operation descriptor stored in the main memory to cause the one or more neurons to perform an operation on the data in the second memory device.