Size: a a a

Compiler Development

2021 January 04

AT

Alexander Tchitchigi... in Compiler Development
Defragmented Panda
допустим пример типа 2*5+7*5+7*3+8*5... который требует больше памяти чем доступно регистров

как можно автоматизировать выделение памяти для решения этого примера?
А что Вы вообще знаете про распределение регистров? 😊
источник

DP

Defragmented Panda in Compiler Development
Alexander Tchitchigin
А что Вы вообще знаете про распределение регистров? 😊
что операции с памятью напрямую или вообще невозможны или значительно медленнее
источник

AT

Alexander Tchitchigi... in Compiler Development
Defragmented Panda
допустим пример типа 2*5+7*5+7*3+8*5... который требует больше памяти чем доступно регистров

как можно автоматизировать выделение памяти для решения этого примера?
Это не говоря уже о том, что данный пример требует 0 регистров (1 регистр как максимум), потому что сворачивается в константу в процессе компиляции. 😄
источник

DP

Defragmented Panda in Compiler Development
Alexander Tchitchigin
Это не говоря уже о том, что данный пример требует 0 регистров (1 регистр как максимум), потому что сворачивается в константу в процессе компиляции. 😄
подставь переменные на место констант
источник

AT

Alexander Tchitchigi... in Compiler Development
Defragmented Panda
что операции с памятью напрямую или вообще невозможны или значительно медленнее
Допустим, с памятью всё понятно, я спросил, что Вы знаете про распределение регистров (в процессе компиляции)?
источник

AT

Alexander Tchitchigi... in Compiler Development
Ну и где Вы думаете располагается стек? В пятом измерении? Если работа с памятью для Вас медленная -- стек тем более не подойдёт.
источник

AT

Alexander Tchitchigi... in Compiler Development
Но я сильно подозреваю, что работа с памятью на микроконтроллерах "быстрая" просто потому что процессор всё равно медленный.
источник

DP

Defragmented Panda in Compiler Development
Alexander Tchitchigin
Допустим, с памятью всё понятно, я спросил, что Вы знаете про распределение регистров (в процессе компиляции)?
количество регистров фиксировано в железе. и мы не можем выделить "еще"

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

DP

Defragmented Panda in Compiler Development
Alexander Tchitchigin
Ну и где Вы думаете располагается стек? В пятом измерении? Если работа с памятью для Вас медленная -- стек тем более не подойдёт.
стек это просто кусок памяти. но указатель на стек - один из регистров процессора и быстрые операции с этим указателем полезны
источник

A

Arelav in Compiler Development
Berkus Decker
В гцц это глупый воркэраунд для инлайн асма
Почему глупый? Как по другому можно сделать?
источник

DP

Defragmented Panda in Compiler Development
Arelav
Почему глупый? Как по другому можно сделать?
глупый потому что асм абстракция не обязательна

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

A

Arelav in Compiler Development
Defragmented Panda
глупый потому что асм абстракция не обязательна

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

AT

Alexander Tchitchigi... in Compiler Development
Defragmented Panda
количество регистров фиксировано в железе. и мы не можем выделить "еще"

мы используем имеющиеся, резервируя регистры под аргументы операции, счетчики, указатели, константы для сравнения, которые в данном участке кода предполагается часто менять или читать
Можем выделить ещё регистров -- смотрите register spilling! 😂 Там рядом наконец-то и алгоритмы распределения регистров найдёте.
источник

DP

Defragmented Panda in Compiler Development
Arelav
Мм ну возможно, а есть примеры? Это нужно было кучу всего придумать наверно
у меня нет норм примеров, сам ищу такое )

немного похожий пример - форт, для варианта где вершина стека лежит в регистрах. там операции на вершине стека более частые и быстрее потому что лежат в регистрах
источник

AT

Alexander Tchitchigi... in Compiler Development
Defragmented Panda
стек это просто кусок памяти. но указатель на стек - один из регистров процессора и быстрые операции с этим указателем полезны
С указателем на стек производится ровно 2 операции: сложение и вычитание. Это ничем не ускоряет работу с содержимым стека.
источник

DP

Defragmented Panda in Compiler Development
Alexander Tchitchigin
С указателем на стек производится ровно 2 операции: сложение и вычитание. Это ничем не ускоряет работу с содержимым стека.
я так понимаю около половины операций меняет указатель на стек. т.е. ускорение таки есть если указатель на стек всегда в регистрах )

потому что в половине случаев работа с содержимым стека = изменение указателя на стек
источник

BD

Berkus Decker in Compiler Development
Arelav
Почему глупый? Как по другому можно сделать?
парсить инлайн асм в нормальный MCInst и дальше генерировать уже как положено
источник

BD

Berkus Decker in Compiler Development
Defragmented Panda
я так понимаю около половины операций меняет указатель на стек. т.е. ускорение таки есть если указатель на стек всегда в регистрах )

потому что в половине случаев работа с содержимым стека = изменение указателя на стек
указатель на стек меняют ровно 4 операции - push, pop, call и ret
источник

А⚙

Антон ⚙️ in Compiler Development
Iaroslav Postovalov
оба. если прям все языки брать и все компиляторы, то ллвм будет иметь не очень большую долю (и он далеко не всегда нужен! например, в джулии его притащили зря). ну и ассемблер ему не нужно собирать
Так, так, а почему в Julia зря затащили LLVM?
источник

A

Arelav in Compiler Development
Berkus Decker
парсить инлайн асм в нормальный MCInst и дальше генерировать уже как положено
А так можно?
источник