Перейти к содержанию
    

Гарвардская и фон неймовская

Какая разнится между гарвардской и фон неймовской архитектурой для С-программиста?

Если можно конкретный жизненный пример.

Заранее благодарен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Какая разнится между гарвардской и фон неймовской архитектурой для С-программиста?

Если можно конкретный жизненный пример.

Заранее благодарен.

Никакой.

Исходники одинаково хорошо копилируются си-компиляторами в любую архитектуру, от PIC12 до ARM или BF. Лишь бы ресурса хватало. А любую закорюку, требующую индивидуального подхода (прагмы например) нужно очень серьезно обдумывать независимо от архитектуры.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Никакой.

Исходники одинаково хорошо копилируются си-компиляторами в любую архитектуру, от PIC12 до ARM или BF. Лишь бы ресурса хватало. А любую закорюку, требующую индивидуального подхода (прагмы например) нужно очень серьезно обдумывать независимо от архитектуры.

 

Разницы нет, если он вирусы не пишет ))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, для Си-программиста разницы никакой.

Разница в скорости работы полученного кода.

Элементарная операция сложения операндов из внешней памяти в Неймановской архитектуре требует 3 последовательных обращений к памяти (загрузка команды, загрузка 1-го операнда, загрузка 2-го операнда/выполнение сложения).

При Гарвардской архитектуре эта же операция потребует уже 2 обращения: загрузка команды из памяти программ и одновременно загрузка 1-го операнда из памяти данных, затем загрузка второго операнда и выполнение инструкции.

Налицо выигрыш 33% в скорости.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо!

Получается стоит учитывать особенности архитектуры при расчёте алгоритмов и выборе процессора...

 

Да, для Си-программиста разницы никакой.

Разница в скорости работы полученного кода.

Элементарная операция сложения операндов из внешней памяти в Неймановской архитектуре требует 3 последовательных обращений к памяти (загрузка команды, загрузка 1-го операнда, загрузка 2-го операнда/выполнение сложения).

При Гарвардской архитектуре эта же операция потребует уже 2 обращения: загрузка команды из памяти программ и одновременно загрузка 1-го операнда из памяти данных, затем загрузка второго операнда и выполнение инструкции.

Налицо выигрыш 33% в скорости.

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

 

В чём плюсы фон неймовской архитектуры тогда? Нежто МСП430 зря работают по Фон неймовской архитектуре?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Элементарная операция сложения операндов из внешней памяти...

Налицо выигрыш 33% в скорости.

так это для внешней памяти, а поскольку обработка данных осуществляется большей частью над содержимым РОН, то выигрыш на порядок меньше

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

фон неймовской

Несчастный фон Нейман в гробу ворочается.

Так фамилию переврать...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

так это для внешней памяти, а поскольку обработка данных осуществляется большей частью над содержимым РОН, то выигрыш на порядок меньше

Зависит от реализации Гарвардской архитектуры. В DSP от Analog Devices возможна одновременная (в одном тактовом цикле) прогрузка данных (в РОН, условно говоря) из двух областей памяти и вычислительная операция. В обычных контроллерах (avr,pic) преимущества Гарвардской проявляются в коротких командах - очень мало двухсловных команд (в picaх вообще не помню, есть ли).

 

2Zelepuk

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В МК с архитектурой Фон Неймана возможно поместить выполняемый код в ОЗУ и динамически изменят его. Ну например загружать в ОЗУ программы из карты памяти. В МК с гарвардской архитектурой подобные вещи сделать затруднительно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Неймановская безусловно ЛУЧШЕ из за линейного адресного пространства.

Простейщий пример для пишущих на Си:

гарвардская у AVR требует иметь 3 разных printf - для строк из памяти данных и для строк из памяти программ, и для eeprom,удобно?)). Наличие многих адресных пространств памятей постоянно требует дублирования функций. Это существенно затрудняет портирование интересных и нужных наработок как IP/TCP стеков, графических оболочек (GUI) и проч.

 

Однако, наилучшая архитектура для микроконтроллеров - так наз. смешанная, когда ОЗУ и FLASH висят на разных шинах, но находятся в 1 адресном пространстве. Лучший пример - ARMы серии Cortex-M.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В МК с архитектурой Фон Неймана возможно поместить выполняемый код в ОЗУ и динамически изменят его. Ну например загружать в ОЗУ программы из карты памяти. В МК с гарвардской архитектурой подобные вещи сделать затруднительно.

Ничуть не затруднительно, если в качестве программ выступает ОЗУ. Пример - процессор фирмы ADI Blackfin. В случае, если не ОЗУ, то потруднее, но это обусловлено не типом архитектуры, а типом памяти.

 

Из уникальных фишек, доступных для фон Неймана, можно отметить возможность писать position-independed code, когда код и данные линкуются в сопряжённые блоки и доступ к данным организуется по относительным (от кода) смещениям, что позволяет эти блоки размещать в любом месте адресного пространства без потери целостности функциональности.

 

Неймановская безусловно ЛУЧШЕ из за линейного адресного пространства.

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

 

Гарвардская архитектура тут просто даёт возможность подкачивать данные и код одновременно - каждое по своим шинам, но память при этом может быть одна и та же (ессно, одна должна быть побита на блоки, доступ к которым осуществляется со стороны шин данных и адресов неодновременно).

 

Простейщий пример для пишущих на Си:

гарвардская у AVR требует иметь 3 разных printf - для строк из памяти данных и для строк из памяти программ, и для eeprom,удобно?)). Наличие многих адресных пространств памятей постоянно требует дублирования функций.

Это просто у AVR так организовано, что память данных ОЗУ, память данных EEPROM и память программ физически разделены, поэтому тут нужны всякие расширения вроде __flash и __eeprom. А можно ведь было сделать и по-другому. Правда, у AVR адресная шина неширокая, поэтому на нём сильно не разгонишься по пути унифицированного адресного пространства для всех видов памяти.

 

Однако, наилучшая архитектура для микроконтроллеров - так наз. смешанная, когда ОЗУ и FLASH висят на разных шинах, но находятся в 1 адресном пространстве. Лучший пример - ARMы серии Cortex-M.

Именно. И ещё пример - Blackfin. У всех этих процов шина адресов широкая - 32 бита, есть, где всё разместить. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Неймановская безусловно ЛУЧШЕ из за линейного адресного пространства.

Простейщий пример для пишущих на Си:

гарвардская у AVR требует иметь 3 разных printf - для строк из памяти данных и для строк из памяти программ, и для eeprom,удобно?)).

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, для Си-программиста разницы никакой.

Агащязпрям. Попробуйте в AVR создать массив констант в памяти программ и обратиться к нему - сразу поймете разницу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробуйте в AVR создать массив констант в памяти программ и обратиться к нему - сразу поймете разницу.

С точки зрения языка Си: в какой памяти размещен массив - разницы не будет, обращение к элементам массива будет одинаково (что-то типа M). Другое дело - указатели, но эту проблему должны решать компиляторописатели - решили же эту проблему в Keil...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Агащязпрям. Попробуйте в AVR создать массив констант в памяти программ и обратиться к нему - сразу поймете разницу.

ну а с макрочипом (PIC18 например) это делается просто, именно память программ используется:

static const double K1mlt[128] =
{
        1.0,            //in0
        1.0,            //in1
......

rezdouble = ((double)adccode._int * K1mlt[n]) + K1add[n];

Так что проблемы не в архитектуре, а в компиляторе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...