Size: a a a

Compiler Development

2020 February 29

PS

Peter Sovietov in Compiler Development
Я libfirm неоднократно использовал, остались самые положительные впечатления, например: https://cyberleninka.ru/article/n/iterativnyy-podhod-s-ispolzovaniem-kompilyatora-dlya-sinteza-i-modelirovaniya-problemno-orientirovannogo-nabora-komand
КиберЛенинка
Итеративный подход с использованием компилятора для синтеза и моделирования проблемно-ориентированного набора команд
Процессоры с проблемно-ориентированным набором команд (ASIP, application-specific instruction set processor) используются сегодня все более широко. Они применяются в таких, например, областях, как машинное обучение, обработка изображений и криптография. Благодаря специализации архитектуры для решения задач из узкой предметной области проблемно-ориентированные процессоры могут опережать процессоры общего назначения по таким, например, характеристикам, как энергоэффективность. При этом, благодаря свойству программируемости, проблемно-ориентированные процессоры могут оказаться предпочтительнее ASIC-решений. Важной задачей является достижение высокой скорости разработки проблемно-ориентированных наборов команд для решения задач из различных предметных областей. В статье предлагается итеративный подход к синтезу и моделированию проблемно-ориентированного набора команд на основе анализа графа зависимостей прикладной программы на уровне базового блока, а также с использованием набора архитектурных ограничений. Базовые…
источник

M

MaxGraey in Compiler Development
Peter Sovietov
Я был очень удивлен, когда прочел на HN следующее:

«> - IRs need to be intuitive to the people who work on the compiler. Sea of nodes is more challenging to think about than SSA over CFG.

I worked on V8 for awhile, which uses a sea of nodes representation. This point really resonates with me. I and many of my teammates never completely developed an intuition for the different edges in the graph. There was a lot of trial and error involved.
I remember reading this paper and thinking "wow! this is the solution to all the problems I never knew I had." The generality and simplicity of a single graph that does everything is appealing. But in practice, I think you'd most often be better with SSA over CFG.»
SoN действительно больше создает трудностей чем что то упрощает. Поэтому я пытаюсь сейчас реализовать другой подход на графах и без SSA формы
источник

PS

Peter Sovietov in Compiler Development
MaxGraey
SoN действительно больше создает трудностей чем что то упрощает. Поэтому я пытаюсь сейчас реализовать другой подход на графах и без SSA формы
Я в широком смысле под SoN понимаю семейство графовых IR с SSA. Не понимаю смысла отказываться в серьезном компиляторе как от графов, так и от свойства функциональности, то есть от SSA.
источник

M

MaxGraey in Compiler Development
Peter Sovietov
Я в широком смысле под SoN понимаю семейство графовых IR с SSA. Не понимаю смысла отказываться в серьезном компиляторе как от графов, так и от свойства функциональности, то есть от SSA.
Дело в том, что некоторые виды графов такие как Value State Dependence Graph использут SSA форму неявно и не нуждаются к какнонизации к ней, а потом еще каздый раз ренормализировать после трансформаций которые нарущают ее целостронсть - например слияние / разделение нод или регионов (в SoN это слияние/разделения базовых блоков)
источник

PS

Peter Sovietov in Compiler Development
MaxGraey
Дело в том, что некоторые виды графов такие как Value State Dependence Graph использут SSA форму неявно и не нуждаются к какнонизации к ней, а потом еще каздый раз ренормализировать после трансформаций которые нарущают ее целостронсть - например слияние / разделение нод или регионов (в SoN это слияние/разделения базовых блоков)
В целом чем отличается хорошее графовое представление? Тем, что мы можем получить максимум информации о конкретном узле, лишь исходя из его связей с другими узлами. И здесь SSA-представление необходимо, потому что без него у нас будут отдельные подграфы "висеть в воздухе", связи с между ними явно указаны уже не будут. А то, как именно происходит, например, слияние потоков управления — это уже детали. Где-то phi-функции, где-то блоки с параметрами, где-то узлы в духе VSDG...
источник

МБ

Михаил Бахтерев in Compiler Development
Peter Sovietov
Я ниже попытаюсь показать, почему исходный вопрос не очень корректен, поскольку может подразумевать слишком многое.

Исследователи занимались асинхронностью/распределенностью на разных масштабах. Фон Нейман с синхронными и асинхронными клеточными автоматами. Варшавский с "Коллективным поведением автоматов".

Тот же Варшавский был пионером в области цифровых асинхронных схем. Одна из известных (в узких кругах) его книг называется "Self-Timed Control of Concurrent Processes: The Design of Aperiodic Logical Circuits in Computers and Discrete Systems".

Укрупняем масштаб — возникают систолические массивы и массивы волнового фронта Куна. Причем, систолические массивы — с синхронным коллективным поведением, а wavefront arrays — асинхронные.

А с точки зрения формализма, акторы это не CSP Хоара, а CSP это не процессы Кана или сети Петри. Кроме того, отдельно стоят SDF-графы. которые сами по себе очень интересны, благодаря возможности эффективной компиляции/реализации в системах реального времени. В компиляторах с недавнего времени стало применяться представление PPN -- polyhedral process networks.

Далее -- потоковые машины и потоковые языки. Начиная с Карпа, Миллера, Сазерленда и Денниса... Можно продолжать и продолжать.
Но, ведь, доказывается, что акторы и CSP - это бисимуляция. А какие ещё есть варианты процессов?

Вроде как, есть же очень общая концепция структур событий, в которую вписывается всё, начиная от сетей Петри, заканчивая CSP и акторами. Потому что все они относятся к labelled transition systems, а различаются только алгебрами синхронизации. Как-то так.

А есть ли обзор по языкам с потоками данных?
источник

AT

Alexander Tchitchigin in Compiler Development
источник

Т8

Т-34 85 in Compiler Development
если взять код на C, но перед компиляцией прогонять парсером-генератором, который будет расставлять const над переменными с квалификатором по умолчанию (то есть, когда его нет), мы получим версию Си с иммутабельностью по умолчанию? Или тут есть какие-то проблемы?
источник

FO

FORTRAN ONE LOVE in Compiler Development
почему нельзя стразу писать const когда надо?
источник

Т8

Т-34 85 in Compiler Development
FORTRAN ONE LOVE
почему нельзя стразу писать const когда надо?
пушто  можно забыть/полениться
источник

SM

Sailor Moon in Compiler Development
Т-34 85
если взять код на C, но перед компиляцией прогонять парсером-генератором, который будет расставлять const над переменными с квалификатором по умолчанию (то есть, когда его нет), мы получим версию Си с иммутабельностью по умолчанию? Или тут есть какие-то проблемы?
вроде раст получим, нет?
источник

Т8

Т-34 85 in Compiler Development
Sailor Moon
вроде раст получим, нет?
нет, там отличий намного больше
источник

A

Alex in Compiler Development
Т-34 85
если взять код на C, но перед компиляцией прогонять парсером-генератором, который будет расставлять const над переменными с квалификатором по умолчанию (то есть, когда его нет), мы получим версию Си с иммутабельностью по умолчанию? Или тут есть какие-то проблемы?
Не надо так. Если хочется странного, то сделайте

#define int cost int
#define mute_int int
источник

A

Alex in Compiler Development
Но вообще сначала хотелось бы понять цель сего мероприятия
источник

SJ

Sergej Jaskiewicz in Compiler Development
Alex
Не надо так. Если хочется странного, то сделайте

#define int cost int
#define mute_int int
А не UB ли это?
источник

Т8

Т-34 85 in Compiler Development
Alex
Не надо так. Если хочется странного, то сделайте

#define int cost int
#define mute_int int
а если мне нужен не int, а MyClass?
источник

A

Alex in Compiler Development
На вскидку не помню есть ли явный запрет (возможно и есть), но что так что так ub с высокой вероятностью будет. Тут идея больше напоминает попытку техническим средствами решить нетехническую проблему
источник

Т8

Т-34 85 in Compiler Development
Alex
Но вообще сначала хотелось бы понять цель сего мероприятия
>мы получим версию Си с иммутабельностью по умолчанию
источник

A

Alex in Compiler Development
Зачем?
источник

DF

Dollar Føølish in Compiler Development
Using myclass = typename STD::remove_const_t<myclass>
источник