Friday, February 24, 2017

A small ARM primer

Android devices' CPUs are by and large ARM microprocessors, as these were chosen for their low-power features.

The ARM family consists of different architectures, each of which is named ARMvX, where v stands for 'version', and X is the architecture version number.

CPU architectures can be incompatible with one another, as each have different instruction sets, and programs made for one architecture won't run on the other (or there's a heavy performance penalty).

Most Android device CPUs are based on ARMv7-A (usually shortened to ARMv7) or greater, but a bevy of older devices have ARMv6.

Consequently, not all Android device CPUs are based on ARMv7 or greater, and that's why it's important to pay attention to which architecture an app was compiled for.

ARMv7 is subdivided into a series of architecture profiles, of which Android devices use ARMv7-A (Application profile). The ARMv7-A grouping is also known as Cortex-A.

A deeper subdivision in each architecture is a core, and these are named differently. Cores within the same architecture are mostly compatible between one another, but differ in performance.

Each device manufacturer or maintainer of a compatible Android fork makes their own compilation of the operating system; first for a particular architecture, and then optimised for each processor type, graphics adapter (GPU), and other hardware features.

I'm specifically pointing cores out because of naming similarities between cores and architectures; for example, ARMv7 should not be confused with ARM Cortex-A7, since the former is an architecture, and the latter a core that uses said architecture.

Respectively, ARM11 is the microprocessor core using the ARMv6 architecture; as ARM Cortex-A5 and ARM Cortex-A7 are under ARMv7.

No comments: