  Different GPU applications exhibit varying scalability patterns with
network-on-chip (NoC), coalescing, memory and control divergence, and L1 cache
behavior. A GPU consists of several StreamingMulti-processors (SMs) that
collectively determine how shared resources are partitioned and accessed.
Recent years have seen divergent paths in SM scaling towards scale-up (fewer,
larger SMs) vs. scale-out (more, smaller SMs). However, neither scaling up nor
scaling out can meet the scalability requirement of all applications running on
a given GPU system, which inevitably results in performance degradation and
resource under-utilization for some applications. In this work, we investigate
major design parameters that influence GPU scaling. We then propose AMOEBA, a
solution to GPU scaling through reconfigurable SM cores. AMOEBA monitors and
predicts application scalability at run-time and adjusts the SM configuration
to meet program requirements. AMOEBA also enables dynamic creation of
heterogeneous SMs through independent fusing or splitting. AMOEBA is a
microarchitecture-based solution and requires no additional programming effort
or custom compiler support. Our experimental evaluations with application
programs from various benchmark suites indicate that AMOEBA is able to achieve
a maximum performance gain of 4.3x, and generates an average performance
improvement of 47% when considering all benchmarks tested.
