An Adaptive Computing Ensemble (ACE) includes a plurality of flexible
computation units as well as an execution controller to allocate the
units to Computing Ensembles (CEs) and to assign threads to the CEs. The
units may be any combination of ACE-enabled units, including instruction
fetch and decode units, integer execution and pipeline control units,
floating-point execution units, segmentation units, special-purpose
units, reconfigurable units, and memory units. Some of the units may be
replicated, e.g. there may be a plurality of integer execution and
pipeline control units. Some of the units may be present in a plurality
of implementations, varying by performance, power usage, or both. The
execution controller dynamically alters the allocation of units to
threads in response to changing performance and power consumption
observed behaviors and requirements. The execution controller also
dynamically alters performance and power characteristics of the
ACE-enabled units, according to the observed behaviors and requirements.