När Apple tillkännagav iPhone 5 meddelade Phil Schiller officiellt vad som hade läckt ut flera dagar tidigare: telefonen drivs av Apples nya A6 SoC.
Som alltid tillkännagav inte Apple klockhastigheter, CPU-mikroarkitektur, minnesbandbredd eller GPU-detaljer. Det gav oss dock en indikation på förväntad CPU-prestanda:
Före tillkännagivandet spekulerade vi att iPhone 5:s SoC helt enkelt skulle vara en högre klockad version av 32nm A5r2 som används i iPad 2,4. När allt kommer omkring verkar Apple gilla att spara stora arkitekturskiften för iPad.
Men precis innan tillkännagivandet fick jag lite information som pekade på en flytt från ARM Cortex A9 som används i A5. Med tanke på Apples beroende av fullt licensierade ARM-kärnor tidigare, de förväntade prestandavinsterna och den opublicerbara informationen som startade allt detta drog jag slutsatsen att Apples A6 SoC sannolikt innehöll två ARM Cortex A15-kärnor.
Det visar sig att jag hade fel. Men positivt överraskad.
A6 är den första Apple SoC som använder sin egen ARMv7-baserade processordesign. CPU-kärnan/-kärnan är inte baserad på en vanilj A9- eller A15-design från ARM IP, utan är istället något av Apples egen skapelse.
Tips i Xcode 4.5
iPhone 5 levereras med och kör endast iOS 6.0. För att sammanfalla med lanseringen av iOS 6.0 har Apple sådd utvecklare med en nyare version av sina utvecklingsverktyg. Xcode 4.5 gör två stora förändringar: det tar bort stödet för ARMv6 ISA (används av ARM11-kärnan i iPhone 2G och iPhone 3G), behåller stöd för ARMv7 (används av moderna ARM-kärnor) och det lägger till stöd för ett nytt arkitekturmål designat för att stödja den nya A6 SoC: armv7s.
Vad är den största skillnaden mellan armv7 och armv7s arkitekturmål för LLVM C-kompilatorn? Närvaron av VFPv4-stöd. Armv7-målet stöder det, v7-målet gör det inte. Varför spelar detta roll?
Endast Cortex A5, A7 och A15 stöder VFPv4-tilläggen till ARMv7-A ISA. Cortex A8 och A9 toppar på VFPv3. Om du vill bli riktigt specifik implementerar Cortex A5 och A7 en 16 register VFPv4 FPU, medan A15 har en 32 register implementering. Poängen är att om din arkitektur stöder VFPv4 så är det inte en Cortex A8 eller A9.
Det är ganska lätt att avfärda A5 och A7 eftersom ingen av dessa arkitekturer är nämnvärt snabbare än Cortex A9 som används i Apples A5. Den uppenbara slutsatsen är då att Apple implementerade ett par A15 i sin A6 SoC.
Av opublicerbara skäl visste jag att A6 SoC inte var baserad på ARMs Cortex A9, men jag antog direkt att det enda andra alternativet var Cortex A15. Jag kastade dumt nog åt sidan den andra stora möjligheten: en Apple-utvecklad ARMv7-processorkärna.
Balanserar batteritid och prestanda
Det finns två typer av ARM-licenstagare: de som licensierar en specifik processorkärna (t.ex. Cortex A8, A9, A15), och de som licensierar en ARM-instruktionsuppsättningsarkitektur för anpassad implementering (t.ex. ARMv7 ISA). Under lång tid har det varit känt att Apple har båda typerna av licenser. Qualcomm är i en liknande situation; den licensierar individuella ARM-kärnor för användning i vissa SoCs (t.ex. MSM8x25/Snapdragon S4 Play använder ARM Cortex A5s) samt licensierar ARM-instruktionsuppsättningen för användning av sina egna processorer (t.ex. Scorpion/Krait-redskap i ARMv7 ISA).
Ett tag nu hade jag hört att Apple arbetade med sin egen ARM-baserade CPU-kärna, men sist jag hörde att Apple hade problem med att få det att fungera. Jag antog att det var för tidigt för Apples egen design att vara klar. Det visar sig att det inte är det. Baserat på mycket grävande de senaste dagarna och samtal med rätt personer, har jag bekräftat att Apples A6 SoC är baserad på Apples egen ARM-baserade CPU-kärna och inte Cortex A15.
Implementering av VFPv4 säger oss att detta inte bara är ännu en Cortex A9-design riktad mot högre klockor. Om jag fick gissa skulle jag anta att Apple gjorde något liknande Qualcomm den här generationen: gå bredare utan att gå nämnvärt djupare. Kom ihåg att Qualcomm flyttade från en dubbelutgåva, mestadels i ordningsarkitektur, till en tre breda out-of-order maskin med Krait. ARM gick från två breda OoO till tre breda OoO men eftersträvade också kraftigt klockhastigheten genom att dramatiskt öka maskinens djup.
Den djupare maskinen plus mycket bredare front- och utförandemotorer ökar både kraft och prestanda. Rykten säger att det ursprungliga designmålet för ARMs Cortex A15 var servrar, och det är bara genom big.LITTLE (eller andra smarta tekniker) som A15 skulle vara lämplig för smartphones. Med tanke på Apples intensiva fokus på strömförbrukning skulle det vara vettigt att hoppa över A15, men prestandan måste fortfarande förbättras.
Varför inte bara köra Cortex A9-kärnorna från Apples A5 vid högre frekvenser? Det är lockande, trots allt är det vad många andra har gjort i utrymmet, men suboptimalt ur ett designperspektiv. Som vi lärde oss under Pentium 4-dagarna, att helt enkelt förlita sig på frekvensskalning för att leverera prestandaförbättringar i generationerna resulterar i minskad energieffektivitet på lång sikt.
För att trycka på frekvensen måste du trycka på spänningen, vilket har en exponentiell inverkan på strömförbrukningen. Att köra dina kärnor så nära sin lägsta spänning som möjligt är idealiskt för batteritiden. Rätt tillvägagångssätt för att skala CPU-prestanda är en kombination av ökad arkitektonisk effektivitet (instruktioner som exekveras per klocka går upp), multithreading och konservativ frekvensskalning. Kom ihåg att 2005 nådde Intel 3,73 GHz med Pentium Extreme Edition. Sju år senare körs Intels snabbaste klient-CPU bara på 3,5 GHz (3,9 GHz med turbo) men har fyra gånger så många kärnor och upp till 3 gånger den enkelgängade prestanda. Arkitekturen, inte bara frekvensen, måste förbättras med tiden.
Vid sitt keynote lovade Apple längre batteritid och 2x bättre CPU-prestanda. Det är uppenbart att A6 flyttade till 32nm men det är omöjligt att extrahera 2x bättre prestanda från samma CPU-arkitektur samtidigt som batteriets livslängd förbättras över endast en enda processnodskrympning.
Trots allt detta, hade det inte varit för någon extern bekräftelse, skulle jag förmodligen ha nöjt mig med ett par högre klockade A9:or som det troliga alternativet för A6. Faktum är att högre klockade A9s var vad vi ursprungligen hävdade skulle finnas i iPhone 5 i vårt NFC-inlägg.
Jag borde nog ge Apples CPU-team mer kredit i framtiden.
Den dåliga nyheten är att jag inte har några detaljer om designen av Apples anpassade kärna. Trots Apples vilja att spendera på matrisen tror jag att en A15/Krait-klass CPU-kärna är ett troligt mål. Något bredare frontend, mer exekveringsresurser, mer flexibel OoO-exekveringsmotor, djupare buffertar, större fönster, etc… Stöd för VFPv4 garanterar en större kärnstorlek än Cortex A9, det är bara vettigt att Apple skulle pressa kuvertet överallt annars också. Jag är särskilt intresserad av frekvensmål och om det pågår något smart dynamiskt klockarbete. Någon måste köra Geekbench på en iPhone 5 pronto.
Jag har heller ingen indikation på hur många kärnor det finns. Jag antar två men Apple var noga med att inte rapportera kärnantalet (som det har gjort tidigare). Vi kommer att få mer information när vi får tag på enheter om en vecka. Jag är verkligen intresserad av att se vad som händer när Chipworks och UBM åker till stan på A6.