MrYuran 29 19 января, 2009 Опубликовано 19 января, 2009 · Жалоба AVR с ARMом в придачу выполняет команду за один такт/ Счет 6/1 в чью пользу? Шулерство чистой воды. 1) AVR != x51 2) тот же AVR имеет команды по 2, 3 и даже (о ужас!) 4 цикла. А мне вот в связи с банками и другой посудой вспомнилась такая фишка от Z80: там были 2 идентичных набора регистров (включая PC, SP, флаги и т.д.), которые переключались одной командой. То есть можно было реализовать много(двух)задачность, всего лишь выполняя эту команду по таймеру. Вот над чем бы подумать. Опять же в контексте многозадачных приложений. Ещё нынче в моде многоголовость. 8bit Dual (Quad) Core Microcontroller - по-моему, звучит! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 19 января, 2009 Опубликовано 19 января, 2009 · Жалоба Мультизадачность - для МК это экзотика Это справедливо только для pic16C54 :) Если все это позиционируется для SoC, то почему такое отношение к мультизадачности? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mahagam 0 19 января, 2009 Опубликовано 19 января, 2009 · Жалоба Это приведено как пример того что даже ХХ86 не гнушался 8-разрядности и 8-разрядные МК рановато списывать в утиль ну и бред. 8-разрядная внешняя шина позволяла в те годы зверски уменьшить цену конечного изделия на этом процессоре, оставаясь в рамках 16-ти разрядной вычислительной мощности. откуда взялась связь с МК - неясно. А про команду группового сохранения - это верно - сохранить 16 регистров во внутренней памяти быстрее не получается/плюс такт на команду Вопрос вот в чем - а нужна ли эта команда? не. разработчики ядра её так просто по приколу вставили. ага. Мультизадачность - для МК это экзотика/ да-да! и всякие табуны uCOS, eCOS, FreeFTOS, CTL и прочих многозадачных примочек - это всё из области экзотики и фантазии. конечно, раз этого не было в книжках двадцатилетней давности, то этого просто не может быть сейчас. Далее задаем долю операций переключения контекста/ 1% мало - берем 2/ В результате мы сэкономили на этой команде в объеме кода 0.32% В тактах не выиграли ничего/ Зато усложнили аппаратуру/ Ради чего ой жжошь! "1% мало - берём 2" а почему не 5 ? почему не 10? а в военное время и до 80 может подскочить! а подумать, в какий процессорах есть команды такого типа, а в каких нет? и что даёт эта команда? а зачем такую команду ввели 80286 проц? а что она давала там? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vitja 0 19 января, 2009 Опубликовано 19 января, 2009 · Жалоба Шулерство чистой воды. 1) AVR != x51 8bit Dual (Quad) Core Microcontroller - по-моему, звучит! Не AVR = x51 а объем кода М430 в 1.7 раза больше x51 AVR по моим расчетам уступает в объеме кода 8051 на 38%/ но по производительности опережает последний почти в два раза/ если оценивать такты 8051 не по оригиналу а по более современным моделям Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mahagam 0 19 января, 2009 Опубликовано 19 января, 2009 · Жалоба Не AVR = x51 а объем кода М430 в 1.7 раза больше x51 AVR по моим расчетам уступает в объеме кода 8051 на 38%/ но по производительности опережает последний почти в два раза/ если оценивать такты 8051 не по оригиналу а по более современным моделям не. ну какая настойчивость. :smile3046: смотрим в книгу видим жопу. третий раз дают тебе ссылку: http://mcu.caxapa.ru/benchmarks/ там, по практическим, а не чисто умозрительным, результатам видно, что объём кода у MSP430 меньше, чем у 8051. например, в самом ядрёном случае - арифметические операции с 16-ти разрядными матрицами имеем 825/112 - у MSP430 кода получается меньше в 7.3 раза! но раз факты опровергают теорию - от них надо избавиться? :maniac: не так ли? ощущение, что вы там ни разу в жизни не запускали ни один компилятор, ни разу в жизни не видели симулятора МК "В третей комнате Николай Степанович увидел отдел изучения меча Зигфрида. Самого меча пока не дастали, но отдел занимался изучением воображаемой модели. Воображаемый Нотунг помещали в магнитное поле, травили кислотами и испытывали на разрыв..." (С) М. Успенский, А. Лазарчук, "Посмотри в глаза чудовищ". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vitja 0 19 января, 2009 Опубликовано 19 января, 2009 (изменено) · Жалоба ну и бред. откуда взялась связь с МК - неясно. разработчики AТMEL так просто по приколу вставили команду группового сохранения регистров/ жжошь! а зачем такую команду ввели 80286 проц? а что она давала там? Только как пример того/ что 16-разрядный процессор 8086 работал на 8-разрядной шине как и современные 8-разрядные МК/ Они приколись по полной - ввели команду группового восстановления регистров/ в 80286 эти команды ввели без приколов/ а по причине необходимости поддержки мультизадачности Типовой МК работает с таймером (1 обработчик прерывания) плюс интерфейсы (еще 1 или более обработчиков) В каждом из них сохраняют контекст одной или большим числом команд/ Доля этих команд в общем объеме кода программы минимальна и даже в военное время не превышает 2%/ Как сделать больше я не знаю / Научите Изменено 19 января, 2009 пользователем vitja Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 19 января, 2009 Опубликовано 19 января, 2009 · Жалоба В каждом из них сохраняют контекст одной или большим числом команд/ Доля этих команд в общем объеме кода программы минимальна и даже в военное время не превышает 2%/ Как сделать больше я не знаю / Научите В АРМах команды группового сохранения/загрузки регистров используются почти при каждом вызове процедуры даже в однозадачной программе. При этом сохраняюся в стеке 3..5..10 регистров. В ARM7 эта команда гораздо более универсальна в отличие от 80286. При желании этой командой можно максимально быстро копировать одну область памяти в другую, в 2..3 раза быстрее чем другим способом. Вы знаете слишком поверхностно системы команд. Поэтому все приводимые цыфры и большинство данных вами оценок архитектур необъективны. Глупости конкретные. С таким пониманием темы лучше от неё сразу отказаться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mahagam 0 19 января, 2009 Опубликовано 19 января, 2009 · Жалоба Только как пример того/ что 16-разрядный процессор 8086 работал на 8-разрядной шине как и современные 8-разрядные МК/ да вы просто из страны эльфов! откуда вам знать какой разрядности и сколько шин внутрях у МК? это внешняя шина имеет ограничения по разрядности. что там внутрях - известно только производителям. внутрях кристалла к ядру может подходить а) 8-ти разрядная шина команд б) 8-и разрядная шина данных из памяти в) 8-и разрядная шина данных для записи в память. в итоге за 1 такт мы а) читаем команду б) получаем данные из памяти в) пишем результат предыдущих вычислений в память. МК остаётся 8-и разрядным. но эти его 8 разрядов ничего общего с внешними 8-ю разрядами 8086 не имеют. ибо по внешней шине за 1 такт происходит только одна транзакция. Они возможно по приколу/ а в 80286 по причине необходимости поддержки мультизадачности это вы высосали из пальца. что бы вы не сосали что-нибудь ещё, приведу пример. пример прост: имеем понятное ограничение - одно обращение к памяти за такт (память - внешняя). имеем задачу - сохранить в стеке 10 регистров вариант а) 10 раз мы читаем команду PUSH, 10 раз пишем в стек. итого 10 байт кода, 20 обращений к памяти вариант б) 1 раз прочитали PUSHALL, 10 раз записали в стек. итого - 1 байт кода, 11 обращений к памяти. эффективно? безусловно. но эта команда становится эффективной по скорости только в случае если данные и команды лежат в одной физической памяти. в случае с МК это уже не так критично. Типовой МК работает с таймером (1 обработчик прерывания) плюс интерфейсы (еще 1 или более обработчиков) В каждом из них сохраняют контекст одной или большим числом команд/ Доля этих команд в общем объеме кода программы минимальна и даже в военное время не превышает 2%/ Как сделать больше я не знаю / Научите а если на процессор валятся 20000 прерываний в секунду? если он из одного прерывания еле успевает переползать в обработчик следущего? есть ли смысл оптимизировать ядро для быстрого сохранения/восстановления контекста? ARM7 умеет сохранять в стек одной командой произвольные регистры, что не только полезно в обработчике прерываний, но и просто при вызове функций. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vitja 0 19 января, 2009 Опубликовано 19 января, 2009 · Жалоба 1 ////ну какая настойчивость. смотрим в книгу видим жопу. 2/// там, по практическим, а не чисто умозрительным, результатам видно, что оарифметические операции с 16-ти разрядными матрицами имеем 825/112 - у MSP430 кода получается меньше в 7.3 раза! 1/ У Чехова в записках станционного смотрителя - написано не так "смотрю в книгу, а вижу фигу"/ Однако это было написано в прошлом веке/ интернета тогда не было/ а книга даже 81 года для Вас это библиографическая редкость /Вы только Wiki читаете - кладезь Ваших знаний 2/ Сравнение проводилось на не вычислительных задачах обработки 8-разрядных данных поэтому такие результаты// И вообще сравнение проводилось не ради сравнения/ а ради выявления и оценки влияния архитектурных особенностей системы команд 8-разрядного МК на затраты кода и тактов на реализацию операторов ЯВУ по весу их употребления в типовых программах // в конце позволю себе пофантазировать Сейчас есть мониторы/ 3D графика/ Inet с его анонимностью/ Но вдруг появились теле-мониторы не с графикой а с материальной передачей информации Сидишь себе за таким теле-монитором (чатишься)/ а тут тебе в ответ не словом/ а /// та так что чатится уже не захочется Однако я бы бросил перчатку/ а результат - как у Черной речки / это там в 600-стах километрах от Москвы Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mahagam 0 19 января, 2009 Опубликовано 19 января, 2009 · Жалоба vitja давайте вы не будете словоблудить когда по существу темы сказать нечего. вам не нравится арифметика? смотрим результаты теста по switch/case по восьмиразрядной переменной. и опять у MSP430 выигрыш в 209/178 = 1.17 раза по объёму кода. неужто незаметно, что ваша оценка не то что бы хромает - она вообще в корне не верна! вы вообще сверялись с практическими данными? что касается библиографических редкостей - у меня на столе лежит "MICROCOMPUTERS/MICROPROCESSORS hardware, software and applications" на русском. издана в 1979. оригинал аж 1976 года. ничего кроме "энтомологического" интереса "а как оно тогда было, когда двухядерников не было" не вызывает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vitja 0 19 января, 2009 Опубликовано 19 января, 2009 (изменено) · Жалоба 1 пример прост: а) 10 раз мы читаем команду PUSH, 10 раз пишем в стек. итого 10 байт кода, 20 обращений к памяти вариант б) 1 раз прочитали PUSHALL, 10 раз записали в стек. итого - 1 байт кода, 11 обращений к памяти. 2 ARM7 умеет сохранять в стек одной командой произвольные регистры, что полезно ... при вызове функций. 1. Я тоже иногда ошибаюсь и передергиваю понятия. Однако при разделенных шинах команд и данных (в МК, как правило, это так) Мы будем иметь 10 команд PUSH и только 10 тактов на их выполнение, а Вас почему то 11. Неувязочка получилась. Опа!!! 2. Я так ждал, что кто нибудь это скажет. Вы первый. Поздравляю. Именно. Я всегда считал, что одной из проблем регистровой архитектуры, несмотря на их шустрость (обработка 2 операндов за такт), являются накладные расходы на загрузку и выгрузку регистров при вызове процедуры. Я для расчетов брал цифру 2 (1 - входной операнд и 1 - результат). По Вашему мнению какая цифра этих затрат будет ближе к действительности. Однако на этот вопрос ответил заранее GetSmart - поэтому не напрягайтесь, от 3 до 10, ++++ (в среднем можно принять 5 туда и 5 обратно при каждом вызове процедуры доля которых в среднем составляет 18%) Срочно делаю перерасчет числа тактов для AVR. Изменено 19 января, 2009 пользователем vitja Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mahagam 0 19 января, 2009 Опубликовано 19 января, 2009 · Жалоба 1. Я тоже иногда ошибаюсь и передергиваю понятия. Однако при разделенных шинах команд и данных (в МК, как правило, это так) Мы будем иметь 10 команд PUSH и только 10 тактов на их выполнение, а Вас почему то 11. Неувязочка получилась. никакой неувязочки. в тех МК, в которых шина для внешней памяти наружу не выходит (или выходит редко, или архитектура закрытая) команд множественного сохранения обычно и не наблюдается. (AVR, MSP430, PIC`и всякие), ибо выигрыша по скорости не получается вовсе. а вот ядра ARM7/9, I80286 и выше обычно рассчитаны на жизнь с внешней памятью. посему минимум 1 такт придётся потратить на выборку этой команды. соответственно и все растактовки приведены для варианта с внешней памятью. и в этом случае эта команда ох как ускоряет работу. Именно. Я всегда считал, что одной из проблем регистровой архитектуры, несмотря на их шустрость (обработка 2 операндов за такт), являются накладные расходы на загрузку и выгрузку регистров при вызове процедуры. а тут вуаля - и вылазит такой чмыримый вами MSP430. :) нааааапример: нужно в прерывании инкрементировать 16-ти разрядный счётчик код типа // Timer A0 interrupt service routine. void timera_isr(void) __interrupt[TIMERA0_VECTOR] { time_counter++; } выливается в две команды: INC &time_counter RETI. никаких сохранений в стек, никаких доставаний из стека, никаких запоротых регистров. лепота. а потом удивляются, как это так - по оценкам он должен уступать древнему 8051, а он, засранец такой, ещё и выигрывает солидно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vitja 0 19 января, 2009 Опубликовано 19 января, 2009 · Жалоба vitja 1 смотрим результаты теста по switch/case по восьмиразрядной переменной. и опять у MSP430 выигрыш в 209/178 = 1.17 раза по объёму кода. неужто незаметно, что ваша оценка не то что бы хромает - она вообще в корне не верна! вы вообще сверялись с практическими данными? 2 что касается библиографических редкостей - у меня на столе лежит "MICROCOMPUTERS/MICROPROCESSORS hardware, software and applications" на русском. издана в 1979. оригинал аж 1976 года. ничего кроме "энтомологического" интереса " 1. Как только Вы взяли тест для 8-разрядных данных (что ближе к теме), то с 7.3 опустились до 1.17. Наверное можно найти еще какой-нибудь тест, где будет еще меньше. Но этого делать не будем по причине того, а) что единичные тесты не представительны. Выборка для оценки должна быть гораздо больше. б) что я оцениваю не конкретные М430, 8051 и пр. и никого не хочу обижать. Я на их примере оцениваю архитектуру системы команд - 0, 1, 2-адресной, переменной или фиксированной длины, регистровой, стековой или с командами память-память, я оцениваю в конечном счете влияние архитектурных особенностей системы команд на эффективность процессора. Пока все. 2. Об этом я уже писал. Описания, справочники, инструкции к программным системам, наверное, издавались и тогда. Я говорю о нетленке. Это Дейкстра, Бэкус, Кнут, Вирт, Хоар, Ритчи и др. А свою книгу убери со стола. Хотя возможно ее можно использовать как подставку или как крышку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 19 января, 2009 Опубликовано 19 января, 2009 · Жалоба никаких сохранений в стек, никаких доставаний из стека, никаких запоротых регистров. лепота. а потом удивляются, как это так - по оценкам он должен уступать древнему 8051, а он, засранец такой, ещё и выигрывает солидно. С 51-ым незнакомы?! :) У него будет ровно такой же код. Только адрес переменной ограничен 8 битами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vitja 0 19 января, 2009 Опубликовано 19 января, 2009 · Жалоба в МК, в которых шина для внешней памяти наружу не выходит выигрыша по скорости не получается вовсе. а вот ядра ARM7/9, I80286 и выше обычно рассчитаны на жизнь с внешней памятью. посему минимум 1 такт придётся потратить. вылазит MSP430. и выливается в две команды: INC &time_counter RETI. По первому договорились. Ты прав больше. Я имел в виду только МК (с внутренней память), а ты говоришь о более общем случае - использование процессором внешней памяти. По второму. Мне очень нравится система команд PDP 11 и ее развитие в М430. Своей концептуальностью, ортогональностью и даже "простотой", нет вывертов и ограничений, как у других. А пример дополнил бы - выливается в 2 команды, 6 байт и 6 тактов плюс еще такты на само прерывание. Если на один такт ошибся извини. Я бы тоже самое мог написать на 8051 (от ATMEL, в нем говорят байтовые команды выполняются за один такт). Получил бы те же команды, только байтов на 3 меньше, а тактов, наверное столько же. А может ну их эти байты. Будем писать все только на Си и закроем глаза на то, какой ущербный машинный код при этом получается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться