Size: a a a

Compiler Development

2020 February 04

TS

Timur Safin in Compiler Development
Peter Sovietov
А как же этот процесс называть? :)
да, это называется macro-fuse. Но если такое делается в процессоре это не превращает его в CISC. (такое делается не только в x86 но и в классических RISC) https://en.wikichip.org/wiki/macro-operation_fusion
источник

PS

Peter Sovietov in Compiler Development
Тут, чтобы не запутаться, нужно различать слияние микроопераций и слияние макроопераций. В современных процессорах от Intel делается и то, и другое. И я утверждаю, что микроархитектурно эти процессоры мало смахивают на RISC-процессоры. Ведь micro-op fusion подразумевает, что на нижнем уровне выполняются, все-таки, CISC-подобные операции.
источник

PS

Peter Sovietov in Compiler Development
Собственно, в классическом RISC-процессоре вообще не должно было быть каких-то сложных декодеров/трансляторов. Классический RISC — результат компромиссов по совместному упрощению как микроархитектуры, так и компилятора.
источник

TS

Timur Safin in Compiler Development
Arm supports a number of macro-op fusion operations in their recent microarchitectures.

   movw + movt
   aese + aesmc
   aesd + aesimc
источник

PS

Peter Sovietov in Compiler Development
Timur Safin
Arm supports a number of macro-op fusion operations in their recent microarchitectures.

   movw + movt
   aese + aesmc
   aesd + aesimc
Да, но это макроуровень. А есть еще микро-слияние :) Я выше сам запутал ситуацию — написал про макро.
источник

TS

Timur Safin in Compiler Development
сейчас нет классических RISC уже почти нигде (может MIPS?)
источник

PS

Peter Sovietov in Compiler Development
Timur Safin
сейчас нет классических RISC уже почти нигде (может MIPS?)
А как же RISC-V?
источник

TS

Timur Safin in Compiler Development
про макро слияния я и говорил. И у RISC-V он есть. И (кажется) что любое нетривиальное усложнение декодера в ту или другую сторону (сложные на простые, простые на сложные) делает процессор не RISC.
источник

PS

Peter Sovietov in Compiler Development
Timur Safin
про макро слияния я и говорил. И у RISC-V он есть. И (кажется) что любое нетривиальное усложнение декодера в ту или другую сторону (сложные на простые, простые на сложные) делает процессор не RISC.
А я говорил про CISC-like uops :)

Вообще, тут должно быть очевидно, что CISC вовсе не устарел. Естественно, возникает вопрос — зачем тогда городить трансляцию CISC -> RISC -> CISC' в процессоре. А дело в том, что эффективность использования конкретных CISC-команд сильно зависит от возможностей техпроцесса и подобных вещей. Поэтому эти CISC-uops могут иметь различную форму в разных поколениях процессоров. Тут та же ситуация, что и с VLIW. Микроархитектурно процессор напоминает VLIW (множество параллельно выполняемых ФУ) и CISC (специализированные сложные, многовходовые операции), но все это абстрагировано, скрыто от разработчика с помощью сложных планировщиков/декодеров.
источник

KR

K R in Compiler Development
Peter Sovietov
А я говорил про CISC-like uops :)

Вообще, тут должно быть очевидно, что CISC вовсе не устарел. Естественно, возникает вопрос — зачем тогда городить трансляцию CISC -> RISC -> CISC' в процессоре. А дело в том, что эффективность использования конкретных CISC-команд сильно зависит от возможностей техпроцесса и подобных вещей. Поэтому эти CISC-uops могут иметь различную форму в разных поколениях процессоров. Тут та же ситуация, что и с VLIW. Микроархитектурно процессор напоминает VLIW (множество параллельно выполняемых ФУ) и CISC (специализированные сложные, многовходовые операции), но все это абстрагировано, скрыто от разработчика с помощью сложных планировщиков/декодеров.
И регулярно течёт :-)
источник

KR

K R in Compiler Development
Peter Sovietov
А я говорил про CISC-like uops :)

Вообще, тут должно быть очевидно, что CISC вовсе не устарел. Естественно, возникает вопрос — зачем тогда городить трансляцию CISC -> RISC -> CISC' в процессоре. А дело в том, что эффективность использования конкретных CISC-команд сильно зависит от возможностей техпроцесса и подобных вещей. Поэтому эти CISC-uops могут иметь различную форму в разных поколениях процессоров. Тут та же ситуация, что и с VLIW. Микроархитектурно процессор напоминает VLIW (множество параллельно выполняемых ФУ) и CISC (специализированные сложные, многовходовые операции), но все это абстрагировано, скрыто от разработчика с помощью сложных планировщиков/декодеров.
А есть попытки разработки нового набора инструкций CISC под современные серверные реалии? Ну типа на замену процессорам Xeon?

Вот про новый RISC все знают.
источник

FO

FORTRAN ONE LOVE in Compiler Development
K R
А есть попытки разработки нового набора инструкций CISC под современные серверные реалии? Ну типа на замену процессорам Xeon?

Вот про новый RISC все знают.
итаниум не прокатил (
источник

KR

K R in Compiler Development
FORTRAN ONE LOVE
итаниум не прокатил (
Это Vliw.

Кроме того, старые процессоростроители - народ дикий: зачем-то закрывали кодогенераторы.

Хотя по-идее, с компилятоостроителями они должны просто носиться, как курица с яйцом.

К Эльбрусовцам это, кстати, тоже относится .
источник

PS

Peter Sovietov in Compiler Development
K R
А есть попытки разработки нового набора инструкций CISC под современные серверные реалии? Ну типа на замену процессорам Xeon?

Вот про новый RISC все знают.
Старые CISC-наборы команд создавались для упрощения ручного кодирования и поддержки конкретных ЯВУ. Современные же CISC-решения хороши там, где быстродействия/энергоэффективности RISC не хватает. Ведь выгоднее сделать 3-5 легких операции за такт и обойтись тем самым без накладных расходов по декодированию, обращению к регистровому файлу.

Но все это, повторюсь, сильно зависит от возможностей конкретного техпроцесса. В этом и проблема — для серверов невыгодно делать короткоживущий CISC-процессор, систему команд которого придется каждый раз изменять в соответствии с тенденциями в микроэлектронике.   Другое дело — мобильные вычисления, там специализированные (звук, видео, криптография, разбор сетевых пакетов...) VLIW-, и CISC-ядра вовсю сегодня используются.
источник

KR

K R in Compiler Development
Peter Sovietov
Старые CISC-наборы команд создавались для упрощения ручного кодирования и поддержки конкретных ЯВУ. Современные же CISC-решения хороши там, где быстродействия/энергоэффективности RISC не хватает. Ведь выгоднее сделать 3-5 легких операции за такт и обойтись тем самым без накладных расходов по декодированию, обращению к регистровому файлу.

Но все это, повторюсь, сильно зависит от возможностей конкретного техпроцесса. В этом и проблема — для серверов невыгодно делать короткоживущий CISC-процессор, систему команд которого придется каждый раз изменять в соответствии с тенденциями в микроэлектронике.   Другое дело — мобильные вычисления, там специализированные (звук, видео, криптография, разбор сетевых пакетов...) VLIW-, и CISC-ядра вовсю сегодня используются.
Спасибо.
источник

MO

Mar Ort in Compiler Development
K R
Это Vliw.

Кроме того, старые процессоростроители - народ дикий: зачем-то закрывали кодогенераторы.

Хотя по-идее, с компилятоостроителями они должны просто носиться, как курица с яйцом.

К Эльбрусовцам это, кстати, тоже относится .
Эльбрусовцы то может и не против открыть свой компилятор, тут вопрос в другом
источник

PS

Peter Sovietov in Compiler Development
А какой, собственно, открытости не хватает в Эльбрусе? Несколько лет назад вышел учебник, где достаточно подробно микроархитектура Эльбруса описана.

http://www.mcst.ru/doc/book_121130.pdf
источник

MO

Mar Ort in Compiler Development
Peter Sovietov
А какой, собственно, открытости не хватает в Эльбрусе? Несколько лет назад вышел учебник, где достаточно подробно микроархитектура Эльбруса описана.

http://www.mcst.ru/doc/book_121130.pdf
Энкодингов команд как минимум
источник

KR

K R in Compiler Development
Peter Sovietov
А какой, собственно, открытости не хватает в Эльбрусе? Несколько лет назад вышел учебник, где достаточно подробно микроархитектура Эльбруса описана.

http://www.mcst.ru/doc/book_121130.pdf
«Делай как я» - reference backend.
источник

MO

Mar Ort in Compiler Development
Да и без железки написать компилятор не то, чтобы сильно просто
источник