|
Гарвардская и фон неймовская, разница на практике? |
|
|
|
Oct 29 2011, 05:16
|
Знающий
   
Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464

|
Спасибо! Получается стоит учитывать особенности архитектуры при расчёте алгоритмов и выборе процессора... Цитата(V_G @ Oct 29 2011, 02:24)  Да, для Си-программиста разницы никакой. Разница в скорости работы полученного кода. Элементарная операция сложения операндов из внешней памяти в Неймановской архитектуре требует 3 последовательных обращений к памяти (загрузка команды, загрузка 1-го операнда, загрузка 2-го операнда/выполнение сложения). При Гарвардской архитектуре эта же операция потребует уже 2 обращения: загрузка команды из памяти программ и одновременно загрузка 1-го операнда из памяти данных, затем загрузка второго операнда и выполнение инструкции. Налицо выигрыш 33% в скорости. Плюс гарвардская архитектура позволяет делать разные разрядности памяти программ и данных, благодаря чему все или подавляющее большинство кодов инструкций имеют длину всего в одно слово, что также ускоряет их загрузку. В чём плюсы фон неймовской архитектуры тогда? Нежто МСП430 зря работают по Фон неймовской архитектуре?
|
|
|
|
|
Oct 29 2011, 06:43
|

Профессионал
    
Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955

|
Цитата(stells @ Oct 29 2011, 15:34)  так это для внешней памяти, а поскольку обработка данных осуществляется большей частью над содержимым РОН, то выигрыш на порядок меньше Зависит от реализации Гарвардской архитектуры. В DSP от Analog Devices возможна одновременная (в одном тактовом цикле) прогрузка данных (в РОН, условно говоря) из двух областей памяти и вычислительная операция. В обычных контроллерах (avr,pic) преимущества Гарвардской проявляются в коротких командах - очень мало двухсловных команд (в picaх вообще не помню, есть ли). 2Zelepuk По Неймановской - общая память как для программ, так и для данных может быть как ее преимуществом, так и недостатком, в зависимости от ситуации. Но по скорости работы у нее преимуществ нет однозначно.
|
|
|
|
|
Oct 29 2011, 12:59
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(Sergey_Aleksandrovi4 @ Oct 29 2011, 17:36)  В МК с архитектурой Фон Неймана возможно поместить выполняемый код в ОЗУ и динамически изменят его. Ну например загружать в ОЗУ программы из карты памяти. В МК с гарвардской архитектурой подобные вещи сделать затруднительно. Ничуть не затруднительно, если в качестве программ выступает ОЗУ. Пример - процессор фирмы ADI Blackfin. В случае, если не ОЗУ, то потруднее, но это обусловлено не типом архитектуры, а типом памяти. Из уникальных фишек, доступных для фон Неймана, можно отметить возможность писать position-independed code, когда код и данные линкуются в сопряжённые блоки и доступ к данным организуется по относительным (от кода) смещениям, что позволяет эти блоки размещать в любом месте адресного пространства без потери целостности функциональности. Цитата(kan35 @ Oct 29 2011, 19:44)  Неймановская безусловно ЛУЧШЕ из за линейного адресного пространства. Отнюдь. Линейное адресное пространство не обуславливает тип архитектуры. Ничто принципиально не мешает иметь разные адресные пространства для данных и кода и тем не менее помещать всё это в одно общее физическое адресное пространство. Фон Неймановская архитектура предоставляет одну и ту же шину для доступа в память данных и в память программ, а гарвардская - разные. Но целевая память может быть одной той же (просто во втором случае она должна быть способна к подключению двух шин одновременно пусть и к разным блокам памяти). Гарвардская архитектура тут просто даёт возможность подкачивать данные и код одновременно - каждое по своим шинам, но память при этом может быть одна и та же (ессно, одна должна быть побита на блоки, доступ к которым осуществляется со стороны шин данных и адресов неодновременно). Цитата(kan35 @ Oct 29 2011, 19:44)  Простейщий пример для пишущих на Си: гарвардская у AVR требует иметь 3 разных printf - для строк из памяти данных и для строк из памяти программ, и для eeprom,удобно?)). Наличие многих адресных пространств памятей постоянно требует дублирования функций. Это просто у AVR так организовано, что память данных ОЗУ, память данных EEPROM и память программ физически разделены, поэтому тут нужны всякие расширения вроде __flash и __eeprom. А можно ведь было сделать и по-другому. Правда, у AVR адресная шина неширокая, поэтому на нём сильно не разгонишься по пути унифицированного адресного пространства для всех видов памяти. Цитата(kan35 @ Oct 29 2011, 19:44)  Однако, наилучшая архитектура для микроконтроллеров - так наз. смешанная, когда ОЗУ и FLASH висят на разных шинах, но находятся в 1 адресном пространстве. Лучший пример - ARMы серии Cortex-M. Именно. И ещё пример - Blackfin. У всех этих процов шина адресов широкая - 32 бита, есть, где всё разместить.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Oct 31 2011, 13:02
|
Гуру
     
Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025

|
Цитата(777777 @ Oct 31 2011, 12:08)  Агащязпрям. Попробуйте в AVR создать массив констант в памяти программ и обратиться к нему - сразу поймете разницу. ну а с макрочипом (PIC18 например) это делается просто, именно память программ используется: Код static const double K1mlt[128] = { 1.0, //in0 1.0, //in1 ......
rezdouble = ((double)adccode._int * K1mlt[n]) + K1add[n]; Так что проблемы не в архитектуре, а в компиляторе.
|
|
|
|
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|