During the last decade the software and computing industry has lived a revolutionary change that deeply impacts on how developers embark on delivering software. The mainstream computing landscape has shifted from single–processor machines, to a multi-core, multi-type machines. This “multi-everything” trend has changed all types of computers, devices (phones, tablets, IoT devices and sensors) plus the option of also using remote cloud infrastructures, also providing heterogeneity. In the current scenario there is almost “endless supercomputing power” available in every case to be used by programmers. This changes everything. From OS, to languages and tools. But most importantly, it changes how developers write software and create applications that take advantage of a growing number of heterogeneous specialized hardware.
The benefits of this “multi-everything” context affect developers’ needed skills, and of course, the technology and tools they need by introducing one new complexity into every developer’s job: programming while being aware, and taking advantage, of heterogeneity. New programming paradigms need to cope with the existence of multiple cores, multiple types processors being able to do specific, or general, tasks, and at different speed. Whey will also need to cope with the option of being able to use distributed jobs, locally or remote. Thus, developers need to be aware, and take advantage of such possibilities when architecting their applications.
Therefore, creating processor or multi-core type sensitive applications is necessary to create applications today that will exploit the benefits of tomorrow yet-to-come hardware and provide solutions for the new economy demands, that would be impossible unless running highly parallelizable local code capable of using e.g. CPU and GPU cores on mobile devices to provide full and enriched user experiences, possible complemented by distributed (close, other devices; or distant remote, cloud).
However, great powers come with great responsibility for developers. Firstly, programmers need to create applications that comply with power constrains, e.g. due to space constrains in mobile or IoT devices, but responsible for providing demanding compute functionalities. Also due to provide as much computing power as possible with the same hardware with the fewer energy consumption possible, e.g. in the case of exascale computing run, in which energy is a limiting factor. Secondly, programmers will need to cope with performance constrains. They will need to extract the most of every hardware, on every context to fulfill expectations. But no world is ideal enough to consider the best case for both of them. Thus a performance vs energy trade-off, alongside others that include aspects such as security, time-criticality, data movement, cost, etc. should be considered by developers.
In TANGO, we believe that programming methodologies and models are key to provide developers with the right tools to cope with this scenario. This is why we have started this initiative to create a methodology and a toolbox with the intention to facilitate developers’ life. During the next months we will be committed to create a toolbox that will allow developers to control and abstract underlying heterogeneous hardware architectures, configurations and software systems including heterogeneous clusters, chips and programmable logic devices while providing tools to optimize various dimensions of software design and operations, without the need to fully understand the details of different underlying hardware configurations.
In the following months we will continue to share with you various aspects related to the project objective, so stay tuned for more interesting articles. And don’t forget to stay updated in our website news section (http://www.tango-project.eu) and in our social media channels.