  In the past, efforts were taken to improve the performance of a processor via
frequency scaling. However, industry has reached the limits of increasing the
frequency and therefore concurrent execution of instructions on multiple cores
seems the only possible option. It is not enough to provide concurrent
execution by the hardware, software also have to introduce concurrency in order
to exploit the parallelism.
