Multicore System consists of two or more processors which have been attached to a single chip to enhance performance, reduce power consumption, and more efficient simultaneous processing of multiple tasks. Multicore system has been in recent trend where each core appears as a separate processor. Multicore system is capable of executing executing more than one threads parallely whereas in Single core system only one thread can execute at a time.
Implementing Multicore system is more beneficial than implementing single core system by increasing number of transistors on single chip to enhance performance because increasing number of transistors on a single chip increases complexity of the system.
Challenges of multicore system :
Since multicore system consists of more than one processors, so the need is to keep all of them busy so that you can make better use of multiple computing cores. Scheduling algorithms must be designed to use multiple computing core to allow parallel computation.The challenge is also to modify the existing and new programs that are multithreaded to take advantage of multicore system.
In general five areas present challenges in programming for multicore systems :
- Dividing Activities :
The challenge is to examine the task properly to find areas that can be divided into separate, concurrent subtasks that can execute parallely on individual processors to make complete use of multiple computing cores.
- Balance :
While dividing the task into sub-tasks, equality must be ensured such that every sub-task should perform almost equal amount of work.It should not be the case that one sub task has a lot of work to perform and other sub tasks have very less to do because in that case multicore system programming may not enhance performance compared to single core system.
- Data splitting :
Just as the task is divided into smaller sub-tasks, data accessed and manipulated by that task must also be divided to run on different cores so that data can be easily accessible by each sub-tasks.
- Data dependency :
Since various smaller sub-tasks run on different cores, it may be possible that one sub-task depends on the data from another sub tasks. So the data needs to be examined properly so that the execution of whole task is synchronized.
- Testing and Debugging :
When different smaller sub-tasks are executing parallely, so testing and debugging such concurrent tasks is more difficult than testing and debugging single threaded application.