169 похожих чатов

Я, кстати, не понял, что именно считается "спекулятивной оптимизацией"? Inline

caches считаются? Девиртуализация + inline?

20 ответов

25 просмотров

ну видимо везде где может случится bailout откат

Alexander-Chichigin Автор вопроса
cevek
ну видимо везде где может случится bailout откат

В JS это везде. 🤣 При этом inline caches как раз не требуют прям отбрасывать скомпилированную функцию целиком. В то время как девиртуализация позволяет инлайн (не только в JS, но и в Java/C# и даже C++), а инлайн обеспечивает больше 50% ускорения среди вообще всех оптимизаций. Вот и как жить без этого? 😃

Alexander Chichigin
В JS это везде. 🤣 При этом inline caches как раз н...

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

Alexander-Chichigin Автор вопроса
cevek
ну вообще инлайн кеш это просто информация для спе...

Inline caches не имеют никакого отношения к code inlining optimisation. 😊

они хранят типы переменных и свойств которые приходят в рантайме и по ним уже можно думать как инлайнить

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

Alexander-Chichigin Автор вопроса
cevek
они хранят типы переменных и свойств которые прихо...

Это где так? Обычно inline cache — это просто такая vtable, и хранит указатели на функции...

Alexander-Chichigin Автор вопроса
でゲソ
ну там же вон статья выше про это есть. предполага...

С этим всё понятно. Непонятно, что происходит, если предположение оказалось не верным. 😊

Alexander-Chichigin Автор вопроса
cevek
ну я знаю только v8.

Вы, может быть, hidden classes имели в виду?

Alexander Chichigin
Вы, может быть, hidden classes имели в виду?

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

Alexander-Chichigin Автор вопроса
でゲソ
срабатывает деоптимизация, закономерно

Т.е. это была спекулятивная оптимизация. А мы опсуждаем тезис, что спекулятивные оптимизации не нужны. Вот у меня в голове это и не сращивается. 😊

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

Alexander-Chichigin Автор вопроса
でゲソ
а чем аргументы выше не подходят. котороые про то ...

> спекуляции не приносят профита, а только накладные расходы Какие именно из спекуляций? Как я уже писал, inlining приносит более 50% ускорения во всех компиляторах любых языков начиная с C и далее по списку. В ОО языках с виртуальными вызовами для эффективного инлайна нужна ещё девиртуализация — это делается начиная с C++, не говоря уже про JVM/CLR и JS — там в полный рост. Везде кроме C++ это спекулятивная оптимизация, и я не вижу за счёт чего и на каких задачах JS может работать быстрее без неё.

Alexander Chichigin
> спекуляции не приносят профита, а только накладн...

да проблема скорее всего в этих инлайнингах, которые деоптимизируются на каждый чих ну т е элементарно стоит передать вместо {a: 1, b: 2} -> {b: 2, a: 1} произойдется деоптимизиция потому что скрытый класс уже будет другой

Alexander Chichigin
> спекуляции не приносят профита, а только накладн...

пажжи, почему только в плюсах это спекулятивная оптимизация? всё что компиляется, особенно через шланг будет не спекулятивным, не?

cevek
да проблема скорее всего в этих инлайнингах, котор...

ну или там опциональные поля в объектах, там уже это вообще никогда не заоптимизировать

Alexander-Chichigin Автор вопроса
でゲソ
пажжи, почему только в плюсах это спекулятивная оп...

Только в плюсах это НЕ спекулятивная, а консервативная, очевидно, оттого, что AOT, а не JIT.

Похожие вопросы

Обсуждают сегодня

@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Подобного рода ;Следующие три строки это директивы ассемблера, ;которые можно не задавать, т.к.работаем в Visual Studio. ;Символ ";" - это начало однострочного комментария ...
Егор Анелькин
3
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
еще вопрос, допустим мы создадим char массив из 10 элементов и присвоим ему через сканф 10 символов. и выведем все символы. Хотел спросить последний элемент /0 будет включать...
Anthem
11
открыть папку в проводнике: 1 - ShellExecute 2 - ExecuteProcess 3 - OpenDocument что лучше выбрать?
Alexey Kulakov
12
Изменение типа с SomeException на String и правда удобней @cheese_hs . А вот такой вариант насколько некрасив еще? loadConfigDB :: IO (Either String ConfigDataBase) loadConfi...
Camara
7
Где в Астане можно купить мясо для шашлыков?
Dancing Іңұқәһүғө
21
Карта сайта