This book explores compile-time and runtime techniques to improve programmability and to enable adaptive execution of programs in emerging architectures such as GPGPUs. First, this dissertation examines the possibility of exploiting OpenMP shared memory programming model on GPGPUs. This book presents a compiler framework for automatic translation and optimization of OpenMP applications for executing on GPGPUs. Second, this research studies runtime tuning systems to adapt applications dynamically. In preliminary work, an adaptive runtime tuning system with emphasis on parallel irregular applications has been proposed. Third, this research work focuses on creating an integrated framework where both the compiler framework and the tuning system are synergistically combined, such that compiler-translated GPGPU applications will be seamlessly adapted for the underlying system. For this goal, a new programming interface, called OpenMPC - OpenMP extended for CUDA, is proposed. Experiments on various programs demonstrate that the proposed system achieves performance comparable to hand-coded CUDA programs.