Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F4: разница в скорости обращения при размещении массива в DRAM и в FLASH программ?
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Ruslan1
есть STM32F429. И внешняя SDRAM, подключенная по 16-битной шине.
Нужно часто читать из массива 4-байтные величины (коэффициенты оконной функции). Где лучше разместить этот массив: в SDRAM или во FLASH программ, насколько велика разница?
Всегда ли это однозначно (XX быстрее чем YY), или все-таки нужно считать текущую времянку в соответствии с настройками шин?

Сейчас во флэше и все устраивает, но в будущем хочется просто генерировать массив после включения и класть в SDRAM, мне так удобнее, вот только про быстродействие непонятно.
jcxz
Цитата(Ruslan1 @ Jun 13 2017, 10:11) *
Всегда ли это однозначно (XX быстрее чем YY), или все-таки нужно считать текущую времянку в соответствии с настройками шин?

Зависит от частоты шины к SDRAM, наличия кеша флешь и др.
А в чём проблема просто померить варианты тот и тот? Минутное дело, сюда вопрос дольше писать. wink.gif
Ruslan1
Цитата(jcxz @ Jun 13 2017, 10:15) *
Зависит от частоты шины к SDRAM, наличия кеша флешь и др.
А в чём проблема просто померить варианты тот и тот? Минутное дело, сюда вопрос дольше писать. wink.gif

у меня могозадачка и много чего там крутится, запросто могу промахнуться при разовом тесте и измерить необъективно из-за того что оно что-то начало делать более приоритетное и ресурсоемкое. Думал мне просто скажут- все ежи однозначно бегут вот сюда, все уже разжевано и доказано sm.gif.
Ну и лень, опять же....
jcxz
Цитата(Ruslan1 @ Jun 13 2017, 10:47) *
у меня могозадачка и много чего там крутится,

И запрещать прерывания тоже не умеете??
Ruslan1
Цитата(jcxz @ Jun 13 2017, 13:41) *
И запрещать прерывания тоже не умеете??

Я много чего не умею, чем дольше живу-тем больше всего не умею.

Ладно, понял, спасибо. Раз ответ на мой вопрос не такой однозначный как я думал- буду получать ответ локально.
ViKo
Я представляю, выбрать константу из памяти - далеко не единственная операция с использованием оконной функции. Вот если бы можно задать выбирать эти константы с упреждением, тогда, вообще было бы все равно, откуда. Можно ли?
jcxz
Цитата(Ruslan1 @ Jun 13 2017, 14:07) *
Ладно, понял, спасибо. Раз ответ на мой вопрос не такой однозначный как я думал- буду получать ответ локально.

Вот смотрите - написал для Вас за 4 минуты нужный Вам тест laughing.gif
Код
PUBLIC f1
f1: CPSID I
     MOVS R1, #250
f1_1: LDMIA R0!, {R2-R4,R12}
     LDMIA R0!, {R2-R4,R12}
     LDMIA R0!, {R2-R4,R12}
     LDMIA R0!, {R2-R4,R12}
     SUBS R1, R1, #1
     BNE f1_1
     CPSIE I
     RET

Объявляете его как:
extern "C" void f1(void const *);
Вначале вызываете с адресом в SDRAM, потом - во флешь. Смотрите сколько тактов получилось. Сравниваете.
Код выполняет 4000 32-битных последовательных чтений памяти.
Всё!
Ruslan1
Уважаемы jcxz, спасибо!
попробую.

Но не нужно меня так буквально понимать, если я пишу что много чего не умею- это не значит, что я не знаю как протестировать sm.gif

Хотя, конечно, до уровня ассемблера я не собирался спускаться в данном тесте. sm.gif
Придется, значит, все-таки подключать железяку и смотреть живьем.
Сергей Борщ
У вас же есть 16 К core coupled memory. Быстрее сложно придумать.
Ruslan1
Спасибо всем, кто откликнулся.
Вопрос был неуместный, мне следовало смотреть "ширше", а я в частный буфер уперся.
Когда начал анализировать, что мне собственно нужно с этим делать- получилось, что задача эта будет из самых низкоприоритетных, и общее время выполнения зависит уж совсем не от того, где я этот массив положу.
Профайлинг показал, что общее время вычислений (не только чтение буфера, естественно) скачет от 16 до 69 миллисекунд (зависит от других задач с высокими приоритетами), тут хоть где размещу- разницы не увижу, так как другие задачи могут съесть сильно больше, чем собственно нужная мне обработка.
Но на будущее спасибо, почерпнул кое-что для себя из дискуссии.
jcxz
Цитата(jcxz @ Jun 13 2017, 14:56) *
Вот смотрите - написал для Вас за 4 минуты нужный Вам тест laughing.gif

Там конечно не RET, а BX LR нужен. Запутался совсем с этим STM8 wacko.gif

Цитата(Ruslan1 @ Jun 14 2017, 21:06) *
Профайлинг показал, что общее время вычислений (не только чтение буфера, естественно) скачет от 16 до 69 миллисекунд (зависит от других задач с высокими приоритетами),

Профайлинг у Вас неправильный. Нужно встать на начало измеряемого участка; поставить бряк на его конец; запретить прерывания; нажать кнопку Run в отладчике; когда остановится на бряке, посмотреть содержимое счётчика тактов. Вот и всё. А Вы температуру на Марсе меряете... laughing.gif
Ruslan1
Цитата(jcxz @ Jun 15 2017, 06:20) *
Профайлинг у Вас неправильный. Нужно встать на начало измеряемого участка; поставить бряк на его конец; запретить прерывания; нажать кнопку Run в отладчике; когда остановится на бряке, посмотреть содержимое счётчика тактов. Вот и всё. А Вы температуру на Марсе меряете... laughing.gif


Я про то и говорю, что именно эта "температура на Марсе" мне и нужна будет в реальности, а не тики изолированной функции в лаборатории на столе. Ну, будет оно на 24микросекунды быстрей или медленней, как это скажется в условиях, когда общее время выполнения в реальных условиях из-за окружающих причин плавает на в 1000 раз бОльшие величины? Потому и написал, что "вопрос неуместный", то есть для меня не актуальный.

Другими словами- информация о том, что при заливке вот этого бензина автомобиль сможет двигаться со скоростью 320 км/ч, а не 250, никак не изменит время моей поездки из А в Б в час пик по центру города. Исследование ради исследования?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.