Сегодня отдыхаем, мои чюваки
Я как-то уже писал, что #ИИшница постепенно убирает естественные барьеры между работой и отдыхом, и теперь отдых тоже становится навыком, который надо уметь вовремя применить
Так что давай сегодня вместе отдохнём и наберёмся сил, чтобы завтра свернуть горы и создать шедевр✨
#heavywednesday
Я как-то уже писал, что #ИИшница постепенно убирает естественные барьеры между работой и отдыхом, и теперь отдых тоже становится навыком, который надо уметь вовремя применить
Так что давай сегодня вместе отдохнём и наберёмся сил, чтобы завтра свернуть горы и создать шедевр
#heavywednesday
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍1
Иногда нужен грув, иногда - рефакторинг, главное - соблюдать баланс между ними🪨
Поздравляю причастых к программированию - с Днём программиста!👩💻
А причастных к барабанам - с прошедшим Днём барабанщика!🥁
Поздравляю причастых к программированию - с Днём программиста!
А причастных к барабанам - с прошедшим Днём барабанщика!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8🔥2 1
Forwarded from C# Short Posts 🔞
🎯 Instrumented Tier0: профилирование кода
В прошлый раз мы разобрали два уровня компиляции: Tier0 — быстрый и неоптимизированный, и Tier1 — оптимизированный, для горячих методов. Но между ними прячется ещё одна стадия❗️
Возьмём наш однострочник
Один вызов — один дешёвый заход на Tier0, и программа кончилась. А теперь позовём тот же метод в цикле много раз:
🕵️ Что за Instrumented Tier0?
Это тот же неоптимизированный Tier0, но со встроенными счётчиками. Пока метод работает на нём, рантайм записывает статистику: сколько раз метод вызвали, какие ветки чаще срабатывают, какие типы приходят в вызовы. Такая статистика — это профиль работы метода, а сам сбор называется профилированием
Дальше, на стадии Tier1, JIT оптимизирует метод с учётом профиля его работы, чтобы ускорить его наиболее горячие точки, а не просто делать это наугад
Такая оптимизация называется PGO — Profile-Guided Optimization, и по умолчанию она включена с .NET8
⏱️ Почему до Tier1 теперь два этапа
В прошлом посте я говорил про порог в 30 вызовов между Tier0 и Tier1. Если бытьдушным точным, это актуально для кода, работающего на .NET < 8 или .NET>= 8, но с отключенной PGO (
Первые 30 вызовов — это обычный Tier0, без особых оптимизаций. На 31-м метод перекомпилируется в Instrumented Tier0, на котором начинает собирать профиль работы метода. Инструментированная версия работает ещё 30 вызовов, и только потом метод компилируется на Tier1 — уже с оптимизациями по профилю. Мотивация простая: чтобы оптимизировать по профилю, профиль сначала надо собрать🧠
🅰️ Что с этим делать
🟢 В релизных сборках кода начиная с .NET8 профилирование включено по умолчанию
🟢 Профилирование позволяет более точно ускорить горячий код: JIT оптимизирует его по реальному поведению
🟢 Прогрев до Tier1 стал дольше: профилю нужно накопиться
А зависит ли этот путь от каких-нибудь факторов? Конечно! Но об этом расскажу в следующем посте 👉
🧑💻dp🥁
#dotnet #csharp #инженерныештучки #heavywednesday
В прошлый раз мы разобрали два уровня компиляции: Tier0 — быстрый и неоптимизированный, и Tier1 — оптимизированный, для горячих методов. Но между ними прячется ещё одна стадия❗️
Возьмём наш однострочник
hello world, завернём его в метод Hello() для удобства измерений и запустим один раз. В сводке JIT будет одна строка:Program:Hello() [Tier0]
Один вызов — один дешёвый заход на Tier0, и программа кончилась. А теперь позовём тот же метод в цикле много раз:
Program:Hello() [Tier0]
Program:Hello() [Instrumented Tier0]
Program:Hello() [Tier1]
🕵️ Что за Instrumented Tier0?
Это тот же неоптимизированный Tier0, но со встроенными счётчиками. Пока метод работает на нём, рантайм записывает статистику: сколько раз метод вызвали, какие ветки чаще срабатывают, какие типы приходят в вызовы. Такая статистика — это профиль работы метода, а сам сбор называется профилированием
Дальше, на стадии Tier1, JIT оптимизирует метод с учётом профиля его работы, чтобы ускорить его наиболее горячие точки, а не просто делать это наугад
Такая оптимизация называется PGO — Profile-Guided Optimization, и по умолчанию она включена с .NET8
⏱️ Почему до Tier1 теперь два этапа
В прошлом посте я говорил про порог в 30 вызовов между Tier0 и Tier1. Если быть
DOTNET_TieredPGO=0). То есть в более свежих версиях фреймворка путь до Tier1 стал в два раза дольше из-за появления ещё одной стадии, которая длится так же примерно 30 вызовов (ну или смотря что у тебя указано в DOTNET_TC_CallCountThreshold)Первые 30 вызовов — это обычный Tier0, без особых оптимизаций. На 31-м метод перекомпилируется в Instrumented Tier0, на котором начинает собирать профиль работы метода. Инструментированная версия работает ещё 30 вызовов, и только потом метод компилируется на Tier1 — уже с оптимизациями по профилю. Мотивация простая: чтобы оптимизировать по профилю, профиль сначала надо собрать
🅰️ Что с этим делать
🟢 В релизных сборках кода начиная с .NET8 профилирование включено по умолчанию
🟢 Профилирование позволяет более точно ускорить горячий код: JIT оптимизирует его по реальному поведению
🟢 Прогрев до Tier1 стал дольше: профилю нужно накопиться
А зависит ли этот путь от каких-нибудь факторов? Конечно! Но об этом расскажу в следующем посте 👉
🧑💻dp🥁
#dotnet #csharp #инженерныештучки #heavywednesday
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🔥3 3
В последнее время многие сюжеты, которые добавляются в игру #занимательныеистории, так или иначе отражают события из моей жизни, и этот не является исключением😉
Это я ездил в Грузию🇬🇪 чтобы воспользоваться нашим продуктом за рубежом🤘
Помимо приложения Юрент🛴 мы работаем ещё и над приложением JET🟦 и, как в случае и с Додо, очень интересно сравнить опыт использования нашего сервиса: какие здесь самокаты, как работает приложение, есть ли что-то необычное. Например, здесь есть зарядные станции с павербанками⚡ которые можно арендовать непосредственно через наше приложение, что очень удобно: если на счету есть бонусы, они распространяются и на самокаты, и на зарядки
Ещё очень приятно видеть, что интеграция с Яндекс GO, над которой работает наша команда, актуальна и за рубежом, и арендовать наши самокаты можно так же через приложение партнёра💪
Вообще, интересно как всё сложилось: уже три года я периодически приезжаю в Батуми к друзьям, и мне очень нравится кататься здесь на самокатах по бульвару (по набережной): выделенная велодорожка, пальмы, море, красота 🌊
А через какое-то время эти самокаты и поездки на них стали моим продуктом, которым я уже не только сам пользуюсь, но и работаю над его качеством📈
Думаю, это круто, когда работаешь над тем, что тебе нравится, и чувствуешь свою причастность, по крайней мере мне нравится❤️
Помимо приложения Юрент
Ещё очень приятно видеть, что интеграция с Яндекс GO, над которой работает наша команда, актуальна и за рубежом, и арендовать наши самокаты можно так же через приложение партнёра
Вообще, интересно как всё сложилось: уже три года я периодически приезжаю в Батуми к друзьям, и мне очень нравится кататься здесь на самокатах по бульвару (по набережной): выделенная велодорожка, пальмы, море, красота 🌊
А через какое-то время эти самокаты и поездки на них стали моим продуктом, которым я уже не только сам пользуюсь, но и работаю над его качеством
Думаю, это круто, когда работаешь над тем, что тебе нравится, и чувствуешь свою причастность, по крайней мере мне нравится
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3 2 1
