Re[26]: О виртуальных машинах и процессорах
От: Sinclair Россия https://github.com/evilguest/
Дата: 19.02.07 07:13
Оценка:
Здравствуйте, EvilChild, Вы писали:

EC>Так тривиальные get/set инлайнятся даже в отладочной сборке в .NET (пару раз обламывался в дебаггере) — JVM не инлайнит такое?

Даже виртуальные? Прикол именно в том, что HotSpot может частично либо полностью устранять виртуальность, основываясь на спекулятивных предположениях. На практике это означает отсутствие abstraction penalty и возможность обойтись без архитектурно корявых залепух навроде намеренно невиртуальных методов и публикации полей вместо свойств.
1.2.0 alpha rev. 655
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[27]: О виртуальных машинах и процессорах
От: EvilChild Ниоткуда  
Дата: 19.02.07 07:40
Оценка:
Здравствуйте, Sinclair, Вы писали:

EC>>Так тривиальные get/set инлайнятся даже в отладочной сборке в .NET (пару раз обламывался в дебаггере) — JVM не инлайнит такое?

S>Даже виртуальные? Прикол именно в том, что HotSpot может частично либо полностью устранять виртуальность, основываясь на спекулятивных предположениях. На практике это означает отсутствие abstraction penalty и возможность обойтись без архитектурно корявых залепух навроде намеренно невиртуальных методов и публикации полей вместо свойств.

Насчёт виртуальных не знаю, но теоретических препятствий этому не вижу.
now playing: Teebee — Black Mind
Re[28]: О виртуальных машинах и процессорах
От: Cyberax Марс  
Дата: 19.02.07 08:05
Оценка:
EvilChild wrote:
> S>Даже виртуальные? Прикол именно в том, что HotSpot может частично либо
> полностью устранять виртуальность, основываясь на спекулятивных
> предположениях. На практике это означает отсутствие abstraction penalty
> и возможность обойтись без архитектурно корявых залепух навроде
> намеренно невиртуальных методов и публикации полей вместо свойств.
> Насчёт виртуальных не знаю, но теоретических препятствий этому не вижу.
И как ты это собираешься делать без HotSpot?
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[29]: О виртуальных машинах и процессорах
От: EvilChild Ниоткуда  
Дата: 19.02.07 08:39
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>И как ты это собираешься делать без HotSpot?

Не совсем понял твой вопрос.
По моему у CLR есть достаточно информации, чтобы устранять виртуальность там, где это возможно и откатывать эту оптимизацию, когда она становится невалидной (загрузили тип, где эта функция overriden).
Или ты о том, что это и будет HotSpot?
Если да, то пожалуйста — мне всё равно как это называется.
now playing: Phace — Move Right
Re[30]: О виртуальных машинах и процессорах
От: Cyberax Марс  
Дата: 19.02.07 08:53
Оценка:
EvilChild wrote:
> C>И как ты это собираешься делать без HotSpot?
> Не совсем понял твой вопрос.
> По моему у CLR есть достаточно информации, чтобы устранять виртуальность
> там, где это возможно и откатывать эту оптимизацию, когда она становится
> невалидной (загрузили тип, где эта функция overriden).
> Или ты о том, что это и будет HotSpot?
Да, именно это и будет HotSpot.

Но смысл в том, что сейчас .NET VM не выполняет перекомпиляцию кода.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[29]: О виртуальных машинах и процессорах
От: Sinclair Россия https://github.com/evilguest/
Дата: 19.02.07 09:47
Оценка:
Здравствуйте, Cyberax, Вы писали:
C>И как ты это собираешься делать без HotSpot?
Ну разве что при помощи PGO. Без profile-time информации совершенно нереально выбрать одну из перегруженных версий виртуального метода для инлайнинга. Либо я не понимаю чего-то элементарного.
1.2.0 alpha rev. 655
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[30]: О виртуальных машинах и процессорах
От: Cyberax Марс  
Дата: 19.02.07 14:44
Оценка:
Sinclair wrote:
> C>И как ты это собираешься делать без HotSpot?
> Ну разве что при помощи PGO. Без profile-time информации совершенно
> нереально выбрать одну из перегруженных версий виртуального метода для
> инлайнинга. Либо я не понимаю чего-то элементарного.
Ну PGO — это тоже своеобразный HotSpot

Самое плохое в том, что PGO не работает с динамической подгрузкой кода.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[29]: О виртуальных машинах и процессорах
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 19.02.07 16:15
Оценка:
Здравствуйте, VladD2, Вы писали:

AVK>>Смысл? Рантайм то тот же.


VD>Не тот же делегаты похоже ускорились.


fc /b вам в руки.
... << RSDN@Home 1.2.0 alpha rev. 675>>
AVK Blog
Re[30]: О виртуальных машинах и процессорах
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.02.07 19:00
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>fc /b вам в руки.


И где я тебе найду разные версии? Да и суров ты. Я уж лучше какой-нить гуёвой утилитой воспльзуюсь (которая сможет сравнить сразу подкаталоги).
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[25]: О виртуальных машинах и процессорах
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.02.07 19:00
Оценка:
Здравствуйте, IT, Вы писали:

IT>Это действительно так. Особенно сильно вырывается вперёд серверный вариант. Это заметно даже по шустрикам на нашем сайте.


В серверном варианте просто доругой ЖЦ. К скорости кода это отношение не имеет. У дотента тоже разный ЖЦ и сравнивать тут так просто нельзя.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[26]: О виртуальных машинах и процессорах
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.02.07 19:00
Оценка:
Здравствуйте, EvilChild, Вы писали:

EC>Так тривиальные get/set инлайнятся даже в отладочной сборке в .NET (пару раз обламывался в дебаггере) — JVM не инлайнит такое?


Вот такого не происходит. За-то в релизе почти всегда.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[27]: О виртуальных машинах и процессорах
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.02.07 19:00
Оценка:
Здравствуйте, Sinclair, Вы писали:

EC>>Так тривиальные get/set инлайнятся даже в отладочной сборке в .NET (пару раз обламывался в дебаггере) — JVM не инлайнит такое?

S>Даже виртуальные? Прикол именно в том, что HotSpot может ...

На словах он могое может. На деле — нет.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[31]: О виртуальных машинах и процессорах
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.02.07 19:00
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Да, именно это и будет HotSpot.


Вообще-то HotSpot — это торговая марка. И больше ничего.

C>Но смысл в том, что сейчас .NET VM не выполняет перекомпиляцию кода.


Это да. Но если начнет это делать, то все равно HotSpot-ом не станет.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[30]: О виртуальных машинах и процессорах
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.02.07 19:00
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Ну разве что при помощи PGO. Без profile-time информации совершенно нереально выбрать одну из перегруженных версий виртуального метода для инлайнинга. Либо я не понимаю чего-то элементарного.


На самом деле во многих случаях было бы достаточно анализа потока управления. Ведь часто виртуальные методы и нитерфейсы применяются локально и можно проследить использование этой переменной. Если во время ее использования не делается ни одного изменения ссылки или все изменения делаются на тот же тип объектов, то можно смело создавать специализированную версию фукнции которой передается интерфейс (или класса) и устанять в ней как виртуальность, так и сам вызов. Учитывая, что это можно сделать во время пред-компиляции особых ресурсов (кроме некоторого увеличения расхода памяти под образ кода) тратить не приется, можно говорить о хорошем выигрыше.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[27]: О виртуальных машинах и процессорах
От: EvilChild Ниоткуда  
Дата: 19.02.07 19:52
Оценка:
Здравствуйте, VladD2, Вы писали:

EC>>Так тривиальные get/set инлайнятся даже в отладочной сборке в .NET (пару раз обламывался в дебаггере) — JVM не инлайнит такое?


VD>Вот такого не происходит. За-то в релизе почти всегда.


Как-то студия отказалась ставить бряку в теле тривиального сеттера (или геттера) в отладочной версии и сказала, что метод был оптимизирован, вот я и подумал, что инлайнинг случился. Если это не инлайнинг, то что тогда?
now playing: Noisia — Desolation
Re[28]: О виртуальных машинах и процессорах
От: IT Россия linq2db.com
Дата: 19.02.07 20:50
Оценка: +1
Здравствуйте, EvilChild, Вы писали:

VD>>Вот такого не происходит. За-то в релизе почти всегда.


EC>Как-то студия отказалась ставить бряку в теле тривиального сеттера (или геттера) в отладочной версии и сказала, что метод был оптимизирован, вот я и подумал, что инлайнинг случился. Если это не инлайнинг, то что тогда?


Может ты релиз пытался отлаживать?
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[32]: О виртуальных машинах и процессорах
От: Cyberax Марс  
Дата: 19.02.07 21:00
Оценка:
VladD2 wrote:
> C>Да, именно это и будет HotSpot.
> Вообще-то HotSpot — это торговая марка. И больше ничего.
Я его обычно как термин использую.

Можешь предложить лучший вариант термина?
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[26]: О виртуальных машинах и процессорах
От: Cyberax Марс  
Дата: 20.02.07 02:14
Оценка:
VladD2 wrote:
> IT>Это действительно так. Особенно сильно вырывается вперёд серверный
> вариант. Это заметно даже по шустрикам на нашем сайте.
> В серверном варианте просто доругой ЖЦ. К скорости кода это отношение не
> имеет. У дотента тоже разный ЖЦ и сравнивать тут так просто нельзя.
Вообще-то, серверная и клиентская JVMы заметно различаются в Java.
Клиентская GC имеет более простые алгоритмы HotSpot'а, оптимизированые
для быстрого запуска приложения.

Физически даже размеры файлов даже различаются:
client/jvm.dll — 2301952
server/jvm.dll — 3276800
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[31]: О виртуальных машинах и процессорах
От: Sinclair Россия https://github.com/evilguest/
Дата: 20.02.07 05:17
Оценка:
Здравствуйте, VladD2, Вы писали:
VD>На самом деле во многих случаях было бы достаточно анализа потока управления. Ведь часто виртуальные методы и нитерфейсы применяются локально и можно проследить использование этой переменной.
В большинстве случаев это сводится к определению наличия вызова конструктора в области видимости. К сожалению, это происходит не так часто, как хотелось бы — это видно на примере современных С++ компиляторов. Они делают всё, что могут в этой области, но в большинстве случаев инлайнинг ограничивается автоматическими объектами.

Есть масса сценариев, в которых устранить виртуальность статическим анализом невозможно. Классы, которые задаются через конфиг файл; традиционная схема вызова виртуального метода из невиртуального, и еще много всего.

А для полей объектов получить строгое доказательство единственности присваивания вообще очень сложно (в смысле complexity) и неоправдвно: в большинстве случаев строгое доказательство вовсе невозможно. Именно тут рулит подход с guarded inlining. Для его применения достаточно нестрогого доказательства: если на практике одна из реализаций вызывается достаточно чаще других, то ее уже можно инлайнить. Строгое доказательство дает лишь небольшое улучшение — убирается guard code, который и так весьма недорог.


VD>Если во время ее использования не делается ни одного изменения ссылки или все изменения делаются на тот же тип объектов, то можно смело создавать специализированную версию фукнции которой передается интерфейс (или класса) и устанять в ней как виртуальность, так и сам вызов. Учитывая, что это можно сделать во время пред-компиляции особых ресурсов (кроме некоторого увеличения расхода памяти под образ кода) тратить не приется, можно говорить о хорошем выигрыше.


Не спорю. Трудно говорить "на пальцах", не имея точных цифр. Это же не выбор да/нет, это всего лишь наличие разнообразной информации у компилятора. Чем ее больше, тем лучшие оптимизации можно в общем случае провести. Но естественно, здесь должно быть применимо правило Парето — 80% выигрыша должно достигаться самыми простыми оптимизациями. А следующие 80% оптимизаций дадут не больше 20% выигрыша.
1.2.0 alpha rev. 655
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[33]: О виртуальных машинах и процессорах
От: Sinclair Россия https://github.com/evilguest/
Дата: 20.02.07 05:17
Оценка: :)
Здравствуйте, Cyberax, Вы писали:
C>Можешь предложить лучший вариант термина?
"Динамическая оптимизация целевого кода с использованием статистики времени выполнения".
1.2.0 alpha rev. 655
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.