Virtual Symbiotics

Asynchronous object-oriented parallelism for C++

In High-Performance Computing, speed is paramount. However, there are three aspects to speed: one is how fast the computer can run; the second is how efficiently an algorithm can be implemented and executed; and the third is how quickly a program can be written, debugged, and optimised. Often improvements in one area will cause deficits in another area. This is a problem which Virtual Symbiotics aims to solve — it’s pointless to spend an extra day programming to save an hour of run-time.

Parallel programming can follow many models. Many popular methods are variations on the same basic idea: multiple concurrent threads where each thread is sequential in nature. This is a convenient approach for today’s highly sequential CPUs used in multi-core and multi-computer arrangements. However, it has the drawback that it can lead many programmers into trying to find ways to extract parallelism from sequential algorithms instead of finding ways to make sequential optimisations to parallel algorithms. Virtual Symbiotics is intended to encourage programmers to do the latter on the basis that thinking in a parallel fashion can lead to implementations of algorithms better suited to parallel computing.

Many of the techniques promoted by Virtual Symbiotics are already familiar to many programmers but have tended to be confined to I/O and GUI functions and seem to be generally overlooked in cluster/multi-computer applications.

The basic feature of Virtual Symbiotics is that parallel processes start, run, and finish asynchronously without the concept of sender/receiver pairs. Thus there is no concept of one process waiting to receive data from another process; instead, when a process produces data it will cause the execution of a consumer. Asynchronous execution and the removal of the need to knowingly receive data has the following benefits:

  • Improves algorithm design.
  • Removes a common cause of blocking and inefficiency.
  • Removes many synchronisations and can improve the overall level of concurrency in a system.
  • Improves latency tolerance.
  • Makes it easier for the programmer to comprehend the structure of complex algorithms.

Other features include: easy multithreading across multiple computers; event-driven execution; transparent profiling and scheduling (automatic optimisation).

The name Virtual Symbiotics is used because it is a software library providing a programming model inspired by the functionality of Intesym’s general-purpose Symbiotic processor architecture which is the basis of very scalable multi-processor computers (from a single CPU to thousands). Naturally, a Symbiotic processor has parallel processing capabilities far more advanced and efficient than conventional CPUs, and so no software solution can compete directly on either simplicity or performance, but Virtual Symbiotics is aimed at bridging the programming gap.

C++ was chosen as the first target of the model because it is a popular object-oriented language with good compile-time type-checking. However, implementations for other languages are planned.

Technology in brief

A programming model for asynchronous object-oriented concurrency which supports high levels of parallelism with ease and eliminates the complexities of traditional sender/receiver models.

Technology reports

Virtual Symbiotics homepage

Related technology

Symbiotics (hardware)