Было бы неплохо разделить кэш и выделить каждый массив в отдельной его части.
К сожалению, это невозможно. Кэши CortexA8 просто не такие гибкие. У старого доброго StrongArm был дополнительный кэш для этой цели, но он больше не доступен. Вместо этого у нас есть кэши L1 и L2 (в целом хорошее изменение imho.)
Однако есть кое-что, что вы можете сделать:
Блок NEON SIMD CortexA8 отстает от универсального процессора примерно на 10 процессорных циклов. При умном программировании вы можете выдавать предварительные выборки из кеша из универсального устройства, но осуществлять доступ через NEON. Задержка между двумя конвейерами дает кешу немного времени для выполнения предварительных выборок, поэтому среднее время задержки кеша будет ниже.
Недостатком является то, что если вам никогда не придется перемещать результат вычисления обратно из NEON в модуль ARM. Поскольку NEON отстает, это приведет к полной очистке конвейера ЦП. Почти, если не дороже, из-за отсутствия кеша.
Разница в производительности может быть значительной. Внезапно я ожидал бы что-то между 20% и 30% улучшения скорости.