Learn how to think outside the linear execution box: Richard A. Quinnell of EE Times writes an interesting article highlighting the need to take partitioning into account when you design applications for multicore systems. He starts by providing a friendly warning that the trends show that even traditional general-purpose processors (and the products they are used in) are turning to multicore architectures. Quoting RTOS vendor Express Logic's John Carbone, Quinnell makes the point that moving software to multicore requires overcoming two obstacles:
- You have to find a way to distribute the threads.
- You have to find a way to enable "communications among the threads across processor boundaries."
Quinnell goes on to remind that the only way multicore processing is a win is if all the cores remain busy (that is, none are idle and none are overburdened) -- partitioning can be the answer to this problem (just as it can increase competition among cores for shared resources if not done correctly). Some of his basic suggestions to achieve adequate partitioning include message passing and semaphore mechanisms to help threads swap info and coordinate their actions across boundaries. Quinnell also supports simplifying the implementation of these mechanism (like with the Multicore Communications Applications Programming Interface standard effort) and tool-developers' efforts.
Users need this for on-chip mcore debugging
Mcore challenges debugging: This technical paper by Jens Braunes, software architect at pls Development Tools, details the importance of understanding user requirements before choosing an on-chip debug setup for a multicore system by providing a checklist of sorts, including
- "Must each core and bus must be observable?"
- "Is it crucial for system analysis to recognize events that arise from interactions between the cores and busses?"
- "What level of complexity (in interactions between all SoC components) during debug is needed?"
Braunes covers four sets of signals for basic multicore debug capabilities (debug control, JTAG interface, debugger interface, and cross-trigger interface), how you may want to build specific debug functionality into the design (based on customer needs), how using the multicore debug solution (MCDS; configurable IP building blocks) helps measure performance indicators, and more.