Android

Sorry for the Inconvenience

We’ve had a database issue over the last day. I had to do some database pruning and optimizations. You may notice that some older data no longer shows up. Anything earlier than 1 Jan 2011 had to be archived.

This is why I developed Linpack

I just downloaded Android 2.2 (Froyo) for my Samsung Vibrant.  I was getting about 8.4 MFLOPS on my stock rom and now I’m seeing 13.4.  Woohoo!  It’s nice to know when an update does not negatively impact the performance on my phone.

Also, for all the comments I get on the Market that Linpack “only runs on Snapdragon”  or it wasn’t developed on Humingbird processors.  Sorry, but you’re wrong.  My main development phone is the Vibrant.  Why, because it’s my day to day phone. 

Just as raw Horsepower in a car is not the sole measure of what car to buy, MFLOPS isn’t either.  But, it is fun to take it out to the drag strip to see who’s the fastest.

Linpack on a Tegra 2 (LG Optimus 2X)

Here is a clip from SlashGear about the new LG Optimus 2X.

Check out the clip at the 2:00 mark.  The LG scored a 36.753

Mea Culpa: Why are the Nexus One Linpack scores so much higher than on my phone?

In my previous post, I stated that the increased performance with Android 2.2 (Froyo) runs on the Nexus One, Droid Incredible, and the EVO 4G were due to one thing; NEON.  As zygame pointed out to me in a comment to that post, NEON was designed for multimedia acceleration.  More specifically, it is a set of SIMD instructions for integer and single-precision floating-point arithmetic to accelerate multimedia and signal processing algorithms.  A little closer examination there would have caught the fact that the Linpack benchmark is primarily a double-precision floating-point benchmark.

Okay, then what is the reason?  Could it be the VFP extension for double-precision arithmetic?  I think it helps, devices from Samsung using the S5PC110 processor show an improvement.  However, they do not show the dramatic improvement that we see with the Nexus One and others.  All of the 1GHz smartphones use ARM processors with almost identical features. Digging deeper, it looks like all the fastest phone use the Qualcomm Snapdragon processor. 

So, what is it about the Snapdragon then that makes it perform so much better on the Linpack benchmarks?  The Nexus One, Droid Incredible, and the EVO 4G use the same type processor, the Qualcomm Snapdragon processor with the Scorpion core.    The Scorpion core is an a 1-GHz control processor based on ARM’s Cortex instruction set supported by an array of 600-MHz DSP and accelerator cores for baseband and video processing that offer 128-bit single instruction multiple data (SIMD) functionality. Thus, the Scorpion core can process SIMD instructions in 128-bit-wide chunks, while most other Cortex based chips are restricted to 64 bits. Scorpion also has a deeper pipeline, which includes VFP commands, while VFP commands are not pipelined in the Cortex.

The Android 2.2 JIT compiler currently delivers the most significant performance gains for Snapdragon CPUs.  Eventually, the JIT compiler will be better optimized for the other ARM processors.   Hopefully, they will show the performance increases shown for the Scorpion core processors, but I suspect they will not reach the top of the list.

Why are the Nexus One Linpack scores so much higher than on my phone?

I get all sorts of comments directly to me and I see them posted on many boards.  Generally, people want to know why their phone doesn’t show the leap in the Linpack score when they run Froyo that others see on the Nexus One, Droid Incredible, or the EVO 4G.   The one word answer:  NEON.

After looking into it for a while, I was focusing on what makes the Nexus One so much better than the other phones.  On the chip level, I didn’t see it.  Then it dawned on me to look at what Google had to say on the matter.  Well, it was there in black and white.  In their 20 May 2010 Developer’s Blog entry (http://android-developers.blogspot.com/2010/05/android-22-and-developers-goodies.html) they say that people could see a 2-5x speed increase.  I think it is pointed out in an entry later in the blog dealing with NDK, which I initially missed:  “ARM Advanced SIMD (a.k.a. NEON) instruction support The NEON instruction set extension can be used to perform scalar computations on integers and floating points. However, it is an optional CPU feature and will not be supported by all Android ARMv7-A based devices. The NDK includes a tiny library named “cpufeatures” that can be used by native code to test at runtime the features supported by the device’s target CPU.”

So, I guess this means that NEON is the difference.  If your phone’s CPU has it and it’s enabled for JIT, you can expect higher Linpack numbers.