реклама на сайте
подробности

 
 
> Гарвардская и фон неймовская, разница на практике?
Zelepuk
сообщение Oct 28 2011, 19:33
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Какая разнится между гарвардской и фон неймовской архитектурой для С-программиста?
Если можно конкретный жизненный пример.
Заранее благодарен.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
V_G
сообщение Oct 28 2011, 23:24
Сообщение #2


Профессионал
*****

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



Да, для Си-программиста разницы никакой.
Разница в скорости работы полученного кода.
Элементарная операция сложения операндов из внешней памяти в Неймановской архитектуре требует 3 последовательных обращений к памяти (загрузка команды, загрузка 1-го операнда, загрузка 2-го операнда/выполнение сложения).
При Гарвардской архитектуре эта же операция потребует уже 2 обращения: загрузка команды из памяти программ и одновременно загрузка 1-го операнда из памяти данных, затем загрузка второго операнда и выполнение инструкции.
Налицо выигрыш 33% в скорости.
Плюс гарвардская архитектура позволяет делать разные разрядности памяти программ и данных, благодаря чему все или подавляющее большинство кодов инструкций имеют длину всего в одно слово, что также ускоряет их загрузку.
Go to the top of the page
 
+Quote Post
777777
сообщение Oct 31 2011, 10:08
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(V_G @ Oct 29 2011, 03:24) *
Да, для Си-программиста разницы никакой.

Агащязпрям. Попробуйте в AVR создать массив констант в памяти программ и обратиться к нему - сразу поймете разницу.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Oct 31 2011, 10:42
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(777777 @ Oct 31 2011, 13:08) *
Попробуйте в AVR создать массив констант в памяти программ и обратиться к нему - сразу поймете разницу.

С точки зрения языка Си: в какой памяти размещен массив - разницы не будет, обращение к элементам массива будет одинаково (что-то типа M[i]). Другое дело - указатели, но эту проблему должны решать компиляторописатели - решили же эту проблему в Keil...
Go to the top of the page
 
+Quote Post
777777
сообщение Nov 3 2011, 05:13
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(Палыч @ Oct 31 2011, 14:42) *
С точки зрения языка Си: в какой памяти размещен массив - разницы не будет, обращение к элементам массива будет одинаково (что-то типа M[i]). Другое дело - указатели, но эту проблему должны решать компиляторописатели - решили же эту проблему в Keil...

В кейле это решили введением нестандартных ключевы слов.

Цитата(_Pasha @ Nov 1 2011, 13:48) *
Дык в ГЦЦ решено давным давно.

Да ну? И как же это сделано? Неужели в стандарт языка ввели новое ключевое слово, означающее размещение переменной в памяти программ?
Цитата(_Pasha @ Nov 1 2011, 13:48) *
Не надо было бы пеарить обертки типа PROGMEM - не появилось бы надстроек соответствующих. Бы.

Я ничего не понял в этом предложении. Нельзя ли поподробнее и по-русски?

Цитата(Палыч @ Oct 31 2011, 14:42) *
С точки зрения языка Си: в какой памяти размещен массив - разницы не будет, обращение к элементам массива будет одинаково (что-то типа M[i]). Другое дело - указатели, но эту проблему должны решать компиляторописатели - решили же эту проблему в Keil...

Кстати о кейле: вообще-то топикстартер поставил вопрос "Какая разнится между гарвардской и фон неймовской архитектурой для С-программиста?" И вы дружно начали кричать, что разницы никакой. Но во-первых даже при размещении массива программист должен не просто написать M[i], а еще и указать в какой именно памяти он хочет его разместить - а значит разница для программиста уже есть. И после этого он должен пользоваться указателями соответствующего типа чтобы не перепутать обращение к разным типам памятей - и как после этого можно утверждать что для программиста разницы никакой?
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Nov 3 2011, 08:20
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Цитата(777777 @ Nov 3 2011, 07:13) *
Кстати о кейле: вообще-то топикстартер поставил вопрос "Какая разнится между гарвардской и фон неймовской архитектурой для С-программиста?" И вы дружно начали кричать, что разницы никакой.
Но во-первых даже при размещении массива программист должен не просто написать M[i], а еще и указать в какой именно памяти он хочет его разместить - а значит разница для программиста уже есть.

Вы считаете, что применение программистом слов "static" и "const" зависит от типа архитектуры ядра?

Цитата(777777 @ Nov 3 2011, 07:13) *
И после этого он должен пользоваться указателями соответствующего типа чтобы не перепутать обращение к разным типам памятей - и как после этого можно утверждать что для программиста разницы никакой?

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

Я больше скажу- желание разместить данные по какому-либо физическому адресу может прийти в голову и при пользовании фон-неймановским ядром sm.gif
Go to the top of the page
 
+Quote Post
777777
сообщение Nov 3 2011, 10:03
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(Ruslan1 @ Nov 3 2011, 12:20) *
Вы считаете, что применение программистом слов "static" и "const" зависит от типа архитектуры ядра?

А вы считаете, что они предназначены для размещения данных в той или иной памяти? Впрочем, это распространенная ошибка.

Объясняю: спецификатор const преднаначен лишь для того, чтобы сказать компиляторору, что эта переменная (или, если это указатель, то данные на которые он указывает) не должны меняться. И поэтому если компилятор встретит код, который меняет эти данные, он должен выдать не него ошибку. Но это не значит, что они могут размешаться в памяти программ! Поясню на конкретном примере: функция strcpy имеет такой прототип:

char* strcpy( char *strDestination, const char *strSource);

strSource здесь - константный указатель на char. Значит ли это, чо компилятор при трансляции этой функции должен при обращении к данным, адресуемым этим указателем, генерировать код для обращении к памяти программ? Разумеется нет, ведь я могу использовать эту функцию для пересылки строк из памяти данных! Поэтому const нельзя использовать для таких целей, для этого могут использоваться только нестандартные спецификаторы. Тем более, что типы памятей могут не ограничиваться только памятью команд и данных, в том же 8051 есть области DATA, IDATA, XDATA, и другие, о которых стандарт Си не обязан ничего знать.

Что же касается static, то он вообще не имеет отношения к размещению данных (за исключением некоторых мелочей, не относящихся к обсуждаемому вопросу).

Цитата(Ruslan1 @ Nov 3 2011, 12:20) *
Давайте определимся. Вы говорите о проблемах и различии в си-программе не для гарвард-негарвард, а при написании программ на одном конкретном гарвардоподобном ядре при применении одного конкретного компилятора. И проецируете эти проблемы на все прцессоры и все компиляторы. Но это не так, есть гарвардоподобные ядра и компиляторы к ним, в которых описанных вами проблем нет.

Мудреное предложение которое трудно понять. Я говорю о том, о чем спрашивал топикстартер, а именно: "Какая разнится между гарвардской и фон неймовской архитектурой для С-программиста?" Заметте, речь идет не о проблемах, а о разнице. А она безусловно есть и программист обязательно должен эту разницу учитывать.

Цитата(Ruslan1 @ Nov 3 2011, 12:20) *
Я больше скажу- желание разместить данные по какому-либо физическому адресу может прийти в голову и при пользовании фон-неймановским ядром sm.gif

Я ничего не говорил о размещении по физическому адресу. Я говорю о размещении данных в памяти разных типов.



Цитата(Палыч @ Nov 3 2011, 12:25) *
Если Вы ведете речь о размещении массива, то - да, нестандартные ключевые слова для этого ввели в большенство трансляторов.

Разумеется о размещении, перед тем как пользоваться переменными, их нужно создать, а для этого подумать где им место. И в 8081 этот вопрос программист должен продумывать очень тщательно - какие переменные лучше поместить в DATA, а какие в IDATA - ошибки в выборе могут кардинально поменяь производительность.

Цитата(Палыч @ Nov 3 2011, 12:25) *
Я же говорил об указателе: в Keil - "Generic Pointers", транслятор сам "разбирается" с типами памяти.

А, вы об этом уродстве? Вот уж не думал, что ими кто-то реально пользуется. Нужно быть идиотом, чтобы тщательно продумав о размещении переменных (DATA, IDATA или XDATA) после этого обращаться ко всем ним через generic указатели.

Цитата(Палыч @ Nov 3 2011, 12:25) *
Если программист хочет разместить массив именно в конкретной памяти - то некоторая разница есть (при описании массива). Но, можно, и - "по-умолчанию" (не всегда эффективно и возможно). Про указатели - см. выше (Generic Pointers).

Вот именно! Вы прекрасно понимаете, что это сильно влияет на эффективность, но при этом заявляете новичкам, что дла программиста нет никакой разницы какая архитектура у процессора! Может не стоит разбрасываться такими вредными советами, тем более понимая их вредность?

Сообщение отредактировал 777777 - Nov 3 2011, 10:04
Go to the top of the page
 
+Quote Post
Палыч
сообщение Nov 3 2011, 11:55
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



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

Цитата(777777 @ Nov 3 2011, 14:03) *
А вы считаете, что они предназначены для размещения данных в той или иной памяти? Впрочем, это распространенная ошибка.
Вы, возможно, будите удивлены, но некоторые компиляторы для МК "const" именно для этого используют. Хотя, согласно стандарту, предназначены они не для размещения данных...

Цитата(777777 @ Nov 3 2011, 14:03) *
Вы прекрасно понимаете, что это сильно влияет на эффективность, но при этом заявляете новичкам, что дла программиста нет никакой разницы какая архитектура у процессора!
"Эффективность" - понятие очень ёмкое. Каков критерий эффективности? Впрочем, я ещё не видел у новичков эффективно написанных программ (в любом смысле). Но это проходит (а, иногда, - нет) с накопленным опытом. Что же касается знания программистом архитектуры применяемого МК, то тут - ну никак без этого. И это знание, зачастую, обязательно для написания программ на любом языке...
Go to the top of the page
 
+Quote Post
777777
сообщение Nov 3 2011, 14:52
Сообщение #9


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(Палыч @ Nov 3 2011, 15:55) *
Поскольку язык Си был ориентирован на архитектуру фон Неймана, то в стандарте отсутствуют спецификаторы типа памяти, зачастую необходимые для программ, написанных для гарвардской архитектуры. Эти спецификаторы - расширения языка. Они - плод фантазии компиляторописателей, и в разных компиляторах - свои. Впрочем, и различные компиляторы для традиционной (фон Неймановской) архитектуры, обычно, имеют расширения языка (читай: нестандартные конструкции). Так что, программист волей-неволей должен их знать при использовании конкретного компилятора (и это - вне зависимости от архитектуры). В этом смысле можно говорить, что различий в собственно языке СИ в зависимости от архитектуры - нет.

Вам не кажется что три выделенных фрагмента противоречат друг другу?
Если "программист волей-неволей должен знать нестандартные расширения языка", то это не "вне зависимости от архитектуры", а как раз наоборот, ведь в каждой архитектуре свои собственные расширения. Тем более смешно говорить, что "различий в собственно языке СИ в зависимости от архитектуры - нет". Если для обращения к разным областям памяти нужно применять некие конструкции языка, хоть и нестандартные - значит различия есть.

Цитата(Палыч @ Nov 3 2011, 15:55) *
Вы, возможно, будите удивлены, но некоторые компиляторы для МК "const" именно для этого используют. Хотя, согласно стандарту, предназначены они не для размещения данных...

Получается, что там функцией strcpy нельзя скопировать строку из памяти данных? Значит выкидывать надо такие компиляторы.

Цитата(Палыч @ Nov 3 2011, 15:55) *
"Эффективность" - понятие очень ёмкое. Каков критерий эффективности?

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

Цитата(Палыч @ Nov 3 2011, 15:55) *
Впрочем, я ещё не видел у новичков эффективно написанных программ (в любом смысле). Но это проходит (а, иногда, - нет) с накопленным опытом.

Вот чтобы его набраться, они и задают здесь вопросы. Но получают такие ответы, что лучше бы они дошли до всего сами, чем следовать таким советам.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Zelepuk   Гарвардская и фон неймовская   Oct 28 2011, 19:33
- - Ruslan1   Цитата(Zelepuk @ Oct 28 2011, 22:33) Кака...   Oct 28 2011, 19:42
|- - Tiro   Цитата(Ruslan1 @ Oct 28 2011, 22:42) Ника...   Oct 28 2011, 19:46
|- - stells   Цитата(V_G @ Oct 29 2011, 03:24) Элемента...   Oct 29 2011, 05:34
||- - V_G   Цитата(stells @ Oct 29 2011, 15:34) так э...   Oct 29 2011, 06:43
||- - Sergey_Aleksandrovi4   В МК с архитектурой Фон Неймана возможно поместить...   Oct 29 2011, 10:36
||- - dxp   Цитата(Sergey_Aleksandrovi4 @ Oct 29 2011, 17...   Oct 29 2011, 12:59
|||- - Ruslan1   Цитата(777777 @ Nov 3 2011, 12:03) Мудрен...   Nov 3 2011, 21:21
|||- - 777777   Цитата(Ruslan1 @ Nov 4 2011, 01:21) Перев...   Nov 4 2011, 19:32
|||- - Ruslan1   Цитата(777777 @ Nov 4 2011, 21:32) Я гово...   Nov 5 2011, 12:34
|||- - 777777   Цитата(Ruslan1 @ Nov 5 2011, 16:34) res =...   Nov 5 2011, 17:25
|||- - Ruslan1   Цитата(777777 @ Nov 5 2011, 19:25) Скорее...   Nov 5 2011, 20:59
|||- - V_G   Цитата(777777 @ Nov 6 2011, 03:25) Неужел...   Nov 6 2011, 00:06
|||- - 777777   Цитата(V_G @ Nov 6 2011, 04:06) Глубоко к...   Nov 6 2011, 05:30
||||- - V_G   Цитата(777777 @ Nov 6 2011, 15:30) Как же...   Nov 6 2011, 06:51
||||- - Ruslan1   Цитата(V_G @ Nov 6 2011, 08:51) Вообще-то...   Nov 6 2011, 09:36
||||- - 777777   Цитата(Ruslan1 @ Nov 6 2011, 13:36) 1. Ра...   Nov 7 2011, 05:35
||||- - Harvester   Цитата(777777 @ Nov 7 2011, 09:35) Фигасе...   Nov 7 2011, 06:32
||||- - 777777   Цитата(Harvester @ Nov 7 2011, 10:32) А в...   Nov 7 2011, 07:41
||||- - Палыч   Цитата(777777 @ Nov 7 2011, 11:41) Всё, э...   Nov 7 2011, 11:57
|||- - ILYAUL   Цитата(V_G @ Nov 6 2011, 04:06) И уж в лю...   Nov 6 2011, 20:05
||- - Палыч   Цитата(777777 @ Nov 3 2011, 09:13) В кейл...   Nov 3 2011, 08:25
|- - Ruslan1   Цитата(777777 @ Oct 31 2011, 12:08) Агащя...   Oct 31 2011, 13:02
|- - _Pasha   Цитата(777777 @ Oct 31 2011, 14:08) Агащя...   Nov 1 2011, 09:48
- - Zelepuk   Спасибо! Получается стоит учитывать особенност...   Oct 29 2011, 05:16
- - Dog Pawlowa   Цитата(Zelepuk @ Oct 28 2011, 22:33) фон ...   Oct 29 2011, 05:47
- - kan35   Неймановская безусловно ЛУЧШЕ из за линейного адре...   Oct 29 2011, 12:44
- - Ruslan1   Цитата(kan35 @ Oct 29 2011, 15:44) Нейман...   Oct 29 2011, 17:21


Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 14:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01523 секунд с 7
ELECTRONIX ©2004-2016