Programming Many-Core Chips