  The Partitioned Global Address Space (PGAS) programming model strikes a
balance between the locality-aware, but explicit, message-passing model and the
easy-to-use, but locality-agnostic, shared memory model. However, the PGAS rich
memory model comes at a performance cost which can hinder its potential for
scalability and performance. To contain this overhead and achieve full
performance, compiler optimizations may not be sufficient and manual
optimizations are typically added. This, however, can severely limit the
productivity advantage. Such optimizations are usually targeted at reducing
address translation overheads for shared data structures. This paper proposes a
hardware architectural support for PGAS, which allows the processor to
efficiently handle shared addresses. This eliminates the need for such
hand-tuning, while maintaining the performance and productivity of PGAS
languages. We propose to avail this hardware support to compilers by
introducing new instructions to efficiently access and traverse the PGAS memory
space. A prototype compiler is realized by extending the Berkeley Unified
Parallel C (UPC) compiler. It allows unmodified code to use the new
instructions without the user intervention, thereby creating a real productive
programming environment. Two implementations are realized: the first is
implemented using the full system simulator Gem5, which allows the evaluation
of the performance gain. The second is implemented using a softcore processor
Leon3 on an FPGA to verify the implementability and to parameterize the cost of
the new hardware and its instructions. The new instructions show promising
results for the NAS Parallel Benchmarks implemented in UPC. A speedup of up to
5.5x is demonstrated for unmodified and unoptimized codes. Unoptimized code
performance using this hardware was shown to also surpass the performance of
manually optimized code by up to 10%.
