Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Flash vs SRAM

Вт дек 26, 2017 18:16:12

Доброго времени суток друзья.
Предлагаю пофилософствовать по поводу скорости выполнения кода из флеш и озу.

В этом топике, опытным путем я опровергнул свои рассуждения от том, что код в STM32 выполняется быстрее из флеш, чем из ОЗУ.

Тов. Reflector, провел свой эксперимент и он считает что код выполнится быстрее из флеш.

Я попробовал повторить эксперимент Reflectorа. Но слегка изменил его код.
Код:
   volatile uint64_t a = -1;
    while(1)
    { 
       GPIOA->ODR^=1;//Инвертируем выход A0   
       a /= 7;
       a=-1;
    }
Частоту так же смотрел осциллом на порте, переменную а каждый раз переинициализировал, чтобы частота на выходе не скакала.

Тут уже и у меня из флеш стал код быстрее выполнятся.

Из флеш частота на порте 133кГц.
Изображение

Из ОЗУ 126кГц, т.е. чуток медленнее.
Изображение

В обоих случаях у меня МК stm32f103, оптимизация выключена.

На данный момент я делаю следующий вывод. Технически код выполняется из ОЗУ все же быстрее чем из флеш. Но если исполняемые команды активно оперируют данными из ОЗУ, то системная шина перегружается, что приводит к задержкам выборок инструкций. И можно сделать вывод (или предположить) что один код может выполняться быстрее во флеш, а другой в ОЗУ.

Кто что думает?
Вложения
ОЗУ.jpg
(53.67 KiB) Скачиваний: 1801
из флеш.gif
(53.07 KiB) Скачиваний: 1463

Re: Flash vs SRAM

Вт дек 26, 2017 19:16:52

Еще одна проверка, на этот раз замерял скорость вывода строки текста(~150 символов)на LCD экран. Для F103 получил 1'845'419 / 1'892'254, для F429 - 444'147 / 651'920 тактов, все в пользу флеша.

Re: Flash vs SRAM

Вт дек 26, 2017 19:21:36

а что философствовать берем 2 штта и смотрим время доступа к конкретной ячейке даных там и там...
зря штоли в мобиле делают совмещеные RAM+Flashв обшем корпусе-много ног и места на плате экономим при паралелном доступе...про последователный говорить смысла нет это чисто внешний фэйс- для ввода выврода инфэрно

Re: Flash vs SRAM

Вт дек 26, 2017 19:24:33

musor писал(а):а что философствовать берем
А не так все просто. Я ж говорю, один код у меня выполняется быстрее в ОЗУ, другой во флеш.

Добавлено after 1 minute 20 seconds:
Кроме того есть акселераторы и буфер предвыборки (забыл как он там правильно называется).

Re: Flash vs SRAM

Вт дек 26, 2017 20:01:15

Ага, для F103 у меня тайминги для экрана ненормально большие стояли, видимо тестил и не поменял. Теперь стало 559'919 / 796'601, т.е. разница уже существенная и сравнима с F4.

Добавлено after 36 minutes 13 seconds:
В обоих случаях у меня МК stm32f103, оптимизация выключена.

А смысл выключать оптимизацию при проверке скорости? Я прогнал несколько тестов без оптимизации и действительно получил обратные результаты, в частности модификация твоего теста из RAM работала на ~1/5 быстрее, но с оптимизацией уже на 1/4 медленнее...

Re: Flash vs SRAM

Вт дек 26, 2017 20:04:03

А какая разница включена она или нет? Лишь бы код был один и тот же и в ОЗУ и во Флеш.

Re: Flash vs SRAM

Вт дек 26, 2017 20:23:10

А какая разница включена она или нет?

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

Re: Flash vs SRAM

Вт дек 26, 2017 20:31:53

Если обсуждать конкретную задачу то да. Если обсуждать возможности МК в целом, то без разницы. Тут может даже нужно ближе к ассемблеру быть, что бы видеть что МК делает.

Re: Flash vs SRAM

Вт дек 26, 2017 21:05:45

Я, конечно, в ARM-ах понимаю меньше, чем свинья в апельсинах, но всеж-таки своим мнением поделюсь... Чисто умозрительно: RAM разделяется между различными периферийными устройствами, да хоть тем же DMA, и поэтому шина доступа к ней должна как-то арбитрироваться... flash, как я понимаю, использует только CPU для считывания опкодов, и поэтому арбитраж не требуется... Следовательно, априори из RAM будет медленнее исполняться... особенно при активном использовании периферийных устройств, работающих с RAM в обход CPU.

Глупость сморозил?

Re: Flash vs SRAM

Вт дек 26, 2017 21:33:04

Да вроде нет, логично.. Я тоже так считал, пока не получил обратное. Теперь имею два разных результата. Все же наверняка практически во всех случаях полезного варианта кода выполнение кода из флеш будет быстрее , хотя Аrm Arm'у рознь с их клубком шин.

Добавлено after 17 minutes 7 seconds:
flash, как я понимаю, использует только CPU
Сложнее там все. Физически гавардская архетиктура, логически неймоновская. Данные можно перегонять хоть куда, выполнять код тоже. Поди еще из перефирии можно :), но скорее всего произойдёт исключение. Я тоже очень далек от просветления дзен по арм. Но я к тому что специальная шина для выборки инструкций может быть задействована и под другое. Данные во Флеше тоже лежат, пишутся туда конечно редко

Re: Flash vs SRAM

Вт дек 26, 2017 21:51:08

Зачем uint64_t используете? Скриншоты ассемблера прикладывайте для оценки.

Re: Flash vs SRAM

Вт дек 26, 2017 21:58:41

Зачем uint64_t используете?

Нужно было на чем-то потестить, а одна простая операция 64-х битного деления трансформируется в достаточно тяжелый код, даже при наличии аппаратной поддержки.

Re: Flash vs SRAM

Вт дек 26, 2017 22:13:53

Это понятно, просто придется тогда разговаривать о 64 битной арифметике на 32 битной архитектуре.
Интересно посмотреть листинги что получается.

Re: Flash vs SRAM

Вт дек 26, 2017 22:48:47

Странно, что до сих пор никто не упомянул, что в STM32 есть опция подключения SRAM к более быстрым шинам Ibus и Dbus (так называемый ремаппинг, вместо адресов на 0х20000000 будут адреса на 0х00000000), а еще есть CCMRAM (адреса на 0х10000000)
Скорость выполнения в порядке возрастания:
1. Из RAM
2. Из RAM с ремаппингом (примерно также, как и Flash, плюс-минус такт)
3. Из Flash
4. Из CCMRAM (но эта опция есть только в STM32F3хх и STM32F7xx)

Re: Flash vs SRAM

Вт дек 26, 2017 23:20:36

У кортексов память фиксированная. А медленные шины это какие?

Re: Flash vs SRAM

Вт дек 26, 2017 23:53:51

У кортексов память фиксированная. А медленные шины это какие?

Медленная шина - это Sbus, к ней подключена периферия и по-умолчанию подключена SRAM (и только к ней).
В стмках есть регистр SYSCFG->MEMRMP, с помощью которого можно "повесить" SRAM на шины Ibus и Dbus. Обращение к ней будет идти в таком случае по адресам на 0х00000000. Но физически память конечно останется там же, где и была, и по адресам на 0х20000000 к ней тоже можно будет обращаться (например, для DMA)
ИзображениеИзображение

Re: Flash vs SRAM

Ср дек 27, 2017 00:27:25

Это Cortex M4 процессор. В Cortex M3 этого контроллера конфигурации нет. Я с M4 пока не работал.

Да все верно, там можно подключать внешнюю и внутреннюю память на шину данных. Плюс физическое подключение, например загрузка из внешней памяти (выбор типа памяти доступной по адресу 0x0000 0000)

Re: Flash vs SRAM

Ср дек 27, 2017 00:47:30

Это Cortex M4 процессор. В Cortex M3 этого контроллера конфигурации нет. Я с M4 пока не работал.

Если не знаете точно, зачем спорить на пустом месте? В некоторых контроллерах на Cortex-M3 такая опция есть. И вообще, это фича конкретно STM32, а не Cortexов в целом.
Пожалуйста, вот на Cortex-M3 вам пример:
Изображение
И вот тут http://we.easyelectronics.ru/STM32/vypo ... v-iar.html например, есть про сравнение скоростей. Как раз на Cortex-M3.

Re: Flash vs SRAM

Ср дек 27, 2017 00:54:24

Если не знаете точно, зачем спорить на пустом месте? В некоторых контроллерах на Cortex-M3 такая опция есть. И вообще, это фича конкретно STM32, а не Cortexов в целом.
Пожалуйста, вот на Cortex-M3 вам пример:



Где я спорил? Не знаю точно что именно? В CorteX M3 контроллера конфигурации нет, это я точно знаю. Откройте мануал и покажите мне.
Пример чего приведен на картинке?
Последний раз редактировалось Oxford Ср дек 27, 2017 01:01:52, всего редактировалось 1 раз.

Re: Flash vs SRAM

Ср дек 27, 2017 01:01:02

В CorteX M3 контроллера конфигурации нет. Откройте мануал и покажите мне.

Не во всех
http://www.st.com/content/ccc/resource/ ... 240193.pdf страница 219
Ответить