Я разрабатываю нативную библиотеку для Android, где использую оптимизации сборки ARM и многопоточность, чтобы получить максимальную производительность на двухъядерном чипсете ARM MSM8660. Делая некоторые замеры, я заметил следующее:
- Однопоточная библиотека с оптимизацией NEON быстрее, чем однопоточная библиотека с ARMv6< /strong> оптимизация (как и ожидалось).
- Многопоточная библиотека с оптимизацией ARMv6 быстрее, чем однопоточная библиотека с ARMv6< /strong> оптимизация (как и ожидалось).
- Многопоточная библиотека с оптимизацией NEON работает медленнее, чем однопоточная библиотека с NEON< /strong> оптимизации (определенно не ожидаемые!).
Я пробовал искать по всей сети объяснение, почему это так, но до сих пор не нашел. Кажется, что все ядра используют один и тот же конвейер NEON или что-то в этом роде, но все схемы указывают на то, что каждое ядро должно иметь свой собственный блок NEON. Кто-нибудь знает, почему это происходит?