Что быстрее, выполнение программы из ПЗУ или ОЗУ?


8

Большинство из нас, кто имеет опыт работы с электроникой, знают, что SRAM быстрее, чем DRAM. Но когда дело доходит до сравнения ОЗУ с ПЗУ, я не уверен.

Мой вопрос связан с микроконтроллером: «Если код выполняется непосредственно из ОЗУ / ПЗУ, производительность которого будет лучше: 1) выполнение из ОЗУ или 2) выполнение из ПЗУ или 3) оба будут работать одинаково»

Также учитывая тот факт, что ПЗУ предназначены для более высокой скорости чтения. в то время как для RAM существует компромисс скорости чтения для наличия возможностей записи.


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

Я пока не могу добавить комментарий, просто пытаюсь быть полезным. Зависит от того, действительно ли ПЗУ быстрее, чем ОЗУ, которое вы используете. Они равных скоростей?
ОззиСпин

Многие текущие части ARM Cortex-M являются яркими примерами тех, которые могут выполняться из SRAM, но медленнее, когда не удается использовать выделенный путь инструкций для прошивки. И наоборот, доступ к данным во флэш-памяти может быть медленнее, чем к ОЗУ
Крис Страттон

Но с немного более старыми чипами ARM7 (мой опыт был с LPC2106 и LPC2148) освобождение от RAM часто БЫСТРЕЕ, чем от FLASH. Что, вместе с ответом Криса, доказывает, что единственное, что мы можем сказать, это «это зависит».
Вутер ван Оойен

Если у вас уже есть оборудование, проще всего запустить два сценария и сравнить. Если нет, таблицы данных - ваш лучший выбор.
Луаан

Ответы:


16

Таблица данных должна указывать, сколько времени занимает каждая инструкция, и какие существуют различия, если они есть, между выполнением из ОЗУ или ПЗУ.

Для микроконтроллера, который предлагает возможность выполнения из ОЗУ, это, вероятно, быстрее, вероятно, является основной целью использования дополнительного пространства ОЗУ для выполнения кода из. Там также могут быть некоторые проблемы с перекрытием извлечения. В некоторых случаях это может быть быстрее выполнить из ПЗУ, потому что это отдельная память, и доступ к ОЗУ может происходить одновременно.

Опять же, единственный способ узнать какой-либо конкретный микроэлемент - ПРОЧИТАТЬ ДАННЫЕ .


Это еще быстрее выполнить из реестра.
Джошуа

@ Джошуа У вас есть примеры того, что вы можете сделать с программой, выполняемой из регистров? Это кажется очень умным, но ограничено небольшим размером программы. Я слышал о графических демонстрациях на 64 КБ, но демонстрации на 16 регистров? =)
Cort Ammon

3
@CortAmmon: у меня на столе один сидит с 512 регистрами, 400 из которых содержат программный код. ОЗУ работает в 3 раза медленнее, а ПЗУ настолько медленное, что при запуске копируется в ОЗУ (на это уходит 100 миллисекунд). У меня есть инициализатор / считыватель SD-карт, который вмещается в 300 регистров, без аппаратной поддержки, кроме выводов GPIO. Писатель берет еще 100 или около того регистров, так что все это не помещается в регистр (этого было бы недостаточно, чтобы сделать что-нибудь интересное), но мне больше не нужен инициализатор, поэтому перезаписывайте.
Джошуа

9

Это полностью зависит от памяти и архитектуры процессора. Как правило, SRAM быстрее флэш-памяти, особенно на высокоскоростных микроконтроллерах (> 100 МГц). Битовые ячейки SRAM производят (более или менее) выход логического уровня, в то время как флэш-память должна проходить более медленный процесс измерения тока.

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

Код также имеет значение. Если ваш код является строго линейным (без разветвления), флэш-память может выполнять предварительную выборку команд достаточно быстро, чтобы поддерживать насыщение процессора даже на более высоких частотах. Как сказал Олин, ЦП Гарвардской архитектуры с отдельными путями чтения программ и данных может работать по-разному, когда код и данные находятся в разных запоминающих устройствах.

Металлические ПЗУ (и другие энергонезависимые запоминающие устройства, такие как FRAM) имеют свои собственные характеристики и могут быть или не быть такими же быстрыми, как SRAM. Способность писать не обязательно имеет значение; это больше о характеристиках выходных битовых ячеек и чувствительных цепей.

Таблица данных даст вам приблизительное представление о разнице в скорости, но единственный способ узнать наверняка - это профилировать ваш код.


1

«Запуск программы» требует процессора с синхронными часами. Медленная память может быть приспособлена либо путем запуска всей системы на достаточно медленных тактовых частотах, либо путем вставки wait states(дополнительные тактовые циклы бездействия между фазами выборки и декодирования), активные только для определенных диапазонов адресов (см., Например, древний 8085). Извлечение инструкций процессора не знает или не заботится точно, когда данные устанавливаются к своему окончательному значению, лишь бы они не изменялись в течение интервала установки / удержания.

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

Быстрая память обычно стоит дороже (более высокое напряжение, меньшая емкость, больший спрос). 80xx86 имеет быструю SRAM в кеше L2 и еще более быструю SRAM в кеше L1, а также множество более медленных внешних микросхем DRAM, подключенных к контроллеру памяти. Такая система намного сложнее, чем микроконтроллер, и выходит за рамки вопроса. (Но большой интерес для компьютерного инженера!)


1
На самом деле идеально подобранный дизайн невозможен без ограничений. Процессор либо разделяет память команд и данных, недоиспользует скорость памяти в командах, не связанных с данными памяти, испытывает состояния ожидания или использует многопортовую память.
Крис Страттон

2
Состояния ожидания довольно распространены в высокопроизводительных микроконтроллерах. Вспышка медленная.
Адам Хаун

@AdamHaun: с другой стороны, многие внутренние флэш-массивы могут читать много слов одновременно; если код переходит в какое-то произвольное место во флэш-памяти, для извлечения первой инструкции может потребоваться пара циклов, но после выборки следующие несколько команд могут быть доступны без дальнейшей задержки. Во многих случаях доступ к чему-то ближе к концу буфера подготовит систему к загрузке следующего набора слов.
суперкат
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.