  Object-oriented programming is often regarded as too inefficient for
high-performance computing (HPC), despite the fact that many important HPC
problems have an inherent object structure. Our goal is to bring efficient,
object-oriented programming to massively parallel SIMD architectures,
especially GPUs.
  In this thesis, we develop various techniques for optimizing object-oriented
GPU code. Most notably, we identify the object-oriented Single-Method
Multiple-Objects (SMMO) programming model. We first develop an embedded C++
Structure of Arrays (SOA) data layout DSL for SMMO applications. We then design
a lock-free, dynamic memory allocator that stores allocations in SOA layout.
Finally, we show how to further optimize the memory access of SMMO applications
with memory defragmentation.
