This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Differences between NEON in Cortex-A8 and A9

Note: This was originally posted on 25th July 2011 at http://forums.arm.com

Currently i am working on a Cortex-A9 single-core chip(AML8726-m if you want to know more), and in the datasheet it's said there is a neon in it. But when i test the code here(http://hilbert-space.de/?p=22), i cannot find any acceleration on it, sometimes the neon-assembly- optimized code runs even slower than the arm-c-code. At the same time, the same code can get a pretty good acceleration on my i.MX515 which is a Cortex-A8 chip.


I am using the Android NDK to build a test app running on Android, can it be the reason?
Can anyone tell me why it happens? 


Here is some results:
#####On A8#####
arm c code: 116.*** ms
neon c code: 83.*** ms
neon asm code: 51.*** ms
#####On A9#####
arm c code: 107.*** ms
neon c code: 106-107.*** ms
neon asm code: 106-107.*** ms

Android is Linux based OS, so I can call gettimeofday() to get a precise time period in us level. The results on A9 are not identical but almost the same and I didn't run the same binary 3 times, I'm sure.

Thanks and looking forward to any useful suggestions.


Parents
  • Note: This was originally posted on 8th August 2012 at http://forums.arm.com

    isogen's answers are right.. to elaborate a little bit more: if you have an instruction that outputs in N3 and the next one right after it needs its result in N2 then there'll be a cycle in between where the NEON unit is doing nothing. So the second one will start two cycles after the first one.

    You should try setting up a test loop that runs iterations of code like this many times, so you can time how long it takes and see for yourself. Then you can change instructions one at a time and see what happens.
Reply
  • Note: This was originally posted on 8th August 2012 at http://forums.arm.com

    isogen's answers are right.. to elaborate a little bit more: if you have an instruction that outputs in N3 and the next one right after it needs its result in N2 then there'll be a cycle in between where the NEON unit is doing nothing. So the second one will start two cycles after the first one.

    You should try setting up a test loop that runs iterations of code like this many times, so you can time how long it takes and see for yourself. Then you can change instructions one at a time and see what happens.
Children
No data