Forwarded from opennet.ru
В Linux обеспечена работа 80% из 100 наиболее популярных в Steam игр https://opennet.ru/56390/
www.opennet.ru
В Linux обеспечена работа 80% из 100 наиболее популярных в Steam игр
По данным сервиса protondb.com, собирающего информацию о работоспособности в Linux игровых приложений, представленных в каталоге Steam, в настоящее время в Linux работоспособны 80% из 100 самых популярных игр. При рассмотрении 1000 наиболее популярных игр…
вот немножко рождественского настроения вам
https://github.com/AngelOnFira/rusty-christmas-tree
https://github.com/AngelOnFira/rusty-christmas-tree
GitHub
GitHub - AngelOnFira/rusty-christmas-tree: A LED Christmas Tree controlled by Rust. Contribute your own renderers!
A LED Christmas Tree controlled by Rust. Contribute your own renderers! - GitHub - AngelOnFira/rusty-christmas-tree: A LED Christmas Tree controlled by Rust. Contribute your own renderers!
свежий отчет Redmonk по языкам раскладывает
https://youtu.be/nh34MRmkvo0
https://youtu.be/nh34MRmkvo0
YouTube
Самые популярные языки программирования 2022
#soer #itubeteam
Основной канал для общения и публикации новых видео - Телегарм - https://t.me/softwareengineervlog
Спонсорство - https://donate.s0er.ru
Сайт платным контентом - https://soer.pro
Зеркало для видео Дзен Видео - https://zen.yandex.ru/i…
Основной канал для общения и публикации новых видео - Телегарм - https://t.me/softwareengineervlog
Спонсорство - https://donate.s0er.ru
Сайт платным контентом - https://soer.pro
Зеркало для видео Дзен Видео - https://zen.yandex.ru/i…
сам видос, как раз как интро для совсем не слышащих про раст, но подача инфы на канале, мое почтение
https://youtu.be/5C_HPTJg5ek
https://youtu.be/5C_HPTJg5ek
YouTube
Rust in 100 Seconds
Rust is a memory-safe compiled programming language for building high-performance systems. It has the simplicity of high-level languages (Go, Python), but the control of low-level languages (C, Cpp) https://github.com/fireship-io/rust-in-100
#programming…
#programming…
Forwarded from Experimental chill
Недавно задался вопросом, а где вообще почитать про процессоры и как они устроены. К сожалению, архитектура практически всех современных процессоров закрыта.
С одним небольшим исключением, которое мне скинули друзья из ARM. Это процессоры Exynos, которые делались для каких-то Samsung вплоть до S20. Это единственные продакшен процессоры, которые соревновались с Snapdragon и Apple A* на мобильных устройствах. Серверные процессоры скорее отличаются большими кешами, а вот branch predictions, pipelining достаточно похожи. Статья сложная, но хочу рассказать о ментальной моделе, которую я выучил.
Branch Predictor во всех процессорах это мелкие перцептроны (однослойные нейронные сети), которые собирают три-четыре объекта
GHIST (Global History) — хэш информации о том, как последние N бранчей были взяты или не взяты. В статье сказали, что в M1 модели было 160 бит, к 4 поколению 200
PHIST (Path History) — хэш нескольких бит адресов (со второго по четвёртый) последних бранчей, массив длины 80
PC (Program Counter) — хэш указателя на сам бранч
RAS (Return Address Stack, опционально) — хэш возвращаемого значения из функции
Два уровня для TAKEN и NOT-TAKEN бранчей (c некоторыми разделителями для always-, often-, rare-, always-not-), чтобы запоминать всю информацию выше. В итоге получилось 32kb на перцептрон, 280kb на таблицы.
Recovery buffer — когда происходит mispredict, инструкции, которые были уже загружены и операции, которые были выполнены, должны уйти из буффера. В M5 также появился совсем маленький буффер для миспредикта often-taken бранчей, который сокращает latency при миспредикте.
Тем не менее, большинство улучшений были от увеличения буфферов и для редких бинарей. Увеличиваешь буффер в два раза, получаешь на 0.01-0.1% меньше проблем.
С точки зрения кода расстановка бранчей практически никак не влияет на современных процессорах. Если бранч непредсказуем, будет какая-то latency, если предсказуем, процессор почти всегда поймёт. Есть патологические случаи:
Много горячих функций нельзя, скорее всего 8-10 бит берется из адреса, поэтому уже с 256 будут проблемы. Обычно так и не происходит.
Если много холодных блоков и прыжок далекий, то могут быть проблемы с фрагментацией памяти. Если вы собираете свой бинарь с Profile Guided Optimization (что я настоятельно рекомендую), то никаких проблем с бранчами не будет, ставить [[likely]] и [[unlikely]] тоже бесполезно. Не бесполезно, если вы собираете библиотеку. PGO также поможет компилятору понять, стоить ли векторизировать некоторые циклы
Поэтому проблема с бранчами в целом решена для процессоров, лучшее, что вы можете сделать — убирать эти бранчи.
Статья также описывает то, как работают L1, L2-3 кеши. Скажем, сейчас процессоры через другой перцептрон предсказывают паттерны и даже непростые как p+2, p+4, p+9, p+11, p+13, p+18 предскажут, что надо подгрузить в кэш p+20, p+22, p+27 (+2, +2, +5). В L2 кеше из интересного размер кэшлинии 64 байта, но при загрузке из кэша также подгружается соседняя линия.
В общем, статья безумно интересная. Мне как человеку, который занимается перфом, было полезно прочитать. Видимо, буду ещё разбираться месяц-два до конца.
Это более глобальная проблема, мало людей, которые понимают как устроено hardware, чтобы делать быстрее software. В какой-то степени в последнее время развиваюсь в этом направлении — а как я могу утилизировать лучше код, зная как вещи работают изнутри, а не просто экспериментировав. Спасибо, что есть люди, которые рассказывают про технологии как Exynos.
Потихоньку отвечаю себе на вопрос, а как мой компьютер работает.
[1] Пост danluu о branch prediction, прям с нуля с 90 годов. Нет сложных вещей
[2] Перцептронные branch predictions
[3] Эксперименты cloudflare с branch predictions в AMD и Apple M1 (тоже нулевой порог входа)
[4] Статья про процессоры Exynos
[5] LLVM Profile Guided Optimization
[6] Agner Fog x86 branch predictors — без новых процов
С одним небольшим исключением, которое мне скинули друзья из ARM. Это процессоры Exynos, которые делались для каких-то Samsung вплоть до S20. Это единственные продакшен процессоры, которые соревновались с Snapdragon и Apple A* на мобильных устройствах. Серверные процессоры скорее отличаются большими кешами, а вот branch predictions, pipelining достаточно похожи. Статья сложная, но хочу рассказать о ментальной моделе, которую я выучил.
Branch Predictor во всех процессорах это мелкие перцептроны (однослойные нейронные сети), которые собирают три-четыре объекта
GHIST (Global History) — хэш информации о том, как последние N бранчей были взяты или не взяты. В статье сказали, что в M1 модели было 160 бит, к 4 поколению 200
PHIST (Path History) — хэш нескольких бит адресов (со второго по четвёртый) последних бранчей, массив длины 80
PC (Program Counter) — хэш указателя на сам бранч
RAS (Return Address Stack, опционально) — хэш возвращаемого значения из функции
Два уровня для TAKEN и NOT-TAKEN бранчей (c некоторыми разделителями для always-, often-, rare-, always-not-), чтобы запоминать всю информацию выше. В итоге получилось 32kb на перцептрон, 280kb на таблицы.
Recovery buffer — когда происходит mispredict, инструкции, которые были уже загружены и операции, которые были выполнены, должны уйти из буффера. В M5 также появился совсем маленький буффер для миспредикта often-taken бранчей, который сокращает latency при миспредикте.
Тем не менее, большинство улучшений были от увеличения буфферов и для редких бинарей. Увеличиваешь буффер в два раза, получаешь на 0.01-0.1% меньше проблем.
С точки зрения кода расстановка бранчей практически никак не влияет на современных процессорах. Если бранч непредсказуем, будет какая-то latency, если предсказуем, процессор почти всегда поймёт. Есть патологические случаи:
Много горячих функций нельзя, скорее всего 8-10 бит берется из адреса, поэтому уже с 256 будут проблемы. Обычно так и не происходит.
Если много холодных блоков и прыжок далекий, то могут быть проблемы с фрагментацией памяти. Если вы собираете свой бинарь с Profile Guided Optimization (что я настоятельно рекомендую), то никаких проблем с бранчами не будет, ставить [[likely]] и [[unlikely]] тоже бесполезно. Не бесполезно, если вы собираете библиотеку. PGO также поможет компилятору понять, стоить ли векторизировать некоторые циклы
for (int i = 0; i < some_value; ++i) { ... }
И обычно компилятор векторизирует из-за незнания some_value, но профиль собирает эту информацию и в итоге лучше компилирует код.Поэтому проблема с бранчами в целом решена для процессоров, лучшее, что вы можете сделать — убирать эти бранчи.
Статья также описывает то, как работают L1, L2-3 кеши. Скажем, сейчас процессоры через другой перцептрон предсказывают паттерны и даже непростые как p+2, p+4, p+9, p+11, p+13, p+18 предскажут, что надо подгрузить в кэш p+20, p+22, p+27 (+2, +2, +5). В L2 кеше из интересного размер кэшлинии 64 байта, но при загрузке из кэша также подгружается соседняя линия.
В общем, статья безумно интересная. Мне как человеку, который занимается перфом, было полезно прочитать. Видимо, буду ещё разбираться месяц-два до конца.
Это более глобальная проблема, мало людей, которые понимают как устроено hardware, чтобы делать быстрее software. В какой-то степени в последнее время развиваюсь в этом направлении — а как я могу утилизировать лучше код, зная как вещи работают изнутри, а не просто экспериментировав. Спасибо, что есть люди, которые рассказывают про технологии как Exynos.
Потихоньку отвечаю себе на вопрос, а как мой компьютер работает.
[1] Пост danluu о branch prediction, прям с нуля с 90 годов. Нет сложных вещей
[2] Перцептронные branch predictions
[3] Эксперименты cloudflare с branch predictions в AMD и Apple M1 (тоже нулевой порог входа)
[4] Статья про процессоры Exynos
[5] LLVM Profile Guided Optimization
[6] Agner Fog x86 branch predictors — без новых процов
Forwarded from radio-t bot
⚠️ Best practices for writing code comments - https://stackoverflow.blog/2021/12/23/best-practices-for-writing-code-comments/
stackoverflow.blog
Best practices for writing code comments - Stack Overflow
отличная новость, 0.1 релиз low level OCI runtime на Раст - youki
https://www.utam0k.jp/en/blog/2021/12/27/youki_first_release/
https://www.utam0k.jp/en/blog/2021/12/27/youki_first_release/
utam0k
Hello, youki!
First release of youki, an OCI container runtime written in Rust
Forwarded from Полезняшки от "Разбора Полетов"
Amazon Introduces Re:Post, a “Stack Overflow” for AWS
https://t.me/iv?url=https://aws.amazon.com/blogs/aws/aws-repost-a-reimagined-qa-experience-for-the-aws-community/&rhash=ec6cb38db5870a
https://t.me/iv?url=https://aws.amazon.com/blogs/aws/aws-repost-a-reimagined-qa-experience-for-the-aws-community/&rhash=ec6cb38db5870a
Amazon Web Services
AWS re:Post – A Reimagined Q&A Experience for the AWS Community
The internet is an excellent resource for well-intentioned guidance and answers. However, it can sometimes be hard to tell if what you’re reading is, in fact, advice you should follow. Also, some users have a preference toward using a single, trusted online…
не знал про такой проект, оказывается пишут имплементацию гита на раст
https://github.com/Byron/gitoxide/discussions/285
https://github.com/Byron/gitoxide/discussions/285
GitHub
End of year 2021: 20 months of Gitoxide · Discussion #285 · Byron/gitoxide
The Beginning Despite gitoxide being created mid 2018, it really only started active development in April 2020 at 1399 SLOC and 1758 lines total in 60 commits, just 2 crates with the main binary be...
кто юзает LastPass это новость для вас: https://www.bleepingcomputer.com/news/security/lastpass-users-warned-their-master-passwords-are-compromised/
BleepingComputer
LastPass users warned their master passwords are compromised
Many LastPass users report that their master passwords have been compromised after receiving email warnings that someone tried to use them to log into their accounts from unknown locations.
Forwarded from Полезняшки от "Разбора Полетов"
Best practices can slow your application down
https://stackoverflow.blog/2021/12/22/best-practices-can-slow-your-application-down/
https://stackoverflow.blog/2021/12/22/best-practices-can-slow-your-application-down/
Stack Overflow Blog
Best practices can slow your application down
In order to get the most performant site possible when building the codebase for our public Stack Overflow site, we didn’t always follow best practices.
немного про Copy над Range типом
https://kaylynn.gay/blog/post/rust_ranges_and_suffering
https://kaylynn.gay/blog/post/rust_ranges_and_suffering
Kaylynn's website
Ranges and suffering
If you're familiar with Python, you probably like Rust's ranges a lot. They're generally tidy, are lots more concise than writing out all the time, and are a ton better than magic syntax for slicing [...]
что там за магия происходит во время билда
https://fasterthanli.me/articles/why-is-my-rust-build-so-slow
https://fasterthanli.me/articles/why-is-my-rust-build-so-slow
fasterthanli.me
Why is my Rust build so slow?
I’ve recently come back to an older project of mine (that powers this website), and as I did some maintenance work: upgrade to newer crates, upgrade to a newer rustc, I noticed that my build was ta...
Forwarded from opennet.ru
Наиболее важные события 2021 года https://opennet.ru/56422/
www.opennet.ru
Наиболее важные события 2021 года
Итоговая подборка наиболее важных и заметных событий 2021 года:
нарезка комментов от Guido про Python и другие языки
https://medium.com/codex/python-4-0-will-never-arrive-3d994dce54f1
https://medium.com/codex/python-4-0-will-never-arrive-3d994dce54f1
Medium
Python 4.0 will never arrive🤚😔
Said by Python’s creator