1. A method for configuring a system comprising a plurality of computation units interconnected by an interconnection network, the method comprising: receiving subsets of instructions corresponding to different portions of a program, each subset assigned to one of the computation units; scheduling instructions in a given subset for execution on the assigned computation unit, including scheduling communication instructions that send to or receive from a different computation unit over the interconnection network, with only those communication instructions being scheduled in which output buffers required by those communication instructions are all available; allocating registers in a given computation unit for storing values accessed by instructions in a subset assigned to the given computation unit; and scheduling remaining communication instructions after allocating registers preserving the order of communication instructions scheduled before allocating registers.