Multicore Programming

Multicore Programming is not nearly as complex as people would make out today, provided that you have a good structure to consider the different aspects of it. At RoweBots we would propose the following structure:

  • Multicore Architectures:
    • Heterogeneous and homogeneous
    • Shared memory
    • Thin wire
    • Hybrid
    • Effects of cache
  • Multicore Programming For Operating Systems:
    • Processes on cores
    • Threads on cores
    • Scheduling threads and processes to cores
  • Multicore Programming: Language and Concurrency:
    • Parallelism at the language level
    • Library based parallelism
    • Language and efficiency

Multicore programming is very complex because it has many perspectives.  In reality, we have dealt with all of these issues for many years - the only difference today is that we have different physical implementations and more cycles to run more advanced tools.  Clearly there is great parallels between APL and modern graphics engine based "array" processing approaches. Multiprocessors of the late 60's look similar in some ways to some multicore machines today.

RoweBots Unison operating system offers multicore support today.  It is ideally suited to small multicore MCUs which have a heterogeneous architecture.  It offers completely transparent heterogeneous processing support with a full POSIX threads implementation.  I/O is accessible from any core - this is the ultimate in simplicity for small multicore implemenations. 

The Unison OS can be ported to custom and semi-custom multicore devices in the FPGA and ASIC world if this is desired.  It offers the ability to run many cores together (256 cores is the current limit) and will run with both shared memory and thin wire I/O.  With this solution, you can effectively deal with your multicore architecture with minimal cost and risk while maintaining open standards and full compatibility and portability to and from Linux.  This ultra tiny Linux compatible implementation is ideal for high performance multicore implementations.

To understand multicore programming, understand each of the issues above and integrate these ideas.