Я написал эту очень наивную реализацию NEON для преобразования из RGBA в RGB. Это работает, но мне было интересно, есть ли что-нибудь еще, что я мог бы сделать для дальнейшего улучшения производительности.Оптимизация сборки RGBA-> RGB arm64
Я пробовал играть с размером предварительной выборки и разворачивать петлю немного больше, но характеристики не сильно изменились. Кстати, есть ли какое-либо эмпирическое правило, когда дело доходит до измерения предварительной выборки? Я не мог найти ничего полезного в сети. Кроме того, в «Обзор набора инструкций ARMv8» я вижу, что есть также предварительная выборка для магазина, как это полезно?
В настоящее время я получаю около 1,7 мс для преобразования изображения 1280х720 на iPhone5.
// unsigned int * rgba2rgb_neon(unsigned int * pDst, unsigned int * pSrc, unsigned int count);
_rgba2rgb_neon:
cmp w2, #0x7
b.gt loop
mov w0, #0
ret
loop:
prfm pldl1strm, [w1, #64]
ld4.8b {v0, v1, v2, v3}, [w1], #32
ld4.8b {v4, v5, v6, v7}, [w1], #32
prfm pldl1strm, [w1, #64]
st3.8b {v0, v1, v2}, [w0], #24
st3.8b {v4, v5, v6}, [w0], #24
subs w2, w2, #16
b.gt loop
done:
ret
Тестирование на iPad Mini Retina (процессор Apple A7), похоже, указывает на невременную подсказку для хранения, которая не влияет на производительность. – BitBank
@BitBank: условия, при которых невременные магазины приносят пользу, несколько сложны для характеристики. Важно помнить, что одним из их самых больших преимуществ является то, что они не выделяют во внутренний кеш, а это означает, что их влияние иногда наблюдается только в коде, который окружает цикл, который был изменен для их использования. Мое руководство действительно «пробует их, измеряет всю производительность программы, и если они дают улучшение, используйте их». –
Я пришел к такому выводу, проверив функцию, которая записывает в буфер изображения больше, чем кэш L2. Данные записываются и не упоминаются снова до конца. Это казалось идеальным вариантом, чтобы попробовать «потоковой» вариант инструкции магазина. Мне нужно проверить это на Nvidia K1 Denver, чтобы узнать, отличается ли поведение от Apple A7. Скоро обновится ... – BitBank