Custom Code to Understand a Custom Core

Section by Anand Shimpi

All Computer Engineers at NCSU had to take mandatory programming courses. Given that my dad is a Computer Science professor, I always had exposure to programming, but I never considered it my strong suit - perhaps me gravitating towards hardware was some passive rebellious thing. Either way I knew that in order to really understand Swift, I'd have to do some coding on my own. The only problem? I have zero experience writing Objective-C code for iOS, and not enough time to go through a crash course.

I had code that I wanted to time/execute in C, but I needed it ported to a format that I could easily run/monitor on an iPhone. I enlisted the help of a talented developer friend who graduated around the same time I did from NCSU, Nirdhar Khazanie. Nirdhar has been working on mobile development for years now, and he quickly made the garbled C code I wanted to run into something that executed beautifully on the iPhone. He gave me a framework where I could vary instructions as well as data set sizes, which made this next set of experiments possible. It's always helpful to know a good programmer.

So what did Nirdhar's app let me do? Let's start at the beginning. ARM's Cortex A9 has two independent integer ALUs, does Swift have more? To test this theory I created a loop of independent integer adds. The variables are all independent of one another, which should allow for some great instruction level parallelism. The code loops many times, which should make for some easily predictable branches. My code is hardly optimal but I did keep track of how many millions of adds were executed per second. I also reported how long each iteration of the loop took, on average.

Integer Add Code
  Apple A5 (2 x Cortex A9 @ 800MHz Apple A5 Scaled (2 x Cortex A9 @ 1300MHz Apple A6 (2 x Swift @ 1300MHz Swift / A9 Perf Advantage @ 1300MHz
Integer Add Test 207 MIPS 336 MIPS 369 MIPS 9.8%
Integer Add Latency in Clocks 23 clocks   21 clocks  

The code here should be fairly bound by the integer execution path. We're showing a 9.8% increase in performance. Average latency is improved slightly by 2 clocks, but we're not seeing the sort of ILP increase that would come from having a third ALU that can easily be populated. The slight improvement in performance here could be due to a number of things. A quick look at some of Apple's own documentation confirms what we've seen here: Swift has two integer ALUs and can issue 3 operations per cycle (implying a 3-wide decoder as well). I don't know if the third decoder is responsible for the slight gains in performance here or not.

What about floating point performance? ARM's Cortex A9 only has a single issue port for FP operations which seriously hampers FP performance. Here I modified the code from earlier to do a bunch of single and double precision FP multiplies:

FP Add Code
  Apple A5 (2 x Cortex A9 @ 800MHz Apple A5 Scaled (2 x Cortex A9 @ 1300MHz Apple A6 (2 x Swift @ 1300MHz Swift / A9 Perf Advantage @ 1300MHz
FP Mul Test (single precision) 94 MFLOPS 153 MFLOPS 143 MFLOPS -7%
FP Mul Test (double precision) 87 MFLOPS 141 MFLOPS 315 MFLOPS 123%

There's actually a slight regression in performance if we look at single precision FP multiply performance, likely due to the fact that performance wouldn't scale perfectly linearly from 800MHz to 1.3GHz. Notice what happens when we double up the size of our FP multiplies though, performance goes up on Swift but remains unchanged on the Cortex A9. Given the support for ARM's VFPv4 extensions, Apple likely has a second FP unit in Swift that can help with FMAs or to improve double precision FP performance. It's also possible that Swift is a 128-bit wide NEON machine and my DP test compiles down to NEON code which enjoys the benefits of a wider engine. I ran the same test with FP adds and didn't notice any changes to the data above.

Sanity Check with Linpack & Passmark

Section by Anand Shimpi

Not completely trusting my own code, I wanted some additional data points to help understand the Swift architecture. I first turned to the iOS port of Linpack and graphed FP performance vs. problem size:

Even though I ran the benchmark for hundreds of iterations at each data point, the curves didn't come out as smooth as I would've liked them to. Regardless there's a clear trend. Swift maintains a huge performance advantage, even at small problem sizes which supports the theory of having two ports to dedicated FP hardware. There's also a much smaller relative drop in performance when going out to main memory. If you do the math on the original unscaled 4S scores you get the following data:

Linpack Throughput: Cycles per Operation
  Apple Swift @ 1300MHz (iPhone 5) ARM Cortex A9 @ 800MHz (iPhone 4S)
~300KB Problem Size 1.45 cycles 3.55 cycles
~8MB Problem Size 2.08 cycles 6.75 cycles
Increase 43% 90%

Swift is simply able to hide memory latency better than the Cortex A9. Concurrent FP/memory operations seem to do very well on Swift...

As the last sanity check I used Passmark, another general purpose iOS microbenchmark.

Passmark CPU Performance
  Apple A5 (2 x Cortex A9 @ 800MHz Apple A5 Scaled (2 x Cortex A9 @ 1300MHz Apple A6 (2 x Swift @ 1300MHz Swift / A9 Perf Advantage @ 1300MHz
Integer 257 418 614 47.0%
FP 230 374 813 118%
Primality 54 87 183 109%
String qsort 1065 1730 2126 22.8%
Encryption 38.1 61.9 93.5 51.0%
Compression 1.18 1.92 2.26 17.9%

The integer math test uses a large dataset and performs a number of add, subtract, multiply and divide operations on the values. The dataset measures 240KB per core, which is enough to stress the L2 cache of these processors. Note the 47% increase in performance over a scaled Cortex A9.

The FP test is identical to the integer test (including size) but it works on 32 and 64-bit floating point values. The performance increase here despite facing the same workload lends credibility to the theory that there are multiple FP pipelines in Swift.

The Primality benchmark is branch heavy and features a lot of FP math and compares. Once again we see huge scaling compared to the Cortex A9.

The qsort test features integer math and is very branch heavy. The memory footprint of the test is around 5MB, but the gains here aren't as large as we've seen elsewhere. It's possible that Swift features a much larger branch mispredict penalty than the A9.

The Encryption test works on a very small dataset that can easily fit in the L1 cache but is very heavy on the math. Performance scales very well here, almost mirroring the integer benchmark results.

Finally the compression test shows us the smallest gains once you take into account Swift's higher operating frequency. There's not much more to conclude here other than we won't always see greater than generational scaling from Swift over the previous Cortex A9.

Decoding Swift Apple's Swift: Visualized
Comments Locked

276 Comments

View All Comments

  • mykebrian - Thursday, October 18, 2012 - link

    is motorola razr i same price with iphone 5?
  • Death666Angel - Thursday, October 18, 2012 - link

    "By controlling its own SoC destiny it could achieve a level of vertical integration that no OEM has enjoyed in recent history."
    I would argue that Samsung enjoys a similar level of vertical integration. They trade the OS-stuff for some fabs. Not sure which can be more profitable. But other than that, they are very much like Apple in terms of vertical smartphone integration I think. :)
  • iwod - Thursday, October 18, 2012 - link

    Any Reason Why Front Camera not using High Profile When Recording Video? It could have saved yet another bit of space with MUCH better quality then baseline.

    And do Apple offically support play back of H.264 High Profile Video Clip yet?
  • Spunjji - Friday, October 19, 2012 - link

    I very much appreciated the details on the SoC design. Your attempts to refine your battery life analysis were also appreciated, as these do seem to better reflect real-world usage. In general this article was well-researched, well-written and very informative.

    Unfortunately, the section on the anodization process does end up reading like one big apology. The matter is explained in detail but it's done with an air of resignation, as if this were the only option available to Apple. The fact is that they could have retained some additional girth (whilst still losing some) and had a device with good handling, good aesthetics and superior durability. No comparison to competing devices is made whatsoever, so we have no idea based on your article alone if this really is unavoidable or just poor choice of materials.

    The same goes for the part about the camera flare. Is a short comparison with a few relevant models too much to ask? The problem is that (like the previous criticism) I already know how this comes out and it doesn't look very good for Apple.

    So there are hundreds of hours spent testing comparative performance and battery life where Apple win, yet no time at all dedicated to comparative analysis where they do not look so good. That starts to look upsettingly like bias. I hope that isn't the case but based on other areas (notebook reviews in particular) it starts to feel like a theme.

    Anandtech, as a site I love your tech journalism, but the personal preferences of the writers need to stay at home (or firmly in editorials).
  • Slaanesh - Friday, October 19, 2012 - link

    Couldn't agree more.
  • Krysto - Friday, October 19, 2012 - link

    I have to agree. Through out the article, you almost got the impression of worship from the writers, and they've only focused on what Apple did right and how much better that was than their competitors.

    And what's with all the going back to history of Apple's devices? Was that really necessary for a phone review? Should we expect this for all new iPhones...or for all new Galaxy S devices? I think that part alone shows bias.

    And was 50 page review (or whatever it is) really necessary and to wait a month and a half after the product launch? The reason I'm asking is because I know they will never repeat this for any other non-Apple product. But I also think it's kind of pointless, and reviews need to appear max 1 week after the product launches. Maybe two. More than that is really pointless, and it's already obvious in the review that half of it is about how awesome Apple were in the past and still are, and only the other half goes down to the analysis.
  • dyc4ha - Saturday, October 20, 2012 - link

    +1
  • Klugfan - Friday, October 19, 2012 - link

    Does everyone remember Edward Tufte's complaints about the iPhone 4 design?

    If I wasn't concerned about impact on the antenna performance, I'd be tempted to take some fine grit sandpaper to my black iPhone 5, and round off the edges a little. Believe it.

    If your biggest concern about phones _really_ is resale value, well the iPhone 5 will do fine, with or without scuffs. If your biggest concern about brain phones is what they look like to other people who see you using them, well, first you're an idiot, and second the iPhone 5 really will do fine there, with or without scuffs.

    Does my phone make me look smug? Whatever shall I do.
  • Hxx - Friday, October 19, 2012 - link

    got this phone close to release day and I'm throughly impressed with it. Coming from a droid incredible 2 who crapped out on me 10 months after purchase (the memory slot broke and lost all my pics, videos etc - not fun) I gotta say this is my first interaction with an iOS powered device and so far i love it. I think most Apple products are overpriced (hence the reason why i never got one) but this phone is a beauty for $199 given that i paid almost just as much 1 year ago for my droid phone. A huge thank you to Anandtech for providing such detailed review. Although i may never need as much detail about a phone :-), its nice to know i can always rely on you guys if I ever have any technical questions.
    Good job Guys!
  • ol1bit - Friday, October 19, 2012 - link

    As always, Anandtech gets into the details I didn't even know I wanted to read about!

    I'm not an apple product owner, and never plan to be, but it really appears to be a great phone.

    Keep up the good work!

Log in

Don't have an account? Sign up now