Новый оптимизатор Internet Explorer 9 привел к завышению результатов теста SunSpider
Значительный прорыв производительности последней тестовой версии Internet Explorer 9 дал повод задуматься, каким образом разработчикам IE удалось кардинально поднять производительность браузера, переведя его из разряда отстающих в лидеры.Как оказалось, в последней тестовой версии была реализована техника оптимизации "Dead Code Elimination", основной задачей которой в данный момент является ускорение прохождения теста производительности SunSpider.
По сути оптимизация сводится к игнорированию определенных языковых конструкций, что пока влияет только на прохождение теста SunSpider, не ускоряя работу реальных сайтов. При этом даже незначительное изменение кода теста, приводит к значительному падению скорости его прохождения. Например, оптимизация уже перестает работать при замене переменных местами в условном выражении (т.е. если вместо "if (TargetAngle > CurrAngle)" написать "if (TargetAngle <= CurrAngle)"), при добавлении новой переменной или при изменении огранизации цикла (если вместо "for (Step = 0; Step < 12; Step++)" поставить "while(Step < 12)" или "for (Step = 12; Step > 0; Step--)").
Интересно, что добавление в код теста забытого "return" в конце функции приводит к замедлению работы IE в 20 раз (!), а подстановка в любое место кода пустого вызова "true" замедляет IE в 19 раз (!). Opera, Chrome и Firefox также были протестированы на предмет выборочной оптимизации тестов, но изменение кода SunSpider для данных браузеров не привело к изменению скорости прохождения теста.
Дополнение: представители Microsoft прокомментировали ситуацию тем, что в новой тестовой версии IE включена начальная поддержка нового механизма оптимизации, который пока нигде не применяется, но в течение нескольких недель будет адаптирован для ускорения реальных сайтов. Невероятное ускорение прохождения теста SunSpider объясняется тем, что в нем выполняются интенсивные типовые цикличные операции, после чего результаты данных вычислений в дальнейшем нигде не используются. Подобное синтетическое поведение теста как раз подпадает под действие нового оптимизатора, который как раз нацелен на удаление подобных вычислений, не приводящих к результату. О причинах сведения оптимизации на нет после добавления несущественных изменений в код SunSpider ничего не сказано.
Здравствуйте, Sheridan, Вы писали:
S>Комментарии? Опровержения?
Вроде уже прокомментировали. Ситуация такова, что каждый воспринимает ее, как больше нравится. Лично я скачал бету и попробую посидеть на ней с недельку другую, а уже потом решу, лучше она Хрома или нет. Что там показывает SunSpider, мне пофигу.
Приветствую, MxMsk, вы писали:
MM> Вроде уже прокомментировали. Ситуация такова, что каждый воспринимает ее, как больше нравится. Лично я скачал бету и попробую посидеть на ней с недельку другую, а уже потом решу, лучше она Хрома или нет. Что там показывает SunSpider, мне пофигу.
Что показывает спайдер — мне тоже пофигу. Но вот что вскрывает сама ситуация — уже веселее
Здравствуйте, Sheridan, Вы писали:
S>Комментарии?
— статья (или перевод?) ламерская
— тест говно (очевидно! мы даже тут в КСВ такие тесты на плюсах обсуждали, когда получалось "время — 0.0с"), несмываемый позор тестописателям
— оптимизатор в IE9 ещё развивать и развивать. но направление правильное, авось тесты научатся нормальные писать.
Здравствуйте, Sheridan, Вы писали:
MM>> Вроде уже прокомментировали. Ситуация такова, что каждый воспринимает ее, как больше нравится. Лично я скачал бету и попробую посидеть на ней с недельку другую, а уже потом решу, лучше она Хрома или нет. Что там показывает SunSpider, мне пофигу. S>Что показывает спайдер — мне тоже пофигу. Но вот что вскрывает сама ситуация — уже веселее
статья вскрывает исключительно никчёмность очень популярного теста
Здравствуйте, Sheridan, Вы писали:
A>> — оптимизатор в IE9 ещё развивать и развивать. но направление правильное, авось тесты научатся нормальные писать. S>Мне показалось или ты хотел сказать, что хаки применять (читай: обманывать) — хорошо?
мне показалось, или ты разбираешься в оптимизации еще меньше Дворкина?
Здравствуйте, Sheridan, Вы писали:
S>Комментарии? Опровержения?
Вас это беспокоит? Его движок летает "как трофейный мессершмидт" (с) по сравнению с прошлыми версиями. С V8 конечно и рядом не стоял, но прорыв налицо. А то, что его распознаватель сбить легко, так давеча была статья-перевод на хабре, описывающая задачу распознавания метрвого кода и ее реализацию в IE. Оттуда даже линуксоиду будет понятно, что сия весьма нетривиально и на любой чих будет сбиваться, хоть то тест, хоть продуктивный код.
И если оптимизатор IE был заточен именно на тесты, какого ж хрена он тогда на нормальных скриптах так летает? Попутался и за тесты принял?
Здравствуйте, kochetkov.vladimir, Вы писали:
KV>Вас это беспокоит? Его движок летает "как трофейный мессершмидт" (с) по сравнению с прошлыми версиями. С V8 конечно и рядом не стоял, но прорыв налицо. А то, что его распознаватель сбить легко, так давеча была статья-перевод на хабре, описывающая задачу распознавания метрвого кода и ее реализацию в IE.
а можно ссылку на реализацию? я читал на хабре что-то, но не помню что там была описана конкретная реализация в IE9 — они сами там в MS что-ли описали?
KV>Оттуда даже линуксоиду будет понятно, что сия весьма нетривиально и на любой чих будет сбиваться, хоть то тест, хоть продуктивный код.
ну не на любой чих, а на вполне конкретные безотносительно реализации, я могу предположить почему он сбился именно на описанные в первом сообщении чихи (и кстати, абсолютно уверен, что хоть они и выглядят безобидно, выбраны не случайно и "со знанием дела")
Здравствуйте, Sheridan, Вы писали:
A>> мне показалось, или ты разбираешься в оптимизации еще меньше Дворкина? S>Я слушаю.
я повторяю — тест кривой, DCE не является хаком — это общеизвестная оптимизация
A> я повторяю — тест кривой, DCE не является хаком — это общеизвестная оптимизация
Гм... Тогда интересно — отчего при небольшом изменении кода внезапно оптимизация кудато пропадает?
Здравствуйте, Sheridan, Вы писали:
A>> я повторяю — тест кривой, DCE не является хаком — это общеизвестная оптимизация S>Гм... Тогда интересно — отчего при небольшом изменении кода внезапно оптимизация кудато пропадает?
особенность реализации (возможно самого DCE, возможно каких-то других потрохов JS в IE9) — я надеюсь, Кочетков поделится ссылочкой — не поделится, так я попытаюсь высказать свои неподкреплённые предположения
оптимизация-то внешне нехитрая — код "мёртвый" — выкидываем, не мёртвый — код отрабатывает. дьявол в принятии решения о том, является ли этот код мёртвым. кода там много (по времени выполнения) выкидывается (или не выкидывается) — вот и эффект "внезапности". а про изменения я уже сказал — там не случайные изменения выбраны, наверняка автор имел опыт тестирования какого-либо оптимизатора и знал, "куда бить".
А может это не IE проблемы, а тех кто криво пишет. Я конечно не знаю как там с открытой документацией, но если сказать что писать нужно так, а мегаумный програмист написал так что все тормозит и на вопросы отвечает — а нефиг, используйте "Х"-браузер, то это проблемы его, програмиста?
ЗЫ Не пытаюсь защищать ИЕ просто постановка странная.
Самая большая в мире ложь — "Я прочел и согласен с условиями пользовательского соглашения".
А чего, там комментировать, всё ж понятно: при настройке эвристики оптимизатора ориентировались не на миллион случайных сайтов, а на определённые тесты. И таки да, успешно сумели их оптимизировать — уже немалый прогресс.
А что обобщили результаты теста на всё остальное и стали делать поспешные выводы — ну так это, скорее, вина их пиарщиков и менеджеров, а не слабость технологии.
ЗЫ. Субъективно движок IE9 существенно уступает по скорости как Хрому, так и Опере, что бы тут не говорили.
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Здравствуйте, frogkiller, Вы писали:
F>ЗЫ. Субъективно движок IE9 существенно уступает по скорости как Хрому, так и Опере, что бы тут не говорили.
Мне пока кажется, что IE9 уступает не столько движком, сколько отзывчивостью интерфейса. Медленее работают такие функции, как "Открыть в новой вкладке". В Хроме зажимаешь Ctrl и пошел по ссылкам щелкать, в IE9 же на третьей-четвертой ссылке начинаются тормоза GUI, приходится немного ждать. Такое ощущение, что это просто какое-то хроническое заболевание IE.
Здравствуйте, Sheridan, Вы писали:
MM>> Вроде уже прокомментировали. Ситуация такова, что каждый воспринимает ее, как больше нравится. Лично я скачал бету и попробую посидеть на ней с недельку другую, а уже потом решу, лучше она Хрома или нет. Что там показывает SunSpider, мне пофигу.
S>Что показывает спайдер — мне тоже пофигу. Но вот что вскрывает сама ситуация — уже веселее
И что вскрыла ситуация ? Что в бете оптимизатор никакой и справляется пока только с синтетикой ?
Здравствуйте, Sheridan, Вы писали:
A>> — оптимизатор в IE9 ещё развивать и развивать. но направление правильное, авось тесты научатся нормальные писать.
S>Мне показалось или ты хотел сказать, что хаки применять (читай: обманывать) — хорошо?
Где ты углядел обман ?
Ты хотел что бы за полгода до релиза челы выпустили бету в которой будет все как в релизе а то и лучше ?
Здравствуйте, Sheridan, Вы писали:
A>> я повторяю — тест кривой, DCE не является хаком — это общеизвестная оптимизация S>Гм... Тогда интересно — отчего при небольшом изменении кода внезапно оптимизация кудато пропадает?
Здравствуйте, Sheridan, Вы писали:
S>Приветствую, midcyber, вы писали:
m>> Firefox использовал хак, чтобы показать лучший результат в тестах Acid S>Сволочи. Дальше что?
Здравствуйте, Antikrot, Вы писали:
A>Здравствуйте, kochetkov.vladimir, Вы писали:
KV>>Вас это беспокоит? Его движок летает "как трофейный мессершмидт" (с) по сравнению с прошлыми версиями. С V8 конечно и рядом не стоял, но прорыв налицо. А то, что его распознаватель сбить легко, так давеча была статья-перевод на хабре, описывающая задачу распознавания метрвого кода и ее реализацию в IE. A>а можно ссылку на реализацию? я читал на хабре что-то, но не помню что там была описана конкретная реализация в IE9 — они сами там в MS что-ли описали?
Здравствуйте, MxMsk, Вы писали:
F>>ЗЫ. Субъективно движок IE9 существенно уступает по скорости как Хрому, так и Опере, что бы тут не говорили. MM>Мне пока кажется, что IE9 уступает не столько движком, сколько отзывчивостью интерфейса. Медленее работают такие функции, как "Открыть в новой вкладке". В Хроме зажимаешь Ctrl и пошел по ссылкам щелкать, в IE9 же на третьей-четвертой ссылке начинаются тормоза GUI, приходится немного ждать. Такое ощущение, что это просто какое-то хроническое заболевание IE.
Про интерфейс я ничего не могу сказать, у меня он после первой же перезагрузки стал вылетать с ошибкой — и я его успешно похоронил для себя. Но перед этим я всё-таки прогнал все доступные мне браузеры вот на такой штуке: http://js1k.com/demo/195 . Так можно сравнить чистый движок на мат. операциях и отрисовке. Я уже тут как-то писал о результатах — IE9 был на уровне FF, но они оба существенно уступали Опере, не говоря уже о Хроме, который просто летал.
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Здравствуйте, frogkiller, Вы писали:
F>Но перед этим я всё-таки прогнал все доступные мне браузеры вот на такой штуке: http://js1k.com/demo/195 . Так можно сравнить чистый движок на мат. операциях и отрисовке. Я уже тут как-то писал о результатах — IE9 был на уровне FF, но они оба существенно уступали Опере, не говоря уже о Хроме, который просто летал.
Да, разумеется, это было до всей этой истории с оптимизацией мёртвого кода.
Кстати, сейчас подумалось: то, что эти товарищи оптиммизировали опреацию '>', но не оптимизировали '<=', говорит, скорее о том, что делали они это не вручную (человек вряд ли бы забыл это сделать), а с помощью какого-то искухсственого интеллекта, которому скормили движок и набор тестов. В тестах просто не было некоторых операций, поэтому они остались неохваченными. Если это так, то скоро ему скормят побольше разных обучающих примеров, и следует ожидать ускорения и на реальных задачах, а не только в синтетике. Понятно, что результаты будут не столь впечатляющими, но по мне это всё равно хорошо — т.к. усилит конкуренцию.
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Здравствуйте, MxMsk, Вы писали:
F>>ЗЫ. Субъективно движок IE9 существенно уступает по скорости как Хрому, так и Опере, что бы тут не говорили. MM>Мне пока кажется, что IE9 уступает не столько движком, сколько отзывчивостью интерфейса. Медленее работают такие функции, как "Открыть в новой вкладке". В Хроме зажимаешь Ctrl и пошел по ссылкам щелкать, в IE9 же на третьей-четвертой ссылке начинаются тормоза GUI, приходится немного ждать. Такое ощущение, что это просто какое-то хроническое заболевание IE.
Предположу ещё, что тормоза при открытии нескольких вкладок обусловлены не очень удачной политикой закачки страниц (вероятно, используется очень мало одновременных соединений). А ещё тем, что там шарится память между страницами — тут гораздо более вероятно повиснуть на каких-нибудь блокировках, чем в случае Хрома, который все скрипты транслирует независимо. Наверняка IE будет подтормаживать на открытии нескольких одновременных страниц, если они все используют, например, jquery, но с разными плагинами.
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Здравствуйте, MxMsk, Вы писали:
MM>Здравствуйте, Sheridan, Вы писали:
S>>Комментарии? Опровержения? MM>Вроде уже прокомментировали. Ситуация такова, что каждый воспринимает ее, как больше нравится. Лично я скачал бету и попробую посидеть на ней с недельку другую, а уже потом решу, лучше она Хрома или нет. Что там показывает SunSpider, мне пофигу.
Мне тоже всегда была пофигу браузерная писькометрия. Обычно в реальной работе с браузером узнаешь о нем (и зачастую его авторах) гораздо больше, чем смотря результаты тестов.
IE9 Beta пока не блещет производительностью, заметно уступая хрому, но рвет оперу и ФФ. А вот вкладки там как были кривые, так и остались.
Здравствуйте, kochetkov.vladimir, Вы писали:
KV>Вас это беспокоит? Его движок летает "как трофейный мессершмидт" (с) по сравнению с прошлыми версиями. С V8 конечно и рядом не стоял, но прорыв налицо.
Прикол в том, что IE9 уже быстрее хрома Могут ведь, когда захотят!
Здравствуйте, kochetkov.vladimir, Вы писали:
KV>>>Вас это беспокоит? Его движок летает "как трофейный мессершмидт" (с) по сравнению с прошлыми версиями. С V8 конечно и рядом не стоял, но прорыв налицо. А то, что его распознаватель сбить легко, так давеча была статья-перевод на хабре, описывающая задачу распознавания метрвого кода и ее реализацию в IE. A>>а можно ссылку на реализацию? я читал на хабре что-то, но не помню что там была описана конкретная реализация в IE9 — они сами там в MS что-ли описали? KV>Я неправильно выразился. Там были высказаны предположения о реализации. http://habrahabr.ru/blogs/browsers/108515/ вот, в общем и по ссылкам.
хм, интересно, не нашёл там *ни слова* про реализацию ну то есть там написано *что* он делает, но не написано *как*.
впрочем, статейка не отличается точностью:
you can only use the operators -, +, ++, <<, +=, -=, and if(<)
при том что в случае sunspider были выкинуты if(>) и for(<), а в примерах в блоге MS используются while(i--) и if(!=)
всё это наводит на размышление что "Выбранное для оптимизации множество операций, похоже, совпадает с тем, которое используется в математических тестах в SunSpider." не есть правда
единственно что я там интересного нашёл — показана говнистость языков с динамической типизацией, впрочем на mozilla.com автора хорошо попинали на тему глобального анализа...
а вообще прикольно получилось — MS заставила мозилловцев искать у себя баги на бета-этапе
Здравствуйте, frogkiller, Вы писали:
F>А чего, там комментировать, всё ж понятно: при настройке эвристики оптимизатора ориентировались не на миллион случайных сайтов, а на определённые тесты. И таки да, успешно сумели их оптимизировать — уже немалый прогресс.
по идее, бенчмарк преставляет собой набор кусков реальных приложений, так что его использование "при настройке эвристики оптимизатора" очень даже оправдано (кстати, что ты понимаешь под "эвристическим оптимизатором", и допустимо ли использование эвристики в случае DCE?)
F>А что обобщили результаты теста на всё остальное и стали делать поспешные выводы — ну так это, скорее, вина их пиарщиков и менеджеров, а не слабость технологии.
да не, это вина не их пиарщиков и менеджеров, а тех, кто судит (и кто придумал судить) о программе исключительно по бенчмаркам, то есть, в том числе это и вина пользователей
Здравствуйте, frogkiller, Вы писали:
F>Кстати, сейчас подумалось: то, что эти товарищи оптиммизировали опреацию '>', но не оптимизировали '<=', говорит, скорее о том, что делали они это не вручную (человек вряд ли бы забыл это сделать), а с помощью какого-то искухсственого интеллекта, которому скормили движок и набор тестов.
а мне подумалось ровно наоборот
Здравствуйте, Antikrot, Вы писали:
F>>А чего, там комментировать, всё ж понятно: при настройке эвристики оптимизатора ориентировались не на миллион случайных сайтов, а на определённые тесты. И таки да, успешно сумели их оптимизировать — уже немалый прогресс. A>по идее, бенчмарк преставляет собой набор кусков реальных приложений, так что его использование "при настройке эвристики оптимизатора" очень даже оправдано (кстати, что ты понимаешь под "эвристическим оптимизатором", и допустимо ли использование эвристики в случае DCE?)
Бенчмарк — это всё-таки довольно небольшой набор тестов, каждый из которых покрывает по возможности наибольший кусок функциональности. Поэтому неудивительно, что в нём не было операции >=.
А под настройкой эвристики я подразумеваю подбор разных констант, типа там на какую глубину функции раскрывать, какие циклы разматывать, какие куски кода заменять на эквивалентные. Ну вот такой автомат перебирает разные варианты, и смотрит, в каком случае будет наибольший выигрыш по времени по сумме тестов при сохранении функциональности. Понятно, что перебрать все варианты невозможно, поэтому придумывают какие-то стратегии, чтобы уменьшить число тестов. Вероятно, так оптимизатор и посчитал бесперспективным раскрутку веток с некоторыми операциями
F>>А что обобщили результаты теста на всё остальное и стали делать поспешные выводы — ну так это, скорее, вина их пиарщиков и менеджеров, а не слабость технологии. A>да не, это вина не их пиарщиков и менеджеров, а тех, кто судит (и кто придумал судить) о программе исключительно по бенчмаркам, то есть, в том числе это и вина пользователей
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Здравствуйте, frogkiller, Вы писали:
F>Бенчмарк — это всё-таки довольно небольшой набор тестов, каждый из которых покрывает по возможности наибольший кусок функциональности. Поэтому неудивительно, что в нём не было операции >=. F>А под настройкой эвристики я подразумеваю подбор разных констант, типа там на какую глубину функции раскрывать, какие циклы разматывать, какие куски кода заменять на эквивалентные. Ну вот такой автомат перебирает разные варианты, и смотрит, в каком случае будет наибольший выигрыш по времени по сумме тестов при сохранении функциональности.
в данном-то случае "при сохранении функциональности" довольно скользкая формулировка — ведь речь о том, чтобы выкинуть нафиг часть(ненужную) функциональности. причём без права на ошибку в плане определения ненужности.
При оптимизации стараются улучшить среднее время работы программы. Очень часто приходится жертвовать производительностью на редких путях выполнения программы для ускорения на путях, которые выполняются часто.
S>вместо "for (Step = 0; Step < 12; Step++)" поставить "for (Step = 12; Step > 0; Step--)").
1й вариант чаще встречается. Второй — довольно редкий случай.
S>а подстановка в любое место кода пустого вызова "true" замедляет IE в 19 раз (!).
Это вообще странный случай. Зачем так делать? Разработчики посчитали, что подобное в реальной жизни встречается не так часто. Так что результатом оптимизации могло быть замедление программы на таком коде.
Здравствуйте, alzt, Вы писали:
A>При оптимизации стараются улучшить среднее время работы программы. Очень часто приходится жертвовать производительностью на редких путях выполнения программы для ускорения на путях, которые выполняются часто. S>>вместо "for (Step = 0; Step < 12; Step++)" поставить "for (Step = 12; Step > 0; Step--)"). A>1й вариант чаще встречается. Второй — довольно редкий случай.
я вообще подозреваю оптимизатор там просто работает с циклами вида for(i' = 0; i' < ub; ++i') сделают приведение "к нормальному виду" — и для второго случая заработает. интереснее было бы сделать Step < 100500 (чтобы убрать вполне возможный для <12 complete unrolling), чтобы проверить работает ли там DCE с циклами вообще
S>>а подстановка в любое место кода пустого вызова "true" замедляет IE в 19 раз (!). A>Это вообще странный случай. Зачем так делать? Разработчики посчитали, что подобное в реальной жизни встречается не так часто. Так что результатом оптимизации могло быть замедление программы на таком коде.
а что реально делает true; в JS? если совсем ничего, так откуда там мб замедление? скорее всего они его просто не учли пока, либо таки эта запись влияет на результат (я js не знаю)
Здравствуйте, iHateLogins, Вы писали:
HL>Здравствуйте, kochetkov.vladimir, Вы писали:
KV>>Вас это беспокоит? Его движок летает "как трофейный мессершмидт" (с) по сравнению с прошлыми версиями. С V8 конечно и рядом не стоял, но прорыв налицо.
HL>Прикол в том, что IE9 уже быстрее хрома Могут ведь, когда захотят!