A neural inference chip for computing neural activations; the neural inference chip comprising: at least one neural core (303, 401, 506, 641, 841, 1041, 1141); a memory array (301, 501, 603, 803, 1003, 1103) operatively coupled to the at least one neural core, the memory array comprising a plurality of elements (621,..,624; 821,..,824; 1021,..,1024; 1121,..,1124), each element comprising a memory (626, 826, 1026, 1126) and a horizontal buffer (625, 825, 1025, 1125), the horizontal buffer of each element of the memory array being in communication with either the horizontal buffer of another of the elements of the memory array or to the at least one neural core; an instruction buffer i (603, 803, 1003, 1103) in communication with the memory array, the instruction buffer having a position (631,..,634; 831,..,834; 1031,..,1034; 1131,..,1134) corresponding to each of the plurality of elements of the memory array; a memory controller (601, 801, 1001, 1101) including an instruction memory in communication with the instruction buffer, wherein the memory controller is adapted to provide at least one instruction to the instruction buffer, the instruction buffer is adapted to advance the at least one instruction between positions in the instruction buffer, the instruction buffer is adapted to provide the at least one instruction to at least one of the plurality of elements of the memory array (621,..,624; 821,..,824; 1021,..,1024; 1121,..,1124) from its associated position (631,..,634; 831,..,834; 1031,..,1034; 1131,..,1134) in the instruction buffer when the memory (626, 826, 1026, 1126) of the at least one of the plurality of elements contains data associated with the at least one instruction, each of the plurality of elements of the memory array is adapted to provide a data block from its memory (626, 826, 1026, 1126) its horizontal buffer (625, 825, 1025, 1125) in response to the arrival of an associated instruction from the instruction buffer the horizontal buffer (625, 825, 1025, 1125) of each element of the memory array is adapted to provide a data block to the horizontal buffer of another of the elements of the memory array or to the at least one neural core. at least one neural core (303, 401, 506, 641, 841, 1041, 1141); a memory array (301, 501, 603, 803, 1003, 1103) operatively coupled to the at least one neural core, the memory array comprising a plurality of elements (621,..,624; 821,..,824; 1021,..,1024; 1121,..,1124), each element comprising a memory (626, 826, 1026, 1126) and a horizontal buffer (625, 825, 1025, 1125), the horizontal buffer of each element of the memory array being in communication with either the horizontal buffer of another of the elements of the memory array or to the at least one neural core; an instruction buffer i (603, 803, 1003, 1103) in communication with the memory array, the instruction buffer having a position (631,..,634; 831,..,834; 1031,..,1034; 1131,..,1134) corresponding to each of the plurality of elements of the memory array; a memory controller (601, 801, 1001, 1101) including an instruction memory in communication with the instruction buffer, wherein the memory controller is adapted to provide at least one instruction to the instruction buffer, the instruction buffer is adapted to advance the at least one instruction between positions in the instruction buffer, the instruction buffer is adapted to provide the at least one instruction to at least one of the plurality of elements of the memory array (621,..,624; 821,..,824; 1021,..,1024; 1121,..,1124) from its associated position (631,..,634; 831,..,834; 1031,..,1034; 1131,..,1134) in the instruction buffer when the memory (626, 826, 1026, 1126) of the at least one of the plurality of elements contains data associated with the at least one instruction, each of the plurality of elements of the memory array is adapted to provide a data block from its memory (626, 826, 1026, 1126) its horizontal buffer (625, 825, 1025, 1125) in response to the arrival of an associated instruction from the instruction buffer the horizontal buffer (625, 825, 1025, 1125) of each element of the memory array is adapted to provide a data block to the horizontal buffer of another of the elements of the memory array or to the at least one neural core.