Apparatus for transferring data between data modules, each of said data modules being at least one of a data processing module and a data storage module the apparatus comprising: at least one pair of crossbar switches (103, 104), wherein input nodes and output nodes of each of the crossbar switches are coupled to corresponding ones of the data modules, a first crossbar switch having an N-input node by M-output node switch fabric, and a second crossbar switch having an M-input node by N-output node switch fabric, where N and M are each positive integers greater than one, wherein N and M are not equal, and wherein each crossbar switch comprises: an input buffer (202, 204, 206) at each input node having an input arbiter configured to read data packets from each input node to one or more corresponding crosspoint buffers in accordance with a first scheduling algorithm; one crosspoint buffer (228, 230, 232) at each crosspoint of the switch fabric, the crosspoint buffer providing a queue having an output arbiter configured to read data packets from the crosspoint buffer queue to an output node corresponding to the crosspoint buffer in accordance with a second scheduling algorithm, wherein, for each crosspoint buffer queue a depth of the queue varies in accordance with a round-trip time of data transfer through the at least one pair of crossbar switches; and each output node configured to receive segments of data packets provided from one or more corresponding crosspoint buffers, wherein, when a data storage module employs sequential addressing of locations in memory, addresses of the locations in memory are scrambled before passing the data through the at least one crossbar switch, and wherein the first crossbar switch directs data from a group of data processing modules to a group of data storage modules, and the second crossbar switch directs data from the data storage modules to the data processing modules, each data processing module has a first arbiter that controls a data processing module to transfer data to the input node of the first crossbar switch, and each data storage module has a second arbiter that controls a data memory controller to transfer data to the input node of the second crossbar switch. at least one pair of crossbar switches (103, 104), wherein input nodes and output nodes of each of the crossbar switches are coupled to corresponding ones of the data modules, a first crossbar switch having an N-input node by M-output node switch fabric, and a second crossbar switch having an M-input node by N-output node switch fabric, where N and M are each positive integers greater than one, wherein N and M are not equal, and wherein each crossbar switch comprises: an input buffer (202, 204, 206) at each input node having an input arbiter configured to read data packets from each input node to one or more corresponding crosspoint buffers in accordance with a first scheduling algorithm; one crosspoint buffer (228, 230, 232) at each crosspoint of the switch fabric, the crosspoint buffer providing a queue having an output arbiter configured to read data packets from the crosspoint buffer queue to an output node corresponding to the crosspoint buffer in accordance with a second scheduling algorithm, wherein, for each crosspoint buffer queue a depth of the queue varies in accordance with a round-trip time of data transfer through the at least one pair of crossbar switches; and each output node configured to receive segments of data packets provided from one or more corresponding crosspoint buffers, an input buffer (202, 204, 206) at each input node having an input arbiter configured to read data packets from each input node to one or more corresponding crosspoint buffers in accordance with a first scheduling algorithm; one crosspoint buffer (228, 230, 232) at each crosspoint of the switch fabric, the crosspoint buffer providing a queue having an output arbiter configured to read data packets from the crosspoint buffer queue to an output node corresponding to the crosspoint buffer in accordance with a second scheduling algorithm, wherein, for each crosspoint buffer queue a depth of the queue varies in accordance with a round-trip time of data transfer through the at least one pair of crossbar switches; and each output node configured to receive segments of data packets provided from one or more corresponding crosspoint buffers, wherein, when a data storage module employs sequential addressing of locations in memory, addresses of the locations in memory are scrambled before passing the data through the at least one crossbar switch, and wherein the first crossbar switch directs data from a group of data processing modules to a group of data storage modules, and the second crossbar switch directs data from the data storage modules to the data processing modules, each data processing module has a first arbiter that controls a data processing module to transfer data to the input node of the first crossbar switch, and each data storage module has a second arbiter that controls a data memory controller to transfer data to the input node of the second crossbar switch.