What tools do you use to program multiple processor cores?

Wednesday, July 27th, 2011 by Robert Cravotta

Developers have been designing and building multi-processor systems for decades. New multicore processors are entering the market on a regular basis. However, it seems that the market for new development tools that help designers analyze, specify, code, test, and maintain software targeting multi-processor systems is lagging further and further behind the hardware offerings.

A key function of development tools is to help abstract the complexity that developers must deal with to build the systems they are working on. The humble assembler abstracted the zeros and ones of machine code into more easily remembered mnemonics that enabled developers to build larger and more complex programs. Likewise, compilers have been evolving to provide yet another important level of abstraction for programmers and have all but replaced the use of assemblers for the vast majority of software projects. A key value of operating systems is that it abstracts the configuration, access, and scheduling of the increasing number of hardware resources available in a system from the developer.

If multicore and multi-processor designs are to experience an explosion in use in the embedded and computing markets, it seems that development tools should provide more abstractions to simplify the complexity of building with these significantly more complex processor configurations.

In general, programming languages do not understand the concept of concurrency, and the extensions that do exist usually require the developer to identify the concurrency and explicitly identify where and when such concurrency exists. Developing software as a set of threads is an approach for abstracting concurrency; however, it is not clear how using a threading design method will be able to scale as systems approach ever larger numbers of cores within a single system. How do you design a system with enough threads to occupy more than a thousand cores – or is that the right question?

What tools do you use when programming a multicore or multi-processor system? Does your choice of programming language and compiler reduce your complexity in such designs or does it require you to actively engage more complexity by explicitly identifying areas for parallelism? Do your debugging tools provide you with adequate visibility and control of a multicore/multi-processor system to be able to understand what is going on within the system without requiring you to spend ever more time at the debugging bench with each new design? Does using a hypervisor help you, and if so, what are the most important functions you look for in a hypervisor?

Tags: , , ,

3 Responses to “What tools do you use to program multiple processor cores?”

  1. A.T. @ LI says:

    “If multicore and multi-processor designs are to experience an explosion in use in the embedded and computing markets, it seems that development tools should provide more abstractions to simplify the complexity of building with these significantly more complex processor configurations.” DISAGREE. A system designer is reckless if they fail to embrace a core philosophy with embedded processor selection – K.I.S.S. I do believe, however, that multicore in embedded processors will indeed be designed into jetpacks, flying cars, and domed-city HVAC systems.

  2. H.T. @ LI says:

    Hi evreryone,

    Yes, it’s a good question but the answer is better.
    An other one: For a multi-Core or a multiprocessing with hierarchical or Distributed Memory software development, ask yourself, what a real-time operating system can not do for you? And Why?

    my answer : a virtual scalable multi-core and multiprocessor system solution, orthogonal to the real time multiprocessor operating systems: two dimensional space software library: 2D-D&C solution (Data and Code), dada and code dynamic scheduling and load balancing solution for multiprocessors real time systems with hierarchical or Distributed Memory.

  3. H.T. @ LI says:

    Dears,

    Please, let me introduce myself to you: I’m a multi processors or multi core software expert and I propose a major innovation (at individual level) for a multi-Core or a multiprocessing software development: a virtual scalable multi-core and multiprocessor system solution, orthogonal to the real time multiprocessor operating systems: two dimensional space software library: 2D-D&C solution (Data and Code), data and code dynamic scheduling and load balancing solution for multicore or multiprocessors real time systems with hierarchical or Distributed Memory. My software solution and strategy is already running on Texas C6X family, and Freescale MC81XX family. Please, if you are interested by this kind of innovation do not hesitate to contact me.

    Before I can provide more information on my solution, a mutual non disclosure agreement (NDA) must be signed.

    Thanks in advance for taking time to read this message.
    Best Regards.
    H. T.

Leave a Reply