PolyCore Tools Designed to Ease Multicore Communications

Submitted by BDTI on Wed, 08/20/2008 - 20:00

As computational requirements go up and fab processes increasingly bump up against inconvenient physical limitations, multicore solutions are becoming more attractive.  The problem is that no one wants to program them, because there are lots of challenges associated with implementing applications on multiple cores. One challenge lies in handling inter-core communications. How will cores with different data formats, different interconnects, and different OS’s exchange data and talk to each other? How will the communications topology be defined? And how will the communications topology be affected if you need to scale the number of cores up or down? These are the challenges that start-up PolyCore Software is trying to address.

PolyCore, which was founded in 2003 and is based in Burlingame, California, offers specialized development tools and run-time software to ease the communications aspect of multicore software development.  The tools and software are intended to be used in systems that have some combination of CPUs, MCUs, and/or DSPs, whether the cores are on the same chip or not. They enable the user to implement inter-core communication in a way that abstracts the communications tasks from the underlying hardware and OS.  

PolyCore has two complementary products: Poly-Messenger and Poly-Generator. Poly-Messenger is a run-time software component that implements inter-core communication based on the Multicore Communications API, or MCAPI.  MCAPI is an API developed by the Multicore Association, published in June of this year. Poly-Messenger is intended to hide the complexity of passing data between different cores that may use different architectures, may be running different OS’s, and may use different types of interconnects. Poly-Messenger is implemented in C and integrated with various OS’s, including Windows and RTXC (available now) and Linux (available by the end of this year). If you add or remove cores, you don’t need to touch your application code just to rejigger the communications topology. According to Sven Brehmer, PolyCore’s founder and CEO, Poly-Messenger has a footprint of roughly 10 Kbytes.

Poly-Generator is a tool that is used to specify the communication topology.  The system designer creates an XML file that defines resources on a per-node basis, where nodes can be either physical (i.e., a particular core) or logical (i.e., there can be multiple nodes within a single core).  The designer also specifies which (if any) OS will be running on that node, the physical transport characteristics, and the logical links between the different nodes.

Poly-Generator uses the logical links defined in the XML file to figure out the shortest path between nodes, and uses this information to generate a corresponding C file and header files for each node.  The C file specifies all the data structures, routing tables, and initialization routines needed for Poly-Messenger to use this topology; in other words, Poly-Generator takes an XML description of the topology and produces an abstracted C version. The user compiles the C version and links it with the application and Poly-Messenger runtime libraries; Poly-Messenger, in turn, uses this information to execute the communication.

One interesting feature of the tool is that the user can initially define all the nodes on one core for debugging purposes, then migrate one or more nodes to separate cores to increase performance. (Of course, they will then be required to verify timing and ensure there aren’t any deadlocks; the PolyCore tools aren’t designed to help with this step.)

Poly-Generator is currently hosted on Windows but PolyCore expects to have a Linux version ready by the end of the year. Processors currently supported include IBM’s PPC405, Intel’s x86, ARM’s ARM9, TI’s ‘C55x, and ADI’s dual-core Blackfin BF561. 

Add new comment

Log in to post comments