Flash vs SRAM
- Oxford
- Опытный кот
- Сообщения: 819
- Зарегистрирован: Вт окт 23, 2012 13:17:25
- Откуда: Прокопьевск
- Контактная информация:
Re: Flash vs SRAM
Отключи пока оптимизацию. -O0 и повтори тесты и результаты с листингами покаж
Непомню, KEIL используешь, версия? Какой компилятор выбран.
Непомню, KEIL используешь, версия? Какой компилятор выбран.
Последний раз редактировалось Oxford Чт дек 28, 2017 18:12:36, всего редактировалось 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
- Опытный кот
- Сообщения: 819
- Зарегистрирован: Вт окт 23, 2012 13:17:25
- Откуда: Прокопьевск
- Контактная информация:
Re: Flash vs SRAM
Если KEIL, покажи вкладку настройки C/C++
Инженер 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
Кокос.
Вот это поди интересует:
Но какая разница какая оптимизация для сравнения скорости одного и тоже машинного кода при выполнении из разных типов памяти?
Вот это поди интересует:
Код: Выделить всё
-mcpu=cortex-m3; -mthumb; -Wall; -ffunction-sections; -g; -O2; -DSTM32F103C8; -DSTM32F10X_MD; -DUSE_STDPERIPH_DRIVER; -D__ASSEMBLY__; -I.; - 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
Там скидывать то вроде нечего.
- Вложения
-
- TEST_FLASH_RAM.rar
- (127.48 КБ) 222 скачивания
Re: Flash vs SRAM
Z_h_e , в кокосе чего либо вменяемого добиться трудно.
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Flash vs SRAM
А кокос вроде ничего и не компилирует.
Что тут невменяемого у меня в коде?
Как это связано с выполнением одного и тоже кода в разной памяти?
Что тут невменяемого у меня в коде?
Как это связано с выполнением одного и тоже кода в разной памяти?
- 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
Лучше всего конечно это поправить файл линковщика. Но мне было лень, я не очень с ним на "ты" и надо тихонько скрипеть мозгами.
Делал так.
Атрибуты массива закоментарьте, не сработали. Но мой компилятор массив констант (const) сам определяет во флеш без дополнительного указания. Убрав const - массив перебирается в ОЗУ.
Чтобы зарядить foo в озу в прототип добавлял атрибут __attribute__((section(".data")));.
В коде что я Вам скинул он закоментарен, что означает фу во флеше.
Перед тестом обязательно запускал отладку и проверял кто куда попал на случай "вдруг затупил" и только после этого перезапускал МК и считывал частоту.
Добавлено after 2 minutes 13 seconds:
Компилятор GCC. У Вас может как-то по другому.
Делал так.
Атрибуты массива закоментарьте, не сработали. Но мой компилятор массив констант (const) сам определяет во флеш без дополнительного указания. Убрав const - массив перебирается в ОЗУ.
Чтобы зарядить foo в озу в прототип добавлял атрибут __attribute__((section(".data")));.
В коде что я Вам скинул он закоментарен, что означает фу во флеше.
Перед тестом обязательно запускал отладку и проверял кто куда попал на случай "вдруг затупил" и только после этого перезапускал МК и считывал частоту.
Добавлено after 2 minutes 13 seconds:
Компилятор GCC. У Вас может как-то по другому.
- Oxford
- Опытный кот
- Сообщения: 819
- Зарегистрирован: Вт окт 23, 2012 13:17:25
- Откуда: Прокопьевск
- Контактная информация:
Re: Flash vs SRAM
Попробуйте прошивки потестить, я скомпилировал разные. с приставкой data это с .data. Остальной код как вы скинули. Оптимизация указана в имени файла. Отпишитесь какие частоты выводятся, что-нибудь изменилось нет.
Инженер 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
F103_O0.hex-------------------5,39
F103_O0_data.hex-------------6,36
F103_O1.hex------------------10,05
F103_O2.hex--------------------8,81
F103_O3.hex--------------------8,81
F103_O3_data.hex--------------8,81
кГц. Частоту можно было поточнее измерить, может есть какая-то разница где одинаковые частоты, но повторять не хочу уже. Не существенно это.
F103_O0_data.hex-------------6,36
F103_O1.hex------------------10,05
F103_O2.hex--------------------8,81
F103_O3.hex--------------------8,81
F103_O3_data.hex--------------8,81
кГц. Частоту можно было поточнее измерить, может есть какая-то разница где одинаковые частоты, но повторять не хочу уже. Не существенно это.
- 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
Код и должен разным компилится.
Вывод из всего выше проведенного:
1. Таракан без ног не слышит.
2. Для f103, а может и для остальных STM32, нельзя однозначно утверждать что код будет быстрее выполняться в той или иной памяти.
3. Даже использование сверхоперативной памяти (регистров) не гарантирует ускорения и в некоторых случаях даже замедляет.
4. Для ускорения кода нужно оптимизировать код именно под ту память или пробовать различные комбинации размещения кода и выбрать оптимальное, учитывая частоту тактирования.
5. Возможно это справедливо для МК ARM других производителей.
Повторю свой вывод, по-скольку на текущий момент считаю его ключевым:
нельзя однозначно утверждать что код выполняется быстрее в одной памяти, чем в другой.
Вывод из всего выше проведенного:
1. Таракан без ног не слышит.
2. Для f103, а может и для остальных STM32, нельзя однозначно утверждать что код будет быстрее выполняться в той или иной памяти.
3. Даже использование сверхоперативной памяти (регистров) не гарантирует ускорения и в некоторых случаях даже замедляет.
4. Для ускорения кода нужно оптимизировать код именно под ту память или пробовать различные комбинации размещения кода и выбрать оптимальное, учитывая частоту тактирования.
5. Возможно это справедливо для МК ARM других производителей.
Повторю свой вывод, по-скольку на текущий момент считаю его ключевым:
нельзя однозначно утверждать что код выполняется быстрее в одной памяти, чем в другой.
- Oxford
- Опытный кот
- Сообщения: 819
- Зарегистрирован: Вт окт 23, 2012 13:17:25
- Откуда: Прокопьевск
- Контактная информация:
Re: Flash vs SRAM
Ну память если и влияет то процентов 5 от силы. Все остальное это работа с регистрами периферии, исполнение инструкций, набор команд. Каждая инструкция занимает время, их количество. DMA например не зря есть. Ускоряет намного работу с периферией.
Инженер 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
- Опытный кот
- Сообщения: 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
В этом тесте максимальная частота 14.025 кГц , минимальная 7.418 кГц. Соотношение почти в два раза при выполнении одного и того же кода и обработки массива с одними и теми же данными. При том что самый медленный код - это код из флеш, с массивом констант во флеш (т.е. самое классическое решение).
- Oxford
- Опытный кот
- Сообщения: 819
- Зарегистрирован: Вт окт 23, 2012 13:17:25
- Откуда: Прокопьевск
- Контактная информация:
Re: Flash vs SRAM
Да все во флеш тоже пихать смысла нет, если ОЗУ имеет свободное место, то конечно из ОЗУ быстрее выборка.
Дело в том что ICODE шина подключена к флешу, а DCODE к ОЗУ. Инструкции быстрее идут из флеш, а данные из ОЗУ.
Дело в том что ICODE шина подключена к флешу, а DCODE к ОЗУ. Инструкции быстрее идут из флеш, а данные из ОЗУ.
Последний раз редактировалось Oxford Пт дек 29, 2017 14:54:40, всего редактировалось 2 раза.
Инженер 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=3271444#p3271444"]Код и должен разным компилится.
5. Возможно это справедливо для МК ARM других производителей.
...
нельзя однозначно утверждать что код выполняется быстрее в одной памяти, чем в другой.[/uquote]
Это справедливо для всех МК. И чем сложнее и навороченнее МК (чем больше в нём кешей, типов памяти и сложной матрицы шин работающих на разных частотах и т.п.) и чем сложнее алгоритм работы МК - тем справедливее.
Добавлено after 4 minutes 51 second:
[uquote="Oxford",url="/forum/viewtopic.php?p=3271535#p3271535"]Да все во флеш тоже пихать смысла нет, если ОЗУ имеет свободное место, то конечно из ОЗУ быстрее выборка.[/uquote]
Не факт. А если шина к флешь шириной 256 бит? А если с ОЗУ одновременно работает ещё и несколько DMA-каналов? Всё бывает очень по-разному...
5. Возможно это справедливо для МК ARM других производителей.
...
нельзя однозначно утверждать что код выполняется быстрее в одной памяти, чем в другой.[/uquote]
Это справедливо для всех МК. И чем сложнее и навороченнее МК (чем больше в нём кешей, типов памяти и сложной матрицы шин работающих на разных частотах и т.п.) и чем сложнее алгоритм работы МК - тем справедливее.
Добавлено after 4 minutes 51 second:
[uquote="Oxford",url="/forum/viewtopic.php?p=3271535#p3271535"]Да все во флеш тоже пихать смысла нет, если ОЗУ имеет свободное место, то конечно из ОЗУ быстрее выборка.[/uquote]
Не факт. А если шина к флешь шириной 256 бит? А если с ОЗУ одновременно работает ещё и несколько DMA-каналов? Всё бывает очень по-разному...



