Devices are assigned to different buses at development time as well as
dynamically during operation, based on actual performance. At development
time, bus assignment can be determined based on experiments and direct
observation of how devices behave in various configurations. At run time,
load on each bus is preferably measured periodically, and when it is
uneven, devices are reallocated to different buses. In an alternative
embodiment, a user can specify a preference for using more or fewer buses
in order to optimize operation for efficiency or lower power consumption.