Перейти к содержанию
    

DMA в Allwinner V3s - всё так плохо, или я не понял?

1 минуту назад, __inline__ сказал:

Он помогает конвееризировать бурсты?

Дак он именно для этого и сделан...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 minutes ago, mantech said:

Дак он именно для этого и сделан...

 

Ещё битовое поле TEX=1 в приемнике.  Но об этом почему-то не пишут. Экспериментально обнаружил ускорение используя это поле.

 

На ПК тоже были недокументированные вещи - типа MSR-регистров, включающие кеширование видеопамяти. В итоге CPU писал в 2,5 раза быстрее, чем при дефолтных настройках BIOS'а после загрузки :)

Изменено пользователем repstosw

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 минуту назад, __inline__ сказал:

Ещё битовое поле TEX=1 в приемнике.

Да про эти вещи тоже толковой документации нет, на сайте АРМ надо быть профессором по этой тематике, чтоб что-то понять...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 minutes ago, mantech said:

Да про эти вещи тоже толковой документации нет, на сайте АРМ надо быть профессором по этой тематике, чтоб что-то понять...

 

Я тоже из референса ничего там не понял )))

 

Вот, подтверждают, что регион должен быть с выключенным кешем(приемник) для NEON-memcpy:

https://stackoverrun.com/ru/q/9617352

 

иначе с включенным битом кеша для региона приемника скорость просядет (писал об этом выше, замерял таймером с 6 МГц-разрешением)

Изменено пользователем repstosw

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 минуты назад, __inline__ сказал:

иначе с включенным битом кеша для региона приемника скорость просядет

Дак с кэшированным регионом и обычное копирование быстро идет... Единственная проблема - эти выравнивания, для произвольной области это ад...

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 minutes ago, mantech said:

Дак с кэшированным регионом и обычное копирование быстро идет...

 

:) я про то, что кеширование региона для приёмника наоборот надо ОТключить :)

 

Ещё один плюс - делать clean/flush data cache при этом не нужно :)

Изменено пользователем repstosw

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 минуты назад, __inline__ сказал:

кеширование региона для приёмника наоборот надо ОТключить

А для источника разве не надо?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 minutes ago, mantech said:

А для источника разве не надо?

 

А для источника кеширование надо включать. Потому что у меня это задний буфер, и я из него читаю ещё... Если отключить кеширование в источнике, общая скорость проседает.  И TEX для источника должен быть =0.  Иначе мусор пойдёт.  Объяснить не могу почему, так как не профессор в АРМ-ах :)  Установил экспериментально

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 минуты назад, __inline__ сказал:

И TEX для источника должен быть =0.  Иначе мусор пойдёт.  Объяснить не могу почему, так как не профессор в АРМ-ах :) 

Я тоже, надо будет поэкспериментировать...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 - зарезервирована, а по факту - одна из быстрых при копировании.

 

x.thumb.jpg.83d47abcf64dca44feea5d3204cd7efd.jpg

 

 

Мало того, документ умалчивает об 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.

Тут надо быть профессором кислых щей, чтобы разобраться как оно влияет на производительность. :umnik2:

Изменено пользователем repstosw

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 часов назад, __inline__ сказал:

Дополнительно пытался использовать L2 кеш,

В IMX6 тоже проверял работу L2 при включении получал ускорение 5%, но она там 512килобайт, а моя прога 510 была, может поэтому был прирост, т.к. она вся в кэше помещалась...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 часов назад, mantech сказал:

В IMX6 тоже проверял работу L2 при включении получал ускорение 5%, но она там 512килобайт, а моя прога 510 была, может поэтому был прирост, т.к. она вся в кэше помещалась...

Не про IMX6 конечно, но недавно в своём проекте на STM32F429 заметил, что у меня кеш (и данных и кода) выключен. Включил. Загрузка CPU снизилась с ~75%, до ~42%. Не думал, что будет так существенно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

31 минуту назад, jcxz сказал:

своём проекте на STM32F429 заметил, что у меня кеш (и данных и кода) выключен. Включил.

Так то кэш 1го уровня. Если я на своем проце его выключу, то по ощущениям он превращается в АВРку :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 hours ago, mantech said:

Если я на своем проце его выключу, то по ощущениям он превращается в АВРку :biggrin:

 

Ну скажем так, не на AVR'ку, а на вшивый нордик (Cortex-M с 64 МГц).

А я так и не дождался "видимых результатов", когда запускал A13 и V3s без кешей (с внешней памяти). Возможно, просто не хватило терпения  :lazy:

 

21 hours ago, mantech said:

В IMX6 тоже проверял работу L2 при включении получал ускорение 5%

 

На C6745 кеш L2 (второго уровня) давал ощутимый прирост. Без него часть эмуляторов местами подтормаживала. При этом из 256K было выделено на кеш L2 всего 64К (остальная память была отдана экранному буферу).  Кеши L1P, L1D включены естественно (их если что, тоже можно дробить - давать на кеш только часть памяти, остальные - на свои нужды).

Изменено пользователем repstosw

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, __inline__ сказал:

На C6745 кеш L2 (второго уровня) давал ощутимый прирост.

На OMAP-L137 я L2-RAM использовал как ОЗУ (быстрый код + быстрые данные), а не как кеш. Так получалось эффективнее. Потому как если пробовал переносить в SDRAM те данные и код, что были в L2-RAM и включать L2 на полную как кеш, то результат получался хуже. Хотя и не сильно. В моём проекте L1P + L1D вполне хватало для кеширования SDRAM (в которой находился только медленный код).

3 часа назад, __inline__ сказал:

Без него часть эмуляторов местами подтормаживала.

А где же у Вас был быстрый код? Неужто весь в SDRAM? Поместить его в L2-RAM не пробовали?

В C6745 был L3? Или оно только в OMAP-е? не помню уж... :unknw:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...