A method for specifying functionalities to be performed on a data architecture including N adders and N multipliers configured to receive operands, the method comprising: receiving instructions for the data architecture to operate in one of a multiply-reduce mode or a multiply-accumulate mode; and selecting , based on the instructions, a data flow between the N multipliers (M1, M2, M3, M4) and at least some of the N adders (A1, A2, A3) of the data architecture, wherein the N multipliers (M1, M2, M3, M4) and at least some of the N adders (A1, A2, A3) of the data architecture are configured to be useable in the multiply-reduce mode and the multiply-accumulate mode, and wherein the data architecture is configured to change a connection between the N multipliers and the N adders according to the selected data flow, wherein selecting the data flow includes: in response to receiving instructions corresponding to the multiply-reduce mode, selecting a first data flow using the N multipliers and N-1 adders, wherein one of the N adders is not used, and the N multipliers are connected to a subset of the N-1 adders and the subset of the N-1 adders are connected to another subset of the N-1 adders; and in response to receiving instructions corresponding to the multiply-accumulate mode, selecting a second data flow, wherein each of the N adders is connected to a single multiplier of the N multipliers and is configured to take as inputs a result operand of the single multiplier and another operand. receiving instructions for the data architecture to operate in one of a multiply-reduce mode or a multiply-accumulate mode; and selecting , based on the instructions, a data flow between the N multipliers (M1, M2, M3, M4) and at least some of the N adders (A1, A2, A3) of the data architecture, wherein the N multipliers (M1, M2, M3, M4) and at least some of the N adders (A1, A2, A3) of the data architecture are configured to be useable in the multiply-reduce mode and the multiply-accumulate mode, and wherein the data architecture is configured to change a connection between the N multipliers and the N adders according to the selected data flow, wherein selecting the data flow includes: in response to receiving instructions corresponding to the multiply-reduce mode, selecting a first data flow using the N multipliers and N-1 adders, wherein one of the N adders is not used, and the N multipliers are connected to a subset of the N-1 adders and the subset of the N-1 adders are connected to another subset of the N-1 adders; and in response to receiving instructions corresponding to the multiply-accumulate mode, selecting a second data flow, wherein each of the N adders is connected to a single multiplier of the N multipliers and is configured to take as inputs a result operand of the single multiplier and another operand. in response to receiving instructions corresponding to the multiply-reduce mode, selecting a first data flow using the N multipliers and N-1 adders, wherein one of the N adders is not used, and the N multipliers are connected to a subset of the N-1 adders and the subset of the N-1 adders are connected to another subset of the N-1 adders; and in response to receiving instructions corresponding to the multiply-accumulate mode, selecting a second data flow, wherein each of the N adders is connected to a single multiplier of the N multipliers and is configured to take as inputs a result operand of the single multiplier and another operand. <EOS>