Programming Models for Massively Parallel Computers