Multicores are here to stay. It is a matter of physics.

There are a lot of new problems to deal with when moving from a unicore, single-threaded environment to a multicore, multi-threaded application. This paper describes a few of these issues and discusses some of the methods and tools that can be used to solve them, including: booting; OS configuration (SMP/AMP); communication between cores; resource sharing; fault propagation; load balancing the cores; debugging solutions; performance measurements; programming model (local vs. remote vs. transparent).