A method of performing neural network processes using a field programmable gate array, FPGA, the method comprising: receiving at a plurality of N input buffers included in the field programmable gate array, a batch of input data for accelerated processing of a neural network evaluation for a multi-layer neural network comprising a first layer, the batch of input data comprising N observation vectors, wherein each respective observation vector of the N observation vectors belongs to a corresponding respective one of N data streams, wherein each input buffer of the N input buffers provides a respective queue of a plurality of N queues for receiving a respective observation vector of the N observation vectors of the batch of input data, each queue having a queue depth of at least two, where N is the number of parallel streams of the field programmable gate array that can be processed in parallel lock step; loading (332, 343, 353) the field programmable gate array with a first layer set of weights for the neural network evaluation from an external memory; and performing a first layer process by applying (333, 344, 354), within the field programmable gate array, the first layer set of weights to the N observation vectors to generate intermediate outputs (334, 345, 355) for the neural network evaluation; wherein the N observation vectors are scheduled so that all the plurality of N queues are processed in parallel lock step, using the same weights simultaneously across all of the N queues during the first layer process, wherein the intermediate outputs generated from the N observation vectors being processed are re-queued in the input buffers for subsequent processing using a second layer set of weights of the multi-layer neural network. receiving at a plurality of N input buffers included in the field programmable gate array, a batch of input data for accelerated processing of a neural network evaluation for a multi-layer neural network comprising a first layer, the batch of input data comprising N observation vectors, wherein each respective observation vector of the N observation vectors belongs to a corresponding respective one of N data streams, wherein each input buffer of the N input buffers provides a respective queue of a plurality of N queues for receiving a respective observation vector of the N observation vectors of the batch of input data, each queue having a queue depth of at least two, where N is the number of parallel streams of the field programmable gate array that can be processed in parallel lock step; loading (332, 343, 353) the field programmable gate array with a first layer set of weights for the neural network evaluation from an external memory; and performing a first layer process by applying (333, 344, 354), within the field programmable gate array, the first layer set of weights to the N observation vectors to generate intermediate outputs (334, 345, 355) for the neural network evaluation; wherein the N observation vectors are scheduled so that all the plurality of N queues are processed in parallel lock step, using the same weights simultaneously across all of the N queues during the first layer process, wherein the intermediate outputs generated from the N observation vectors being processed are re-queued in the input buffers for subsequent processing using a second layer set of weights of the multi-layer neural network.