|
|
  |
Архитектрура системы команд 8-разрядного МК, Оценка/Анализ/Архитектура 8-32 разрядного МК |
|
|
|
Jan 19 2009, 13:14
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(vitja @ Jan 19 2009, 15:31)  AVR с ARMом в придачу выполняет команду за один такт/ Счет 6/1 в чью пользу? Шулерство чистой воды. 1) AVR != x51 2) тот же AVR имеет команды по 2, 3 и даже (о ужас!) 4 цикла. А мне вот в связи с банками и другой посудой вспомнилась такая фишка от Z80: там были 2 идентичных набора регистров (включая PC, SP, флаги и т.д.), которые переключались одной командой. То есть можно было реализовать много(двух)задачность, всего лишь выполняя эту команду по таймеру. Вот над чем бы подумать. Опять же в контексте многозадачных приложений. Ещё нынче в моде многоголовость. 8bit Dual (Quad) Core Microcontroller - по-моему, звучит!
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Jan 19 2009, 13:49
|
Местный
  
Группа: Свой
Сообщений: 322
Регистрация: 2-07-04
Из: Minsk
Пользователь №: 240

|
Цитата(vitja @ Jan 19 2009, 17:12)  Это приведено как пример того что даже ХХ86 не гнушался 8-разрядности и 8-разрядные МК рановато списывать в утиль ну и бред. 8-разрядная внешняя шина позволяла в те годы зверски уменьшить цену конечного изделия на этом процессоре, оставаясь в рамках 16-ти разрядной вычислительной мощности. откуда взялась связь с МК - неясно. Цитата(vitja @ Jan 19 2009, 17:12)  А про команду группового сохранения - это верно - сохранить 16 регистров во внутренней памяти быстрее не получается/плюс такт на команду Вопрос вот в чем - а нужна ли эта команда? не. разработчики ядра её так просто по приколу вставили. ага.  Цитата(vitja @ Jan 19 2009, 17:12)  Мультизадачность - для МК это экзотика/ да-да! и всякие табуны uCOS, eCOS, FreeFTOS, CTL и прочих многозадачных примочек - это всё из области экзотики и фантазии. конечно, раз этого не было в книжках двадцатилетней давности, то этого просто не может быть сейчас. Цитата(vitja @ Jan 19 2009, 17:12)  Далее задаем долю операций переключения контекста/ 1% мало - берем 2/ В результате мы сэкономили на этой команде в объеме кода 0.32% В тактах не выиграли ничего/ Зато усложнили аппаратуру/ Ради чего ой жжошь! "1% мало - берём 2" а почему не 5 ? почему не 10? а в военное время и до 80 может подскочить! а подумать, в какий процессорах есть команды такого типа, а в каких нет? и что даёт эта команда? а зачем такую команду ввели 80286 проц? а что она давала там?
|
|
|
|
|
Jan 19 2009, 13:54
|
Участник

Группа: Новичок
Сообщений: 61
Регистрация: 3-01-09
Пользователь №: 42 896

|
Цитата(MrYuran @ Jan 19 2009, 16:14)  Шулерство чистой воды. 1) AVR != x51
8bit Dual (Quad) Core Microcontroller - по-моему, звучит! Не AVR = x51 а объем кода М430 в 1.7 раза больше x51 AVR по моим расчетам уступает в объеме кода 8051 на 38%/ но по производительности опережает последний почти в два раза/ если оценивать такты 8051 не по оригиналу а по более современным моделям
|
|
|
|
|
Jan 19 2009, 14:25
|
Местный
  
Группа: Свой
Сообщений: 322
Регистрация: 2-07-04
Из: Minsk
Пользователь №: 240

|
Цитата(vitja @ Jan 19 2009, 17:54)  Не AVR = x51 а объем кода М430 в 1.7 раза больше x51 AVR по моим расчетам уступает в объеме кода 8051 на 38%/ но по производительности опережает последний почти в два раза/ если оценивать такты 8051 не по оригиналу а по более современным моделям не. ну какая настойчивость.  смотрим в книгу видим жопу. третий раз дают тебе ссылку: http://mcu.caxapa.ru/benchmarks/там, по практическим, а не чисто умозрительным, результатам видно, что объём кода у MSP430 меньше, чем у 8051. например, в самом ядрёном случае - арифметические операции с 16-ти разрядными матрицами имеем 825/112 - у MSP430 кода получается меньше в 7.3 раза! но раз факты опровергают теорию - от них надо избавиться?  не так ли? ощущение, что вы там ни разу в жизни не запускали ни один компилятор, ни разу в жизни не видели симулятора МК "В третей комнате Николай Степанович увидел отдел изучения меча Зигфрида. Самого меча пока не дастали, но отдел занимался изучением воображаемой модели. Воображаемый Нотунг помещали в магнитное поле, травили кислотами и испытывали на разрыв..." (С) М. Успенский, А. Лазарчук, "Посмотри в глаза чудовищ".
|
|
|
|
|
Jan 19 2009, 14:38
|
Участник

Группа: Новичок
Сообщений: 61
Регистрация: 3-01-09
Пользователь №: 42 896

|
Цитата(Mahagam @ Jan 19 2009, 16:49)  ну и бред. откуда взялась связь с МК - неясно.
разработчики AТMEL так просто по приколу вставили команду группового сохранения регистров/
жжошь! а зачем такую команду ввели 80286 проц? а что она давала там? Только как пример того/ что 16-разрядный процессор 8086 работал на 8-разрядной шине как и современные 8-разрядные МК/ Они приколись по полной - ввели команду группового восстановления регистров/ в 80286 эти команды ввели без приколов/ а по причине необходимости поддержки мультизадачности Типовой МК работает с таймером (1 обработчик прерывания) плюс интерфейсы (еще 1 или более обработчиков) В каждом из них сохраняют контекст одной или большим числом команд/ Доля этих команд в общем объеме кода программы минимальна и даже в военное время не превышает 2%/ Как сделать больше я не знаю / Научите
Сообщение отредактировал vitja - Jan 19 2009, 14:46
|
|
|
|
|
Jan 19 2009, 15:00
|
Местный
  
Группа: Свой
Сообщений: 322
Регистрация: 2-07-04
Из: Minsk
Пользователь №: 240

|
Цитата(vitja @ Jan 19 2009, 18:38)  Только как пример того/ что 16-разрядный процессор 8086 работал на 8-разрядной шине как и современные 8-разрядные МК/ да вы просто из страны эльфов! откуда вам знать какой разрядности и сколько шин внутрях у МК? это внешняя шина имеет ограничения по разрядности. что там внутрях - известно только производителям. внутрях кристалла к ядру может подходить а) 8-ти разрядная шина команд б) 8-и разрядная шина данных из памяти в) 8-и разрядная шина данных для записи в память. в итоге за 1 такт мы а) читаем команду б) получаем данные из памяти в) пишем результат предыдущих вычислений в память. МК остаётся 8-и разрядным. но эти его 8 разрядов ничего общего с внешними 8-ю разрядами 8086 не имеют. ибо по внешней шине за 1 такт происходит только одна транзакция. Цитата(vitja @ Jan 19 2009, 18:38)  Они возможно по приколу/ а в 80286 по причине необходимости поддержки мультизадачности это вы высосали из пальца. что бы вы не сосали что-нибудь ещё, приведу пример. пример прост: имеем понятное ограничение - одно обращение к памяти за такт (память - внешняя). имеем задачу - сохранить в стеке 10 регистров вариант а) 10 раз мы читаем команду PUSH, 10 раз пишем в стек. итого 10 байт кода, 20 обращений к памяти вариант б) 1 раз прочитали PUSHALL, 10 раз записали в стек. итого - 1 байт кода, 11 обращений к памяти. эффективно? безусловно. но эта команда становится эффективной по скорости только в случае если данные и команды лежат в одной физической памяти. в случае с МК это уже не так критично. Цитата(vitja @ Jan 19 2009, 18:38)  Типовой МК работает с таймером (1 обработчик прерывания) плюс интерфейсы (еще 1 или более обработчиков) В каждом из них сохраняют контекст одной или большим числом команд/ Доля этих команд в общем объеме кода программы минимальна и даже в военное время не превышает 2%/ Как сделать больше я не знаю / Научите а если на процессор валятся 20000 прерываний в секунду? если он из одного прерывания еле успевает переползать в обработчик следущего? есть ли смысл оптимизировать ядро для быстрого сохранения/восстановления контекста? ARM7 умеет сохранять в стек одной командой произвольные регистры, что не только полезно в обработчике прерываний, но и просто при вызове функций.
|
|
|
|
|
Jan 19 2009, 15:15
|
Участник

Группа: Новичок
Сообщений: 61
Регистрация: 3-01-09
Пользователь №: 42 896

|
Цитата(Mahagam @ Jan 19 2009, 17:25)  1 ////ну какая настойчивость. смотрим в книгу видим жопу. 2/// там, по практическим, а не чисто умозрительным, результатам видно, что оарифметические операции с 16-ти разрядными матрицами имеем 825/112 - у MSP430 кода получается меньше в 7.3 раза! 1/ У Чехова в записках станционного смотрителя - написано не так "смотрю в книгу, а вижу фигу"/ Однако это было написано в прошлом веке/ интернета тогда не было/ а книга даже 81 года для Вас это библиографическая редкость /Вы только Wiki читаете - кладезь Ваших знаний 2/ Сравнение проводилось на не вычислительных задачах обработки 8-разрядных данных поэтому такие результаты// И вообще сравнение проводилось не ради сравнения/ а ради выявления и оценки влияния архитектурных особенностей системы команд 8-разрядного МК на затраты кода и тактов на реализацию операторов ЯВУ по весу их употребления в типовых программах // в конце позволю себе пофантазировать Сейчас есть мониторы/ 3D графика/ Inet с его анонимностью/ Но вдруг появились теле-мониторы не с графикой а с материальной передачей информации Сидишь себе за таким теле-монитором (чатишься)/ а тут тебе в ответ не словом/ а /// та так что чатится уже не захочется Однако я бы бросил перчатку/ а результат - как у Черной речки / это там в 600-стах километрах от Москвы
|
|
|
|
|
Jan 19 2009, 18:02
|
Участник

Группа: Новичок
Сообщений: 61
Регистрация: 3-01-09
Пользователь №: 42 896

|
Цитата(Mahagam @ Jan 19 2009, 18:00)  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.
Сообщение отредактировал vitja - Jan 19 2009, 18:03
|
|
|
|
|
Jan 19 2009, 18:30
|
Местный
  
Группа: Свой
Сообщений: 322
Регистрация: 2-07-04
Из: Minsk
Пользователь №: 240

|
Цитата(vitja @ Jan 19 2009, 22:02)  1. Я тоже иногда ошибаюсь и передергиваю понятия. Однако при разделенных шинах команд и данных (в МК, как правило, это так) Мы будем иметь 10 команд PUSH и только 10 тактов на их выполнение, а Вас почему то 11. Неувязочка получилась. никакой неувязочки. в тех МК, в которых шина для внешней памяти наружу не выходит (или выходит редко, или архитектура закрытая) команд множественного сохранения обычно и не наблюдается. (AVR, MSP430, PIC`и всякие), ибо выигрыша по скорости не получается вовсе. а вот ядра ARM7/9, I80286 и выше обычно рассчитаны на жизнь с внешней памятью. посему минимум 1 такт придётся потратить на выборку этой команды. соответственно и все растактовки приведены для варианта с внешней памятью. и в этом случае эта команда ох как ускоряет работу. Цитата(vitja @ Jan 19 2009, 22:02)  Именно. Я всегда считал, что одной из проблем регистровой архитектуры, несмотря на их шустрость (обработка 2 операндов за такт), являются накладные расходы на загрузку и выгрузку регистров при вызове процедуры. а тут вуаля - и вылазит такой чмыримый вами MSP430.  нааааапример: нужно в прерывании инкрементировать 16-ти разрядный счётчик код типа // Timer A0 interrupt service routine. void timera_isr(void) __interrupt[TIMERA0_VECTOR] { time_counter++; } выливается в две команды: INC &time_counter RETI. никаких сохранений в стек, никаких доставаний из стека, никаких запоротых регистров. лепота. а потом удивляются, как это так - по оценкам он должен уступать древнему 8051, а он, засранец такой, ещё и выигрывает солидно.
|
|
|
|
|
Jan 19 2009, 18:54
|
Участник

Группа: Новичок
Сообщений: 61
Регистрация: 3-01-09
Пользователь №: 42 896

|
Цитата(Mahagam @ Jan 19 2009, 18:58)  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. Об этом я уже писал. Описания, справочники, инструкции к программным системам, наверное, издавались и тогда. Я говорю о нетленке. Это Дейкстра, Бэкус, Кнут, Вирт, Хоар, Ритчи и др. А свою книгу убери со стола. Хотя возможно ее можно использовать как подставку или как крышку.
|
|
|
|
|
Jan 19 2009, 19:22
|
Участник

Группа: Новичок
Сообщений: 61
Регистрация: 3-01-09
Пользователь №: 42 896

|
Цитата(Mahagam @ Jan 19 2009, 21:30)  в МК, в которых шина для внешней памяти наружу не выходит выигрыша по скорости не получается вовсе. а вот ядра ARM7/9, I80286 и выше обычно рассчитаны на жизнь с внешней памятью. посему минимум 1 такт придётся потратить.
вылазит MSP430. и выливается в две команды: INC &time_counter RETI. По первому договорились. Ты прав больше. Я имел в виду только МК (с внутренней память), а ты говоришь о более общем случае - использование процессором внешней памяти. По второму. Мне очень нравится система команд PDP 11 и ее развитие в М430. Своей концептуальностью, ортогональностью и даже "простотой", нет вывертов и ограничений, как у других. А пример дополнил бы - выливается в 2 команды, 6 байт и 6 тактов плюс еще такты на само прерывание. Если на один такт ошибся извини. Я бы тоже самое мог написать на 8051 (от ATMEL, в нем говорят байтовые команды выполняются за один такт). Получил бы те же команды, только байтов на 3 меньше, а тактов, наверное столько же. А может ну их эти байты. Будем писать все только на Си и закроем глаза на то, какой ущербный машинный код при этом получается.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|