Size: a a a

Compiler Development

2020 November 30

E

EgorBo in Compiler Development
мне кажется придет время и мы даже деление на константу будем убирать магические движения :)
источник

RE

Roman Elizarov in Compiler Development
Я вот еще поню время когда компиляторы это не делать не умели, а в процах не было аппаратного уножителя (умножение было медленное микропрограммным циклом в столибик). Приходилось такие штуки самому в source code делать.
источник

E

EgorBo in Compiler Development
источник

E

EgorBo in Compiler Development
поиск по "Optimize a single multiply with constant"
источник

RE

Roman Elizarov in Compiler Development
EgorBo
мне кажется придет время и мы даже деление на константу будем убирать магические движения :)
А есть свет в конце тоннеля? Я не слышал чтобы где-нибудь были быть хотя какие-то намеки на ускорение аппратного деления. Поэтому в алгоритмах до сих пор часто верный способ что-то радикально убыстрить (после того как проверил что алгоритм уже максимально ассимптотичеки эффективен и в память не упирается), так это придумать как от деления избавиться.
источник

E

EgorBo in Compiler Development
Roman Elizarov
А есть свет в конце тоннеля? Я не слышал чтобы где-нибудь были быть хотя какие-то намеки на ускорение аппратного деления. Поэтому в алгоритмах до сих пор часто верный способ что-то радикально убыстрить (после того как проверил что алгоритм уже максимально ассимптотичеки эффективен и в память не упирается), так это придумать как от деления избавиться.
ну со временем мб, в зен3 довольно быстрое уже
источник

M

MaxGraey in Compiler Development
Да там нужно смотреть в combineMul метод. Думаю там просто можно оттюнить какой то параметр только для x64 и тем самым уменьшить порог для lowering
источник

E

EgorBo in Compiler Development
не думаю что можно настроить как-либо кроме как указать minsize aka Oz
источник

M

MaxGraey in Compiler Development
Roman Elizarov
А есть свет в конце тоннеля? Я не слышал чтобы где-нибудь были быть хотя какие-то намеки на ускорение аппратного деления. Поэтому в алгоритмах до сих пор часто верный способ что-то радикально убыстрить (после того как проверил что алгоритм уже максимально ассимптотичеки эффективен и в память не упирается), так это придумать как от деления избавиться.
У Zen2 и Zen3 архитектуры используется новая схема. Я так думаю она чем то похожа на эту (только в аппаратном исполнении)
https://gmplib.org/~tege/division-paper.pdf
источник

E

EgorBo in Compiler Development
в доке сравнивается Core 2 vs AMD Opteron -_-
источник

M

MaxGraey in Compiler Development
EgorBo
не думаю что можно настроить как-либо кроме как указать minsize aka Oz
Ну там есть такая строчка:

// An imul is usually smaller than the alternative sequence.
if (DAG.getMachineFunction().getFunction().hasMinSize())
   return SDValue();
источник

E

EgorBo in Compiler Development
MaxGraey
Ну там есть такая строчка:

// An imul is usually smaller than the alternative sequence.
if (DAG.getMachineFunction().getFunction().hasMinSize())
   return SDValue();
ну это и есть атрбиут "minsize"
источник

E

EgorBo in Compiler Development
ты когда компилишь клангом с -Oz он всем ф-циям его дает
источник

M

MaxGraey in Compiler Development
EgorBo
в доке сравнивается Core 2 vs AMD Opteron -_-
Да то вообще софтварная реализация. И статья древняя
источник
2020 December 01

E

EgorBo in Compiler Development
А знаком тут кто с Kotlin-Native, мне интересно насколько они счастливы с ref-counted GC и как борятся с цикличными ссылками? А то вот тут смотрю https://github.com/JetBrains/kotlin-native/blob/master/runtime/src/main/kotlin/kotlin/native/internal/GC.kt#L11-L14 - это что, два гц по сути?
источник

M

MaxGraey in Compiler Development
EgorBo
А знаком тут кто с Kotlin-Native, мне интересно насколько они счастливы с ref-counted GC и как борятся с цикличными ссылками? А то вот тут смотрю https://github.com/JetBrains/kotlin-native/blob/master/runtime/src/main/kotlin/kotlin/native/internal/GC.kt#L11-L14 - это что, два гц по сути?
В AssemblyScript мы используем нечто похожее. Для всех не циклических ссылок используется ARC, для всех остальных обычный M&S GC. Детекция циклов происходит во время статического анализа и большинстве случаев рантайм для GC не вклячается вообще в сборку. Но мы собираемся от этого уходить, потому что сопровождать такой гибрид очень сложно маленькой командой
источник

E

EgorBo in Compiler Development
MaxGraey
В AssemblyScript мы используем нечто похожее. Для всех не циклических ссылок используется ARC, для всех остальных обычный M&S GC. Детекция циклов происходит во время статического анализа и большинстве случаев рантайм для GC не вклячается вообще в сборку. Но мы собираемся от этого уходить, потому что сопровождать такой гибрид очень сложно маленькой командой
а куда уходить?
источник

E

EgorBo in Compiler Development
я вижу браузеры ушли от реф-каунтед вообще
источник

M

MaxGraey in Compiler Development
EgorBo
я вижу браузеры ушли от реф-каунтед вообще
А когда это у них были счетчики?
источник

E

EgorBo in Compiler Development
MaxGraey
А когда это у них были счетчики?
мы вроде нагуглили и в фф и в ие до 8ой версии и в в8
источник