mantech 49 20 июля, 2020 Опубликовано 20 июля, 2020 · Жалоба 1 минуту назад, __inline__ сказал: Он помогает конвееризировать бурсты? Дак он именно для этого и сделан... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 20 июля, 2020 Опубликовано 20 июля, 2020 (изменено) · Жалоба 2 minutes ago, mantech said: Дак он именно для этого и сделан... Ещё битовое поле TEX=1 в приемнике. Но об этом почему-то не пишут. Экспериментально обнаружил ускорение используя это поле. На ПК тоже были недокументированные вещи - типа MSR-регистров, включающие кеширование видеопамяти. В итоге CPU писал в 2,5 раза быстрее, чем при дефолтных настройках BIOS'а после загрузки :) Изменено 20 июля, 2020 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 49 20 июля, 2020 Опубликовано 20 июля, 2020 · Жалоба 1 минуту назад, __inline__ сказал: Ещё битовое поле TEX=1 в приемнике. Да про эти вещи тоже толковой документации нет, на сайте АРМ надо быть профессором по этой тематике, чтоб что-то понять... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 20 июля, 2020 Опубликовано 20 июля, 2020 (изменено) · Жалоба 3 minutes ago, mantech said: Да про эти вещи тоже толковой документации нет, на сайте АРМ надо быть профессором по этой тематике, чтоб что-то понять... Я тоже из референса ничего там не понял ))) Вот, подтверждают, что регион должен быть с выключенным кешем(приемник) для NEON-memcpy: https://stackoverrun.com/ru/q/9617352 иначе с включенным битом кеша для региона приемника скорость просядет (писал об этом выше, замерял таймером с 6 МГц-разрешением) Изменено 20 июля, 2020 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 49 20 июля, 2020 Опубликовано 20 июля, 2020 (изменено) · Жалоба 4 минуты назад, __inline__ сказал: иначе с включенным битом кеша для региона приемника скорость просядет Дак с кэшированным регионом и обычное копирование быстро идет... Единственная проблема - эти выравнивания, для произвольной области это ад... Изменено 20 июля, 2020 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 20 июля, 2020 Опубликовано 20 июля, 2020 (изменено) · Жалоба 6 minutes ago, mantech said: Дак с кэшированным регионом и обычное копирование быстро идет... :) я про то, что кеширование региона для приёмника наоборот надо ОТключить :) Ещё один плюс - делать clean/flush data cache при этом не нужно :) Изменено 20 июля, 2020 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 49 20 июля, 2020 Опубликовано 20 июля, 2020 · Жалоба 3 минуты назад, __inline__ сказал: кеширование региона для приёмника наоборот надо ОТключить А для источника разве не надо? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 20 июля, 2020 Опубликовано 20 июля, 2020 · Жалоба 2 minutes ago, mantech said: А для источника разве не надо? А для источника кеширование надо включать. Потому что у меня это задний буфер, и я из него читаю ещё... Если отключить кеширование в источнике, общая скорость проседает. И TEX для источника должен быть =0. Иначе мусор пойдёт. Объяснить не могу почему, так как не профессор в АРМ-ах :) Установил экспериментально Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 49 20 июля, 2020 Опубликовано 20 июля, 2020 · Жалоба 4 минуты назад, __inline__ сказал: И TEX для источника должен быть =0. Иначе мусор пойдёт. Объяснить не могу почему, так как не профессор в АРМ-ах :) Я тоже, надо будет поэкспериментировать... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 21 июля, 2020 Опубликовано 21 июля, 2020 (изменено) · Жалоба On 7/20/2020 at 11:27 PM, mantech said: Я тоже, надо будет поэкспериментировать... Перепробовал все комбинации битов. Нашёл ещё одну, которая даёт тоже самое максимальное быстродействие(для DST -приемник): TEX=4, C=0, B=0. скорость аналогична с: TEX=1, C=0, B=1 В доках очень мутно расписано, и надо быть профессором кислых щей ARM'ов, чтобы вообще понять что происходит. Тем более комбинация при TEX=001 C=0 B=1 - зарезервирована, а по факту - одна из быстрых при копировании. Мало того, документ умалчивает об Outer policy и Inner policy... Мутно как-то всё. Дополнительно пытался использовать L2 кеш, но я разницы в скорости вообще не вижу - складывется впечатление, что либо L2 уже работает, либо он так и не включился. L2 включаю таким кодом: @ ================================================================== @ Enable Cortex-A8 Level2 Unified Cache @ ================================================================== MRC p15, 0, r0, c1, c0, 1 @ Read Auxiliary Control Register ORR r0, r0, #2 @ L2EN bit, enable L2 cache @ ORR r0, r0, #(0x1 << 4) @ Enables speculative accesses on AXI @ ORR r0, r0, #(0x1 << 5) @ Enables caching NEON data within the L1 data cache MCR p15, 0, r0, c1, c0, 1 @ Write Auxiliary Control Register При этом если раскомментировать: Enables speculative accesses on AXI и Enables caching NEON data within the L1 data cache, то на выходе не вижу разницы в быстродействии копирования NEON-ом. Зато обязательно надо установить бит 6 вот здесь (писал в соседней теме, сдублирую): /* Enable SMP mode for CPU0, by setting bit 6 of Auxiliary Ctl reg */ asm volatile( "mrc p15, 0, r0, c1, c0, 1\n" "orr r0, r0, #1 << 6 \n" "mcr p15, 0, r0, c1, c0, 1\n" ); Иначе во внешней памяти программа будет крайне медленно работать, особенно когда будут читаться данные. Этот бит разрешает режим когерентности для CPU. Тут надо быть профессором кислых щей, чтобы разобраться как оно влияет на производительность. Изменено 21 июля, 2020 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 49 22 июля, 2020 Опубликовано 22 июля, 2020 · Жалоба 7 часов назад, __inline__ сказал: Дополнительно пытался использовать L2 кеш, В IMX6 тоже проверял работу L2 при включении получал ускорение 5%, но она там 512килобайт, а моя прога 510 была, может поэтому был прирост, т.к. она вся в кэше помещалась... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 236 22 июля, 2020 Опубликовано 22 июля, 2020 · Жалоба 7 часов назад, mantech сказал: В IMX6 тоже проверял работу L2 при включении получал ускорение 5%, но она там 512килобайт, а моя прога 510 была, может поэтому был прирост, т.к. она вся в кэше помещалась... Не про IMX6 конечно, но недавно в своём проекте на STM32F429 заметил, что у меня кеш (и данных и кода) выключен. Включил. Загрузка CPU снизилась с ~75%, до ~42%. Не думал, что будет так существенно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 49 22 июля, 2020 Опубликовано 22 июля, 2020 · Жалоба 31 минуту назад, jcxz сказал: своём проекте на STM32F429 заметил, что у меня кеш (и данных и кода) выключен. Включил. Так то кэш 1го уровня. Если я на своем проце его выключу, то по ощущениям он превращается в АВРку Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 23 июля, 2020 Опубликовано 23 июля, 2020 (изменено) · Жалоба 12 hours ago, mantech said: Если я на своем проце его выключу, то по ощущениям он превращается в АВРку Ну скажем так, не на AVR'ку, а на вшивый нордик (Cortex-M с 64 МГц). А я так и не дождался "видимых результатов", когда запускал A13 и V3s без кешей (с внешней памяти). Возможно, просто не хватило терпения 21 hours ago, mantech said: В IMX6 тоже проверял работу L2 при включении получал ускорение 5% На C6745 кеш L2 (второго уровня) давал ощутимый прирост. Без него часть эмуляторов местами подтормаживала. При этом из 256K было выделено на кеш L2 всего 64К (остальная память была отдана экранному буферу). Кеши L1P, L1D включены естественно (их если что, тоже можно дробить - давать на кеш только часть памяти, остальные - на свои нужды). Изменено 23 июля, 2020 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 236 23 июля, 2020 Опубликовано 23 июля, 2020 · Жалоба 3 часа назад, __inline__ сказал: На C6745 кеш L2 (второго уровня) давал ощутимый прирост. На OMAP-L137 я L2-RAM использовал как ОЗУ (быстрый код + быстрые данные), а не как кеш. Так получалось эффективнее. Потому как если пробовал переносить в SDRAM те данные и код, что были в L2-RAM и включать L2 на полную как кеш, то результат получался хуже. Хотя и не сильно. В моём проекте L1P + L1D вполне хватало для кеширования SDRAM (в которой находился только медленный код). 3 часа назад, __inline__ сказал: Без него часть эмуляторов местами подтормаживала. А где же у Вас был быстрый код? Неужто весь в SDRAM? Поместить его в L2-RAM не пробовали? В C6745 был L3? Или оно только в OMAP-е? не помню уж... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться