Communication between cores in mainstream multi-core machines is enabled by a shared memory. To send information from one core to another, one core writes to mem- ory and the other reads from memory. Unfortunately, memory is extremely slow when compared with computation. Processor designers go to gr