Прежде всего, какую библиотеку вы используете?
Вы правы, каждое ядро имеет свой собственный блок NEON, однако это собственный проприетарный блок VeNum, и о нем не предоставлено много информации. Он был разработан для Scorpion на базе Cortex-A8 в 8x50 и был довольно лучше, чем собственная реализация ARM NEON SIMD, однако хорошее облегчение состоит в том, что они (qcom) проектируют свое оборудование таким образом, чтобы оно было совместимо с базовым дизайном refrence, поэтому большая часть кода для cortex-A8 будет отлично работать с Scorpion, хотя и с некоторыми снижение производительности из-за возможного различного времени выполнения команд.
Если вы используете "softfp" для компиляции вашей программы, у вас будет около 20 циклов для каждой вызываемой вами функции, которая использует аргументы с плавающей запятой или использует блок NEON для передачи данных регистра из ядра ARM в Неоновый блок и наоборот довольно медленный и иногда может останавливать ядро на много циклов, ожидая сброса трубопровода.
Также для многопоточной программы, использующей модуль с плавающей запятой, ядро должно сохранять регистры FP во время переключения контекста, что влечет за собой дополнительные потери для потоков, так как мы уже знаем, что перемещение регистров от неона к руке медленное и известно, что оно останавливает трубопровод.
Кроме того, многие другие факторы могут привести к этому, например, плохая оптимизация от компилятора, потеря кэша, неиспользование функции двойного выпуска скорпиона, неправильное планирование команд и неоднократное переключение вашего потока с одного ядра на другое.