ABSTRACT

In recent years, increasing numbers of processor cores have begun to be integrated into typical systems-on-chip (SoCs). From high-performance server CPUs, to embedded systems such as mobile phones, multicore processors are now present in virtually every domain of computing. In certain domains, multicore hardware has been ubiquitous for some time, while the availability of software that fully exploits such hardware has not kept pace. This trend can partly be explained by the fact that creating multithreaded software can involve a substantial rise in complexity over a single-threaded version. In addition to necessitating the use of a different programming model, multithreaded software is not suited to the same debugging methods as its single-threaded counterpart. For many decades, a standard way to debug a single software thread has been to halt its execution at an opportune point and to observe its internal data structures before resuming its execution. However, this method can cause the failure of a multithreaded program that relies on timely data exchange with other threads. A parallel can be drawn to the observer effect, which holds that the mere act of observing something will alter the subject of the observation.