aaarrr 1 Posted October 23, 2021 · Report post 11 minutes ago, dxp said: ISA не накладывает никаких ограничений на организацию шин Верно. А на организацию полей - очень даже накладывает. И если фон Неймановскую архитектуру легко можно превратить в подобие Гарварда (что все и сделали в результате, и исторически было бы правильнее назвать результат модифицированным фон Нейманом, а не модифицированным Гарвардом), то обратное превращение не всегда возможно. Именно раздельные поля памяти определяют принципиальные различия архитектур, а не количество шин. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
dxp 0 Posted October 23, 2021 · Report post 33 минуты назад, aaarrr сказал: Именно раздельные поля памяти определяют принципиальные различия архитектур, а не количество шин. Так блоки памяти раздельные для того и городят, чтобы можно было к ним лазить параллельно-одновременно, а для этого и нужны разные шины. Вся суть в ускорении доступа, а не в количестве. Тут же утверждалось, что классификация строится именно на типе адресного пространства: если одно одно - это фон Нейман, если они разные (адресация в каждом своя независимая), то это Гарвард. Ссылки выше на, надеюсь, авторитетные источники - вендоров (ADI, ARM), наглядно показывают, что дело не в адресном пространстве, а в способности иметь одновременный доступ к инструкциям и данным, а для этого, разумеется, нужно аппаратное обеспечение - в первую очередь разные шины, разные порты доступа в память. Кстати, не обязательно иметь физически разные блоки памяти - этот одновременный доступ можно организовать, например, с помощью true dual-port (TDP) memory. В процессорах так не делают, это невыгодно, двухпортовая память дорогая, а в какой-нить FPGA вполне норм, т.к. имеются готовые BRAM, поддерживающие TDP. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
SII 0 Posted October 23, 2021 · Report post 14 minutes ago, dxp said: Так блоки памяти раздельные для того и городят, чтобы можно было к ним лазить параллельно-одновременно, а для этого и нужны разные шины. Вся суть в ускорении доступа, а не в количестве. Тут же утверждалось, что классификация строится именно на типе адресного пространства: если одно одно - это фон Нейман, если они разные (адресация в каждом своя независимая), то это Гарвард. Ссылки выше на, надеюсь, авторитетные источники - вендоров (ADI, ARM), наглядно показывают, что дело не в адресном пространстве, а в способности иметь одновременный доступ к инструкциям и данным, а для этого, разумеется, нужно аппаратное обеспечение - в первую очередь разные шины разные порты доступа в память. Кстати, не обязательно иметь разные блоки памяти - этот одновременный доступ можно организовать, например, с помощью true dual-port (TDP) memory. В процессорах так не делают, это невыгодно, двухпортовая память дорогая, а в какой-нить FPGA вполне норм, т.к. имеются готовые BRAM, поддерживающие TDP. 1. Документация вендоров -- это не авторитетный источник, если говорить о терминологии как таковой. Не вендоры определяют, что такое гарвардская архитектура, а что такое -- фон-неймановская. Они, в лучшем случае, придерживаются имеющихся определений, а в худшем -- перевирают их. Вот в плане того, что именно там реализовано, -- да, авторитетный источник (но, увы, временами содержащий прямые ошибки или взаимноисключающие параграфы, а не просто вольное обращение с терминологией, но мы не об этом говорим). 2. В приведённой документации подчёркивалось: "bus architecture", а не просто "architecture". Поэтому абсолютно некорректно утверждать, что Cortex-M3 имеет гарвардскую архитектуру -- а именно это и утверждают многие. Вот "шинную архитектуру", как вендор утверждает, -- с этим можно согласиться. Лично мне такое определение не нравится тем, что способно ввести в заблуждение из-за созвучия с "просто архитектурой", но, пока "bus" не выбрасывается, это терпимо. 3. На Blackfin Вы почему-то подчеркнули "Harvard achitecture", в то время как там написано "modified Harvard architecture" -- а это совсем разные вещи. 4. Опять и опять вопрошаю: если я использую ядро Cortex-M3 и храню и код, и данные в одной и той же памяти -- это гарвардская архитектура или фон-неймановская? Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Leka 0 Posted October 23, 2021 · Report post 25 minutes ago, dxp said: дело не в адресном пространстве, а в способности иметь одновременный доступ к инструкциям и данным, а для этого, разумеется, нужно аппаратное обеспечение - в первую очередь разные шины разные порты доступа в память. Кстати, не обязательно иметь разные блоки памяти - этот одновременный доступ можно организовать, например, с помощью true dual-port (TDP) memory. В процессорах так не делают, это невыгодно, двухпортовая память дорогая, а в какой-нить FPGA вполне норм, т.к. имеются готовые BRAM, поддерживающие TDP. В моем конвейерном софт-процессоре так сделано, одновременный доступ к инструкциям и данным в TDP BRAM. И отношу свою архитектуру к фон-Неймановской, поскольку инструкции и данные перемешаны в едином линейном адресном пространстве. Назвать такую архитектуру Гарвардской никак не получится - шина инструкций используется и для данных при косвенной адресации. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
dxp 0 Posted October 23, 2021 · Report post 53 минуты назад, SII сказал: Документация вендоров -- это не авторитетный источник Т.е. ARM для вас неавторитетный источник. А кто ж тогда авторитетный кроме вас самого? :) 53 минуты назад, SII сказал: В приведённой документации подчёркивалось: "bus architecture", а не просто "architecture" А что такое "просто "architecture""? ISA? А где в ISA упоминается способ доступа в адресное пространство? 53 минуты назад, SII сказал: На Blackfin Вы почему-то подчеркнули "Harvard achitecture", в то время как там написано "modified Harvard architecture" -- а это совсем разные вещи. Да уж, совсем разные. Позволяет не только одновременный доступ в память инструкций и данных, но и использовать память инструкций как память данных - по сути использовать шину инструкций как ещё одну шину данных (и подкачивать больше операндов для обработки в единицу времени, что актуально для DSP особенно во время коротких аппаратных циклов, когда за инструкциями в память лазить не надо, и шина инструкций может использоваться для подкачки данных из памяти инструкций). 53 минуты назад, SII сказал: Опять и опять вопрошаю: если я использую ядро Cortex-M3 и храню и код, и данные в одной и той же памяти -- это гарвардская архитектура или фон-неймановская? И опять отвечаю: не важно, как вы там что храните, важно то, как вы к этому осуществляете доступ - если вы к этой памяти за кодом и данными лезете по очереди по одной шине, это фон Нейман, если можете достать очередную инструкцию и данные одновременно по разным шинам - это Гарвард. В последнем случае не важно, в едином адресном пространстве они живут или в разных (каждое начинается, например со нуля). Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
makc 7 Posted October 23, 2021 · Report post 4 минуты назад, dxp сказал: И опять отвечаю: не важно, как вы там что храните, важно то, как вы к этому осуществляете доступ - если вы к этой памяти за кодом и данными лезете по очереди по одной шине, это фон Нейман, если можете достать очередную инструкцию и данные одновременно по разным шинам - это Гарвард. В последнем случае не важно, в едином адресном пространстве они живут или в разных (каждое начинается, например со нуля). @SII вам не поверит, как и мне. И ваше определение сейчас тоже натянут на глобус, ведь есть только два мнения: "моё и неправильное". И ссылок на классические труды на эту тему в области Computer Science, которые бы подтверждали авторитетное мнение @SII вы тоже не увидите. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Leka 0 Posted October 23, 2021 · Report post 21 minutes ago, dxp said: А где в ISA упоминается способ доступа в адресное пространство? Компилятор должен все знать про адресное пространство, и ничего - про шины (кроме м/б времянки, для оптимизации кода). Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
dxp 0 Posted October 23, 2021 · Report post 1 минуту назад, Leka сказал: Компилятор должен все знать про адресное пространство, и ничего - про шины (кроме м/б времянки, для оптимизации кода). И что же он должен знать про адресное пространство, кроме того, что оно просто существует? :)) Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Leka 0 Posted October 23, 2021 · Report post 1 minute ago, dxp said: И что же он должен знать про адресное пространство? Где можно инструкции размещать, и где - данные. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
dxp 0 Posted October 23, 2021 · Report post Так компилятор размещает их в разных секциях. Каждая секция по сути образует отдельное автономное для каждой единицы компиляции (если мы говорим про C/C++) адресное пространство. И уже потом отнюдь не компилятор, но линкер собирает секции вместе и размещает полученное в сегментах памяти. Вот про линкер с каким-то приближением можно сказать, что он "знает" про адресное пространство, но и это натяжка: линкер делает то, что ему велено посредством инструкций линкерного скрипта, где как раз описаны сегменты физической памяти и мапинг секций объектных файлов в эти сегменты. И этот линкерный скрипт написан человеком, и именно человек-то и знает про все эти адресные пространства конкретного процессора, на основании чего и составляет их описания в этом скрипте. Т.ч. линкер сам по себе тоже ничего толком не знает, а тупо распихивает входные секции, попутно разрешая (resolve) адреса - наводя связи, в сегменты физической памяти. А уж компилятор вообще бесконечно далёк от этого. А код и данные он всегда пихает в разные секции, независимо от того, гарварская там шина или фон неймановская. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Leka 0 Posted October 23, 2021 · Report post Неважно, как конкретно делается компиляция, важно, что для компиляции нужна программная модель памяти (а не физическая организация), и это входит в понятие архитектуры. В частном случае программная модель может содержаться в линкерном скрипте, это все входит в понятие компиляции. Под компилятором я подразумевал все программные средства компиляции. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
dxp 0 Posted October 23, 2021 · Report post 3 минуты назад, Leka сказал: Неважно, как конкретно делается компиляция, важно, что для компиляции нужна программная модель памяти (а не физическая организация), и это входит в понятие архитектуры. Хотите сказать, что программная модель языка Си различается для разных процессоров? Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
aaarrr 1 Posted October 23, 2021 · Report post 1 minute ago, dxp said: Хотите сказать, что программная модель языка Си различается для разных процессоров? Для "настоящей" Гарвардской архитектуры нужны определенные костыли. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
dxp 0 Posted October 23, 2021 · Report post Только что, aaarrr сказал: Для "настоящей" Гарвардской архитектуры нужны определенные костыли. Возьмём "настоящую" - AVR. Какие костыли? Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
aaarrr 1 Posted October 23, 2021 · Report post 4 minutes ago, dxp said: Какие костыли? При работе с RO-данными. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...