Heterogeneous Systems

As shown below, computing has evolved:

  • From a monolithic stack on a single CPU: in short, "compute and give result",
  • To monolithic on a single CPU in a network: in short, "compute and/or share data",
  • To Heterogeneous Systems: in short, "fastly share data between computing nodes".

Fast Sharing is now more important than Fast Computing capabilities

Heterogeneous systems incorporate different computing elements interconnected in a network as a product. But unlike a cloud, it usually integrate hardware elements too. Therfore, a heterogeneous system consists of multiple location, multiple hardwares, multiple chip types (CPU, GPU, Accelerators), multiple core (instructions, power, ...) and so on.

Computing Evolution

Last decades have seen considerable growth in the number and diversity of technological innovation:

  • Chip types: CPU, GPU, FPGA, AI, Accelerators, ...,
  • CPU cores and Virtual CPUs,
  • Hardware concurrency instructions like SIMD,
  • Memory types and models: cache, NVM, NUMA, ...,
  • Virtual Machines and containers,
  • Operating systems new components: eBpf, io_uring, ...,
  • Languages runtime: Go, Erlang, Java, NodeJs, ...,
  • Frameworks: web, persistence, server, AI, message queues, ...

Most developers might not realize that building robust services in the face of heterogeneous hardwares, softwares, workloads and erroneous clients is a hard problem.

U has been design to be able to address current and future challenges in heterogeneous and restricted embedded environment.