PostPC devices had to replace PCs, that was said a few years ago. At the end? We are working with devices that speak different languages and in some cases they force us to switch between different devices at all times. But with the future arrival of ARM-based PCs we wonder if we will see mixed processors with x86.
On the one hand we have the PCs whose programs are compiled for the x86 set of registers and instructions, on the other hand we have the so-called PostPC devices, whose applications speak in ARM. But, in recent times the designers of processors for PostPC systems have shown that they want to make the jump to the PC, not to x86, but to have PCs based on ARM.
This has ended up making in the end there are two different markets, each one speaking its language and an endless number of applications incompatible with another system. The ideal scenario? Having a PC with the ability to run the programs and systems on both sides, for both ARM and x86.
But is this possible? We will try to explain the problems that architects would face when designing both a hybrid system and a hybrid SoC, as well as the reason why Intel and AMD have not released their mixed processor.
AMD and Intel are not interested in a mixed CPU between ARM and x86
The first problem is that the x86 license is only licensed by Intel and AMD, so these two companies are the only ones capable of making a CPU compatible with x86 binaries. So, first of all, we must think a little about what would happen if these companies made a CPU capable of executing the programs designed for ARM.
We have to bear in mind that it would be impossible to run the environment on x86 and on ARM at the same time, so most developers knowing that PCs with x86 could also run ARM code are not going to bother, little by little, the code x86 would become obsolete and ARM would grow in percentage of use.
A world in which people do not use x86 programs is a world that is not worth it for Intel and AMD, so a processor on their part that can run both environments would not be their ideal
Deploying x86 and ARM on a single system
Do we have an example of this? Yes, we have one that is in tens of millions of homes called PlayStation 4, a console whose main processor is an AMD SoC based on x86 but then has a second processor with an ARM processor. This processor is only activated when the console is in stand-by mode, runs an operating system in parallel and has its own RAM memory.
The simplest idea to unify both worlds is to create a computer that, depending on the level of consumption required at all times, activates one SoC or another, the system is activated in one way or another, but this means that two systems are present in the same computer and designing the entire power distribution system for the two systems, which is not a daunting task.
The other problem would come in the use of the I / O devices of the system, all of them should be available for the processors of both ISAs, so either the hardware that accesses the peripherals is duplicated or a common element is created. , which conflicts with the different ways in which each type of processor talks to them.
Two ISAs running at the same time on one SoC, is it possible?
If there is something that characterizes SoCs, it is not only that all the components are on the same chip, but that they all share the same memory access, but what happens when two processors do not understand the same language? Well, that is not a problem since the SoCs have in their GPUs a different way to the CPU to read the binaries, all that is needed is to mark in the memory addressing which part is for ARM and which part is for x86.
Sounds easy doesn’t it? Well no, the reason is that x86 is Little Endian, which means that it goes through the memory from the lowest memory address to the highest, ARM is Bi-Endian so programs can start at both ends and go up or down depending on the case. In principle, it would be easy to associate an endpoint to each ISA, but there are operating systems for ARM that work in Little Endian.
The other problem is the fact that RAM is designed to serve a processor at the same time, so if we have two processors accessing at the same time, one would contain contention over the other in accessing the memory, so applications designed to both ISAs would not run with the same ease, not to mention that the resources shared between both within the SoC would also do so.
So. How is it that a GPU can share space with a CPU smoothly? Well, for the simple fact that GPUs, although they manipulate data and run programs, are not designed to run an operating system, and the existence of a completely schizophrenic operating system that can be understood with two architectures at the same time is impossible. Where each one has its own way of addressing memory and accessing peripherals.