Matthew Gretton-Dann titled this presentation: Porting & Optimising Code 32-bit to 64-bit
The title is accurate but he does a better job of giving a high level overview of the ARMv7 and ARMv8 architecture differences, C++11 memory models (which become more interesting as threading complexity increases), but mostly, he covers why you should consider use NEON intrinsics. If you're writing algorithms that deal with lots of data, you may be safer and faster trusting the compiler to auto vectorize code written in intrinsics than writing it in assembly. NEON Intrinsic code has the added benefit of being cross ARM architecture compatible and you didn't hear it from me but there are open source drop in replacements for arm_neon.h that may gain you even more portability.
We have some more white papers on porting from 32-bit ARM to 64-bit ARM in the pipeline but if you prefer to sit down and watch a lecture on the aforementioned topics, grab his presentation PDF and listen to / watch this video. The camera operator takes a nap for the first 18 minutes but the PDF is easy to follow.
If you need some help identifying which algorithms to optimize first in your Android or Linux apps, check out the free Streamline profiler in ARM's DS-5 Community Edition. Follow this Android Community and Advanced Android Application Development category if you're interested in hearing more about NEON, porting and transitioning to Android on ARMv8 (64-bit).
This is great, thanks for sharing the links to the presentation - I'm sure the Software Development Tools group will be interested! There's a DS-5 tutorial for using Streamline with Android and Linux over on the DS-5 website that might be useful too.
hi,
I couldn't get the link from " presentation PDF".
Could you show me another link ?
thx.
Hi,
I already have a Neon library working on armv7 (A15).
I am now planing to test the same on armv8 (A57), can I use the same library for Neon or do I need to re-code it?
Thanks.
It depends on what language the library was written in/how your code was generated and what your performance needs are.
If your library was written in NEON C Intrinsics, you should simply have to re-compile with ARMv8 flags in a gcc v4.9 or newer or newer llvm/clang compiler.
If your library was written in ARMv7 GAS assembly, you'll have to use the new ARMv8 register naming convention and there have been some deprecated instructions.
This video is a good place to get started understanding the differences.
Also, consider the larger v8 NEON registers. In ARMv7, there were 16 x 128bit registers, in ARMv8, there are 32 x 128bit registers to there is an opportunity to refactor your code to take advantage of this and gain some performance if that is of interest.