By Lori Matassa and Max Domeika
The key difference between debugging on single-core and multi-core systems is in the distribution of the program execution onto multiple cores. The application or system code developer must be aware which pieces of code are executing on each processor core. Another question to consider: are all cores sharing a common memory map or are the memory locations different? If program flow relies upon cached data, then it is important to understand which cache levels are shared between the different processor cores and which ones are not.
Furthermore, how does the code takes advantage of the parallel execution power offered by the multi-core platform? Parallelism could be implemented on a process level or on a thread level. The software workload could be partitioned to the different processor cores based upon functional blocks or logical blocks. Alternatively, partitioning could involve executing the same code on all cores, but operating on different data sets.
The impacts of multi-core processors on the debugger are several fold. First and foremost, execution control and breakpoint handling has an additional layer of complexity. In addition to knowing which memory address or data value dependency a breakpoint has, the debugger now also needs to track the association of processor core, OS thread, or application thread with individual breakpoints. Thread management and core affinity management is generally handled by the OS which implies that for application debug purposes it will be important to track the OS thread identifier for each application thread synchronized with the memory location.



0 responses so far ↓
There are no comments yet...Kick things off by filling out the form below.
You must log in to post a comment.