Где проходит граница между RISC и CISC?

Другие микроконтроллеры и микропроцессоры, не попавшие в предыдущие разделы

Moderator: Shaos

User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Где проходит граница между RISC и CISC?

Post by Lavr »

Lavr wrote:6502 - он более RISC-оватый как-бы!
Кто знает, насколько в принципе для RISC-процессоров справедлив вот такого типа постулат:
"...все основные операции выполняются преимущественно между регистрами,
загрузка значения из памяти и запись результата в память - операции, выполняемые
через привелегированный регистр...
"?

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

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

Несколько неприятное ограничение, но, на мой взгляд, весьма упрощает схемотехнику.
iLavr
vinxru
Retired
Posts: 587
Joined: 27 Mar 2013 04:55
Location: 62.192.229.16

Post by vinxru »

Упрощает схемотехнику и хоронит производительность.

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

LDA, LDX, LDY
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

vinxru wrote:Упрощает схемотехнику и хоронит производительность.
В 6502 кстати грузить из памяти можно в любой регистр, что положительно выделяет его перед 8080

LDA, LDX, LDY
Не соглашусь на повод производительности... если бы это было так однозначно -
давно бы сделали из этого практический вывод.

Что касается 6502, то регистров ОН у него всего-то раз, два и... три... :lol: :o
Что бы их не грузить?

А когда здоровенный файл РОН, что характерно для RISC-архитектуры, то
призадумаешься...
iLavr
vinxru
Retired
Posts: 587
Joined: 27 Mar 2013 04:55
Location: 62.192.229.16

Post by vinxru »

У ARM-а можно данные грузить в любой регистр
ldr рег, смещение

У AVR то же
ld рег, смещение

У x86 то же
mov рег, [смещение]

У PDP 11 то же
mov рег, смещение

А у упомянутого 8080
lda смещение
mov b, a
или
lxi h, смещение
mov b, m
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

vinxru wrote:А у упомянутого 8080
lda смещение
mov b, a
или
lxi h, смещение
mov b, m
Ну вот это и реализуется весьма просто аппаратно... об чем я и веду речь.

А упомянутый 8080 делают CISC-ом, собственно, инструкции, работающие
с псевдо-регистром М, как считается.
iLavr
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

vinxru wrote:У ARM-а можно данные грузить в любой регистр
ldr рег, смещение

У AVR то же
ld рег, смещение
У AVR только старшие 16, а младшие 16 нельзя.
vinxru
Retired
Posts: 587
Joined: 27 Mar 2013 04:55
Location: 62.192.229.16

Post by vinxru »

16 регистров для приема значений, это не 1. Это больше чем в x86, больше чем в 6502 :) На такое ограничение можно не обращать внимания.
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Обсуждение немного в сторону уехало, а я поинтересовался изначально:
Кто знает, насколько в принципе для RISC-процессоров справедлив вот такого типа постулат:
"...все основные операции выполняются преимущественно между регистрами,
загрузка значения из памяти и запись результата в память - операции, выполняемые
через привелегированный регистр...
"?
iLavr
vinxru
Retired
Posts: 587
Joined: 27 Mar 2013 04:55
Location: 62.192.229.16

Post by vinxru »

Я и сказал, что это не совсем так.

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

Это справедливо только для очень древних процессоров, типа 8080, которые RISC-ом не являются, так как содержат сложные команды на основе микрокода (PUSH, POP, LHLD, SHLD, XTHL...)

Правильнее:

- арифметические операции выполняются преимущественно между регистрами

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

- а в остальном максимальная ортогональность команд.
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

А как же "выполнение команд за нормированное минимальное время (1 такт например)" и "оверлап выполнения команд (сохранение результата команды N-1, выполнение команды N и загрузка команды N+1)"?
vinxru
Retired
Posts: 587
Joined: 27 Mar 2013 04:55
Location: 62.192.229.16

Post by vinxru »

ИМХО
- Конвеер сейчас есть во всех процессорах. Даже 286, 1801ВМ2 уже имеют конвеер в 2 команды.
- Любой процессор стремится выполнить команду за минимум тактов и тайминги известны.
- И наоборот, команды умножения в ARM-е работают значительно больше такта. И я подозреваю, что это микрокод.
vinxru
Retired
Posts: 587
Joined: 27 Mar 2013 04:55
Location: 62.192.229.16

Post by vinxru »

ИМХО основное отличие лагерей CISC и RISC в идеологии.

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

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

С этим борются, добавляя чуть чуть микрокода, еще одну (более компактную) систему команд.

CISC. Машинный код - надо максимально сжать. Для этого часто используемые последовательности команд объединить в одну команду. Ага, нужно считать CRC32, пожалуйста, вот вам команда crc32. Сочетания регистров, которые не используются (или есть альтернатива), выкинуть. Надо оставить минимальное кол-во способов сделать что-то. Например lodsb, losw, mul. Команды условного перехода в 99% случаев ограничиваются 128 байтами, значит ограничить смещение. Часто используемые команды должны иметь более короткие опкоды.

В общем CISC - это заархивирвоанный RISC. :) Часто встречающиеся команды в словарь. (Тем более, что внутри современных X86 сидит RISC)

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

Всё это работает быстро, но ждет кучу энергии.

В советском процессоре 1801ВМ1 микрокод (этот самый разархиватор) занимал почти половину площади кристалла. Но там перед инженерами стояла лишь одна цель, выполнять программы PDP11. Или расстрел :)) Их можно понять.
b2m
Devil
Posts: 907
Joined: 26 May 2003 06:57

Post by b2m »

vinxru wrote:В общем CISC - это заархивирвоанный RISC. :)
...
В советском процессоре 1801ВМ1 микрокод (этот самый разархиватор) занимал почти половину площади кристалла.
А мне кажется, что 1801ВМ1 гораздо ближе к RISC, чем к CISC:
- практически все регистры универсальные, даже стек
- методы адресации одинаковые для всех регистров
- система кодирования команд похожа на другие RISC-процессоры

Единственное, что не похоже: каждая команда выполняется за фиг-знает-какое количество тактов. От 8 до 50 и выше!
Видимо, сказывается отсутствие конвеера. Но даже ВМ2 и ВМ3, где он есть, не за один такт команды выполняют. Да и невозможно это с мультиплексируемой шиной адрес/данные.
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

А как же название? RISC - Restricted (Reduced) Instruction Set Computer (компьютер с сокращённым набором команд). CISC - Complex Instruction Set Computer (компьютер с комплексным набором команд). Т.е. если команд мало и они "одноклеточные" то это RISC. И наоборот.

Забавно, но есть еще MISC и URISC. И про последний тут уже обсуждалось: процессор с одной командой (частный случай URISC - OISC).
b2m
Devil
Posts: 907
Joined: 26 May 2003 06:57

Post by b2m »

Ну а четыре десятка команд (если не учитывать модификации для работы с байтом) - это Reduced? Сколько команд имеют современные RISC-процесоры?
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/