Flash vs SRAM
- Oxford
- Опытный кот
- Сообщения: 819
- Зарегистрирован: Вт окт 23, 2012 13:17:25
- Откуда: Прокопьевск
- Контактная информация:
Re: Flash vs SRAM
[uquote="AlphaLaiman",url="/forum/viewtopic.php?p=3269706#p3269706"][uquote="Oxford",url="/forum/viewtopic.php?p=3269704#p3269704"]В CorteX M3 контроллера конфигурации нет. Откройте мануал и покажите мне.[/uquote]
Не во всех
http://www.st.com/content/ccc/resource/ ... 240193.pdf страница 219[/uquote]
Ну да ядро тут не при чем, это от реализации STM32 зависит. В более поздних видать добавили.
В STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and
STM32F107xx референсе ее нету.
По ссылке на ресурс easyelectronics там использовался STM32L152RBT6 в котором есть.
Дело в том что топикстартер тестировал F103, соответственно ремапа у него нет. Вы этого не знали. Покапавшись узнали что не во всех есть он (зависит от реализации периферии у вендора).
Не во всех
http://www.st.com/content/ccc/resource/ ... 240193.pdf страница 219[/uquote]
Ну да ядро тут не при чем, это от реализации STM32 зависит. В более поздних видать добавили.
В STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and
STM32F107xx референсе ее нету.
По ссылке на ресурс easyelectronics там использовался STM32L152RBT6 в котором есть.
Дело в том что топикстартер тестировал F103, соответственно ремапа у него нет. Вы этого не знали. Покапавшись узнали что не во всех есть он (зависит от реализации периферии у вендора).
Последний раз редактировалось Oxford Ср дек 27, 2017 06:27:59, всего редактировалось 1 раз.
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- Реклама
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Flash vs SRAM
Однако, как я уже несколько раз говорил, мною на разных кодах были получены разные результаты. На одном форуме видел утверждение, что код из CCMRAM не выполняется на одних камнях, только как хранилище, а на других уже можно. Сам не знаю.AlphaLaiman писал(а):Скорость выполнения в порядке возрастания:
1. Из RAM
2. Из RAM с ремаппингом (примерно также, как и Flash, плюс-минус такт)
3. Из Flash
4. Из CCMRAM (но эта опция есть только в STM32F3хх и STM32F7xx)
Сейчас народ рассосется и в рабочее время тихонько попробую еще один тестик. Посмотрим совпадут ли мои ожидания с результатом...
У меня еще есть 030, можно еще и его попробовать будет, я его даже не распаковывал. Тут cortex-m0, шины проще. Согласно пикче у ядра нет отдельной шины ICode. Все идет через системную шину. Может вечером попробую, ожидаю на нем самый быстрый код из ОЗУ.Oxford писал(а):Дело в том что топикстартер тестировал F103
- Oxford
- Опытный кот
- Сообщения: 819
- Зарегистрирован: Вт окт 23, 2012 13:17:25
- Откуда: Прокопьевск
- Контактная информация:
Re: Flash vs SRAM
Да у Cortex M0 одна системная шина.
single 32-bit AMBA-3 AHB-Lite system interface that provides simple
integration to all system peripherals and memory
Касаемо Cortex M3 4 шины.
Информация по кортексам извлекается из документов на архитектуры от ARM.
По реализации периферии смотрите у вендора на конкретный МК.
single 32-bit AMBA-3 AHB-Lite system interface that provides simple
integration to all system peripherals and memory
Касаемо Cortex M3 4 шины.
Информация по кортексам извлекается из документов на архитектуры от ARM.
По реализации периферии смотрите у вендора на конкретный МК.
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Re: Flash vs SRAM
[uquote="Z_h_e",url="/forum/viewtopic.php?p=3269760#p3269760"]На одном форуме видел утверждение, что код из CCMRAM не выполняется на одних камнях, только как хранилище, а на других уже можно.[/uquote]
Я проверял на F3, там из CCM выполняется так же быстро, как из флеша при нулевых тактах ожидания, только флеш с 0WS сильно не разгонишь... А на F4 у меня стек в CCM, это тоже дает заметное увеличение производительности.
Я проверял на F3, там из CCM выполняется так же быстро, как из флеша при нулевых тактах ожидания, только флеш с 0WS сильно не разгонишь... А на F4 у меня стек в CCM, это тоже дает заметное увеличение производительности.
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Flash vs SRAM
В рабочее время не удалось, сделал в обед.
МК f103
Контроль скорости так же по частоте на порте.
Массив на 256 32битных элементов, инициализирован некими числами.
Зацикленная функция.
Оптимизация включена.
Четыре варианта теста. Массив в ОЗУ и во Флеш. Функция в ОЗУ и во Флеш.
Первая половина теста. Массив в ОЗУ.
Частота порта
foo из флеша 12.788 кГц
foo из ОЗУ 11.710 кГц
Собственно - это повторение вчерашнего результата.
Теперь массив во Флеш.
foo из флеша 10.050 кГц
foo из ОЗУ 10.050 кГц
Хотя я ожидал не совсем такого результата. Ожидал что скорость понизится во флеш, а что понизится и в ОЗУ не ожидал. Да еще и скорость стала одинаковая.
----------------
Сейчас кое-что дотестирую и допишу еще одним постом. Тоже на мой взгляд интересная вещь.
МК f103
Контроль скорости так же по частоте на порте.
Массив на 256 32битных элементов, инициализирован некими числами.
Зацикленная функция.
Спойлер
Код: Выделить всё
void foo(void)
{
volatile uint32_t a = -1;
while(1)
{
GPIOA->ODR^=1;//Инвертируем выход A0
uint8_t i=255;
uint32_t buf=0;
while(i--)
{
buf+=Mass[i];
}
a=buf;
}
};Четыре варианта теста. Массив в ОЗУ и во Флеш. Функция в ОЗУ и во Флеш.
Первая половина теста. Массив в ОЗУ.
Частота порта
foo из флеша 12.788 кГц
foo из ОЗУ 11.710 кГц
Собственно - это повторение вчерашнего результата.
Теперь массив во Флеш.
foo из флеша 10.050 кГц
foo из ОЗУ 10.050 кГц
Хотя я ожидал не совсем такого результата. Ожидал что скорость понизится во флеш, а что понизится и в ОЗУ не ожидал. Да еще и скорость стала одинаковая.
----------------
Сейчас кое-что дотестирую и допишу еще одним постом. Тоже на мой взгляд интересная вещь.
- Реклама
Re: Flash vs SRAM
Reflector, а к чему эти гонки ?
Вновь софтовый ногодрыг покоя не дает?
Вновь софтовый ногодрыг покоя не дает?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18561
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Flash vs SRAM
Вы еще этот массив при помощи DMA выводите куда-нибудь в порт, вот тогда и станет понятно, кто виноват и что делать.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Flash vs SRAM
В функции foo была объявлена локальная переменная а, хотя и как volatile.
Убрал и объявил глобально. И все перевернулось. Теперь ОЗУ нагибает флеш. Да еще как и во всех случаях расположения массива.
Первая половина теста. Массив в ОЗУ.
Частота порта
foo из флеша 12.723 кГц
foo из ОЗУ 14.025 кГц
Теперь массив во Флеш.
foo из флеша 7.418 кГц
foo из ОЗУ 11.710 кГц
Так что, мутно тут усё
и однозначно что-то утверждать нельзя видимо.
Добавлено after 9 minutes 2 seconds:
. Каналов DMA не один, модулей DMA тоже может быть не один. У них свои приоритеты переназначаемые, и еще будут драться за шину(ы) между собой и ядром. Полнейший арбитраж одним словом.
Кстати, как я понял, память CCM избавлена от домогательств со стороны DMA. Тут может быть свой минус.
Убрал и объявил глобально. И все перевернулось. Теперь ОЗУ нагибает флеш. Да еще как и во всех случаях расположения массива.
Первая половина теста. Массив в ОЗУ.
Частота порта
foo из флеша 12.723 кГц
foo из ОЗУ 14.025 кГц
Теперь массив во Флеш.
foo из флеша 7.418 кГц
foo из ОЗУ 11.710 кГц
Так что, мутно тут усё
Добавлено after 9 minutes 2 seconds:
Понятно что эти не те камни, на которых можно считать количество команд, чтобы точно дернуть ногой. Однако в этих изысканиях может быть и практическое значение. Существуют же математические очень затратные операции и почему бы не поразмышлять как можно их ускорить?dosikus писал(а):а к чему эти гонки ?
Думаю будет только еще не понятнее.ARV писал(а):Вы еще этот массив при помощи DMA выводите куда-нибудь в порт, вот тогда и станет понятно, кто виноват и что делать.
Кстати, как я понял, память CCM избавлена от домогательств со стороны DMA. Тут может быть свой минус.
Re: Flash vs SRAM
Z_h_e, F103 на какой частоте работает?
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Flash vs SRAM
72
Думаете имеет значение? Хотя если понизить может уменьшится простой из флеша и относительаня картина поменяется.
Думаете имеет значение? Хотя если понизить может уменьшится простой из флеша и относительаня картина поменяется.
Re: Flash vs SRAM
[uquote="Z_h_e",url="/forum/viewtopic.php?p=3269924#p3269924"]72
Думаете имеет значение?[/uquote]
Нет, просто для 72MHz достаточно 1WS и тогда твой пример из флеша у меня выполняется чуть быстрее, а при 2WS уже заметно медленнее. Но это F1, у F2 уже есть ART, а L1 относительно медленные и 2WS для них бесполезны. И пример достаточно специфичный, в цикле складываются данные и все, а я проверял на реальных приложениях и там всегда флеш был быстрее...
Думаете имеет значение?[/uquote]
Нет, просто для 72MHz достаточно 1WS и тогда твой пример из флеша у меня выполняется чуть быстрее, а при 2WS уже заметно медленнее. Но это F1, у F2 уже есть ART, а L1 относительно медленные и 2WS для них бесполезны. И пример достаточно специфичный, в цикле складываются данные и все, а я проверял на реальных приложениях и там всегда флеш был быстрее...
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Flash vs SRAM
Что это?Reflector писал(а):1WS
специфичный он или нет, не столь важно. Сам факт, что скорость выполнения там или там оказывается вещь не очень определенная. При том что, самый первый раз я сравнивал дизассеблерный код и он был идентичный для обоих расположений кода. В других разах тоже стоило так сделать конечно, но крайне лень.Reflector писал(а):И пример достаточно специфичный, в цикле складываются данные и все, а я проверял на реальных приложениях и там всегда флеш был быстрее...
Re: Flash vs SRAM
[uquote="Z_h_e",url="/forum/viewtopic.php?p=3269984#p3269984"]Что это?[/uquote]
Флеш медленный, на больших частотах приходится вводить такты ожидания. Хотя для 72MHz рекомендуется 2 такта, но реально с двумя уже можно мк и на 144 запустить
В общем ищи в доках FLASH->ACR, там LATENCY.
Флеш медленный, на больших частотах приходится вводить такты ожидания. Хотя для 72MHz рекомендуется 2 такта, но реально с двумя уже можно мк и на 144 запустить
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Flash vs SRAM
Залез в startup, да, устанавливается 2ws, согласно PM. Можно и тут поиграться конечно. Выключить буфер предвыборки и поглядеть что он дает в цифрах. Или устанвить 1ws. Да и разгон с одной стороны хорошо, но все же плохо
.
Еще какой доступ за пол такта есть ко флеш HLFCYA: Flash half cycle access enable.
Еще какой доступ за пол такта есть ко флеш HLFCYA: Flash half cycle access enable.
- Oxford
- Опытный кот
- Сообщения: 819
- Зарегистрирован: Вт окт 23, 2012 13:17:25
- Откуда: Прокопьевск
- Контактная информация:
Re: Flash vs SRAM
Попробуй обьявить так че по скорости будет?
register uint32_t a __asm("r12");
a = -1;
register uint32_t a __asm("r12");
a = -1;
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Flash vs SRAM
Oxford писал(а):Попробуй обьявить
Переменная а в принципе не использовалась. Смысл исполнения кода из флеш и хранения массива во флеш был как можно больше занять шину ICode, но не занимать остальные системные шины. И затем сравнить исполнение кода из озу, при том же массиве констант во флеше.
Для этого в foo была введена переменная buf не волатайл (чтобы не занимала системную шину), наверняка она была регистром, а чтобы оптимизатор не выкинул вычисления, результат сохранялся в переменную а. Но по всей видимости он ее все равно выкинул каким-то образом. Переменная а была объявлена только в области видимости функции, переменная а нигде не использовалась (варнинг был об этом). Однозначно, а нигде не могла использоваться(что четко видно компилятору) и видимо это дало повод компилятору все оптимизировать не смотря на то, что она волатайл. Т.е. первый эксперимент с foo, был неудачный, т.е. не вышло то что я хотел.
Объявив же a глобально, код заработал именно так, как и был написан. Т.е. уже понадобились данные из флеш, что и сильно понизило скорость выполнения кода из флеш.
Я думаю, что определение а в регистр эффекта не должно дать. Наверное сейчас попробую.
- Oxford
- Опытный кот
- Сообщения: 819
- Зарегистрирован: Вт окт 23, 2012 13:17:25
- Откуда: Прокопьевск
- Контактная информация:
Re: Flash vs SRAM
Дизассемблер листинг прикладывай увидим тогда что там было, иначе вангование на кофейной гуще.
Ну смотри сам я просто увидел код с твоей переменной подумал что если...измениться что нет
Можешь по шагам пройтись в отладке и посмотреть где лежит переменная в ОЗУ или регистре.
Ну смотри сам я просто увидел код с твоей переменной подумал что если...измениться что нет
Можешь по шагам пройтись в отладке и посмотреть где лежит переменная в ОЗУ или регистре.
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Flash vs SRAM
foo при volatile uint32_t a ;
при volatile register uint32_t a __asm("r12");
Коды практически идентичны. Но частота все-таки поднялась. С 7,418кГц до 10,050кГц.
Сейчас попробую код с переменной в регистре из ОЗУ запустить.
Добавлено after 4 minutes 37 seconds:
Код из ОЗУ при volatile register uint32_t a __asm("r12");
Частота 10,050
Добавлено after 5 minutes 59 seconds:
А теперь код из ОЗУ, но переменная обратно volatile uint32_t a ;
Частота 11.7кГц. Я такой уже тест делал, повторил еще раз.
Т.е. быстрее, чем с переменной в регистре (из флеш логично), но и быстрее чем в том же ОЗУ.
-----------------------------
Очень-очень все мутно со скоростью выполнения.
Добавлено after 16 minutes 40 seconds:
Запустил код "флеш - флеш", т.е. когда частота 7кГц, но с 1ws, замолотил с более чем 12кГц. С 0WS зависло.
Однако вендер почему-то указал что должен быть 2WS, не просто же так, чтобы замедлить МК.
Спойлер
Код: Выделить всё
foo:
080006c9: push {r4, r5}
080006cb: ldr r0, [pc, #36] ; (0x80006f0 <foo+40>)
080006cd: ldr r5, [pc, #36] ; (0x80006f4 <foo+44>)
57 GPIOA->ODR^=1;//Инвертируем выход A0
080006ce: ldr r4, [pc, #40] ; (0x80006f8 <foo+48>)
080006d0: ldr r2, [r4, #12]
62 while(i--)
080006d2: movs r3, #254 ; 0xfe
57 GPIOA->ODR^=1;//Инвертируем выход A0
080006d4: eor.w r2, r2, #1
080006d8: str r2, [r4, #12]
60 uint32_t buf=0;
080006da: movs r2, #0
64 buf+=Mass[i];
080006dc: ldr.w r1, [r0, r3, lsl #2]
62 while(i--)
080006e0: subs r3, #1
080006e2: uxtb r3, r3
080006e4: cmp r3, #255 ; 0xff
64 buf+=Mass[i];
080006e6: add r2, r1
62 while(i--)
080006e8: bne.n 0x80006dc <foo+20>
66 a=buf;
080006ea: str r2, [r5, #0]
67 }
080006ec: b.n 0x80006d0 <foo+8>Спойлер
foo:
080006c9: push {r4}
080006cb: ldr r0, [pc, #32] ; (0x80006ec <foo+36>)
080006cd: ldr r4, [pc, #32] ; (0x80006f0 <foo+40>)
080006cf: ldr r2, [r4, #12]
080006d1: movs r3, #254 ; 0xfe
080006d3: eor.w r2, r2, #1
080006d7: str r2, [r4, #12]
080006d9: movs r2, #0
080006db: ldr.w r1, [r0, r3, lsl #2]
080006df: subs r3, #1
080006e1: uxtb r3, r3
080006e3: cmp r3, #255 ; 0xff
080006e5: add r2, r1
080006e7: bne.n 0x80006da <foo+18>
080006e9: mov r12, r2
080006eb: b.n 0x80006ce <foo+6>
Сейчас попробую код с переменной в регистре из ОЗУ запустить.
Добавлено after 4 minutes 37 seconds:
Код из ОЗУ при volatile register uint32_t a __asm("r12");
Частота 10,050
Спойлер
foo:
20000000: push {r4}
20000002: ldr r0, [pc, #32] ; (0x20000024 <foo+36>)
20000004: ldr r4, [pc, #32] ; (0x20000028 <foo+40>)
20000006: ldr r2, [r4, #12]
20000008: movs r3, #254 ; 0xfe
2000000a: eor.w r2, r2, #1
2000000e: str r2, [r4, #12]
20000010: movs r2, #0
20000012: ldr.w r1, [r0, r3, lsl #2]
20000016: subs r3, #1
20000018: uxtb r3, r3
2000001a: cmp r3, #255 ; 0xff
2000001c: add r2, r1
2000001e: bne.n 0x20000012 <foo+18>
20000020: mov r12, r2
20000022: b.n 0x20000006 <foo+6>
Добавлено after 5 minutes 59 seconds:
А теперь код из ОЗУ, но переменная обратно volatile uint32_t a ;
Спойлер
foo:
20000000: push {r4, r5}
20000002: ldr r0, [pc, #36] ; (0x20000028 <foo+40>)
20000004: ldr r5, [pc, #36] ; (0x2000002c <foo+44>)
20000006: ldr r4, [pc, #40] ; (0x20000030 <foo+48>)
20000008: ldr r2, [r4, #12]
2000000a: movs r3, #254 ; 0xfe
2000000c: eor.w r2, r2, #1
20000010: str r2, [r4, #12]
20000012: movs r2, #0
20000014: ldr.w r1, [r0, r3, lsl #2]
20000018: subs r3, #1
2000001a: uxtb r3, r3
2000001c: cmp r3, #255 ; 0xff
2000001e: add r2, r1
20000020: bne.n 0x20000014 <foo+20>
20000022: str r2, [r5, #0]
20000024: b.n 0x20000008 <foo+8>
Т.е. быстрее, чем с переменной в регистре (из флеш логично), но и быстрее чем в том же ОЗУ.
-----------------------------
Очень-очень все мутно со скоростью выполнения.
Добавлено after 16 minutes 40 seconds:
Запустил код "флеш - флеш", т.е. когда частота 7кГц, но с 1ws, замолотил с более чем 12кГц. С 0WS зависло.
Однако вендер почему-то указал что должен быть 2WS, не просто же так, чтобы замедлить МК.
- Oxford
- Опытный кот
- Сообщения: 819
- Зарегистрирован: Вт окт 23, 2012 13:17:25
- Откуда: Прокопьевск
- Контактная информация:
Re: Flash vs SRAM
Оптимизация какая включена?
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Flash vs SRAM
О2
Добавлено after 43 seconds:
Но основной смысл топика не как ускорить код, а где он быстрее работает.
Добавлено after 43 seconds:
Но основной смысл топика не как ускорить код, а где он быстрее работает.



