https://habr.com/ru/post/138132/ #cpp #gcc
https://doc.rust-lang.org/rustc/profile-guided-optimization.html
PGO #rust
#llvm может в оптимизации по статистике профайлера. Profile Guided Optimization (PGO) получается почти как делает это JIT компилятор но в момент компиляции все зашивается и в рантайме уже ускорены какие то не самые оптимальные (вначале) вещи
в моем случае 16к строк #rust кода в базовом случае исолнилось 4.6сек (было 5.0сек). быстрей на почти 7% (pgo и lto оптимизации включены) видимо слишком оптимально пишу код, что компилятору и переставить нечего. смешенные чувства 🙈🤓 оптимизировались лишь места загрузки исходных данных с сериализацией для последующего юзания
https://doc.rust-lang.org/rustc/profile-guided-optimization.html
PGO #rust
#llvm может в оптимизации по статистике профайлера. Profile Guided Optimization (PGO) получается почти как делает это JIT компилятор но в момент компиляции все зашивается и в рантайме уже ускорены какие то не самые оптимальные (вначале) вещи
в моем случае 16к строк #rust кода в базовом случае исолнилось 4.6сек (было 5.0сек). быстрей на почти 7% (pgo и lto оптимизации включены) видимо слишком оптимально пишу код, что компилятору и переставить нечего. смешенные чувства 🙈🤓 оптимизировались лишь места загрузки исходных данных с сериализацией для последующего юзания
Хабр
GCC Profile-guided optimization
Profile-guided optimization (далее PGO) — техника оптимизации программы компилятором, нацеленная на увеличение производительности выполнения программы. В отличии от традиционных способов оптимизации...
https://doc.rust-lang.org/beta/std/sync/struct.Condvar.html Condvar штука которая может залочить поток пока... не исполнилось то что нужное в другом потоке. есть она не только в #rust конечноже
doc.rust-lang.org
std::sync::Condvar - Rust
API documentation for the Rust `Condvar` struct in crate `std`.
https://doc.rust-lang.org/std/panic/fn.catch_unwind.html возможность отловить панику в #rust. но есть и те виды паники которые не отловить и даже этим способом. память закончилась например. и что бы отловить хоть чтонибудь нужна память Х)). приложение просто выйдет с ошибкой, логично
doc.rust-lang.org
catch_unwind in std::panic - Rust
Invokes a closure, capturing the cause of an unwinding panic if one occurs.
JSON в #rust. трейты с примерами
Encode/Deocde
Serialize/Deserialize
http://siciarz.net/24-days-of-rust-working-json/
http://valve.github.io/blog/2014/08/25/json-serialization-in-rust-part-1/
http://valve.github.io/blog/2014/08/26/json-serialization-in-rust-part-2/
кстати не знал про пакет json_macros https://crates.io/crates/json_macros удобненько описывать можно жсон структуры
Encode/Deocde
Serialize/Deserialize
http://siciarz.net/24-days-of-rust-working-json/
http://valve.github.io/blog/2014/08/25/json-serialization-in-rust-part-1/
http://valve.github.io/blog/2014/08/26/json-serialization-in-rust-part-2/
кстати не знал про пакет json_macros https://crates.io/crates/json_macros удобненько описывать можно жсон структуры
siciarz.net
24 days of Rust - working with JSON | Blog | siciarz.net
Important note: this article is outdated! Go to http://zsiciarz.github.io/24daysofrust/ for a recent version of all of 24 days of Rust articles. The blogpost here is kept as it is for historical reasons.
JSON is a workhorse data format of the modern Web.…
JSON is a workhorse data format of the modern Web.…
https://notes.iveselov.info/programming/rust-closures-combining-move-and-fn
Еще раз про то что любое замыкание это структура данных. и когда мы передаем данные дальше нам обязательно делать move и клон, так как иначе мы не можем заимствовать значения из структуры. в языках где есть GC все тоже через структуру, но так как GC сам может отслеживать время жизни то этого просто не замечаем. Ну а в языках с ручным управлением памятью как в #rust - все немного сложней, но и бенефиты есть за счет этого. Если воспринимать замыкание как структуру данных со всеми данными которые нужны что бы потом запуститься, то все становится на свои места
Еще раз про то что любое замыкание это структура данных. и когда мы передаем данные дальше нам обязательно делать move и клон, так как иначе мы не можем заимствовать значения из структуры. в языках где есть GC все тоже через структуру, но так как GC сам может отслеживать время жизни то этого просто не замечаем. Ну а в языках с ручным управлением памятью как в #rust - все немного сложней, но и бенефиты есть за счет этого. Если воспринимать замыкание как структуру данных со всеми данными которые нужны что бы потом запуститься, то все становится на свои места
notes.iveselov.info
Rust Closures: Returning `impl Fn` for `move` closures | IV Notes
https://vfoley.xyz/rust-compilation-tip/
https://www.philipdaniels.com/blog/2019/rust-release-mode-builds/
для #llvm при компиляции #rust можно указать под какой процессор все компилировать и это может дать ускорение
в моем случае это дополнительно к
https://www.philipdaniels.com/blog/2019/rust-release-mode-builds/
для #llvm при компиляции #rust можно указать под какой процессор все компилировать и это может дать ускорение
в моем случае это дополнительно к
PGO и LTO дало еще 1% мало но дало =) иногда можно выжать куда большеhttps://docs.google.com/presentation/d/1B3n6iioXYzYZ7WP9yq7l2_eyHOTsr6jUSOU2nfgGPMY/edit#slide=id.g59eaa0c0cb_4_452
https://docs.google.com/presentation/d/1nQxbBkHYOAXAcodVk-14th5nXhIYaOaa0cK7UG1bgxk/edit#slide=id.g59eaa0c0cb_4_452
https://docs.google.com/presentation/d/16n62-XZ1kpF-lkb2j-jRVnaYeYWZf5EyVy4eBcs0ANc/edit#slide=id.g63261c2bb8_1_184
про Serde в #rust
для себя нашел
https://docs.google.com/presentation/d/1nQxbBkHYOAXAcodVk-14th5nXhIYaOaa0cK7UG1bgxk/edit#slide=id.g59eaa0c0cb_4_452
https://docs.google.com/presentation/d/16n62-XZ1kpF-lkb2j-jRVnaYeYWZf5EyVy4eBcs0ANc/edit#slide=id.g63261c2bb8_1_184
про Serde в #rust
для себя нашел
tag гибко очень можно настроить как enum будет сериализоваться. даже типизированные данные можно сразу сгружать в отдельный проперти одной строчкой. пойду везде поменяю =)Google Docs
2019-05-09 Unpacking Serde (1/3) by Erich Gubler
Unpacking Serde #1 The Serde model and structs
https://www.youtube.com/watch?v=rAl-9HwD858
https://www.youtube.com/watch?v=q6paRBbLgNw
плэйлист по #rust про
https://www.youtube.com/watch?v=q6paRBbLgNw
плэйлист по #rust про
lifetimes annotation and declarative macros смотрел и другие видео от автора. хорошо доступно рассказываетYouTube
Crust of Rust: Lifetime Annotations
In the 2019 Rust Survey, a lot of people were asking for video content covering intermediate Rust content. So in this first video (possibly of many), we're going to investigate a case where you need multiple explicit lifetime annotations. We explore why they…
https://github.com/RazrFalcon/cargo-bloat
случайно нашел анализатор того что попадает в бинарник #rust
https://github.com/johnthagen/min-sized-rust а тут немного про все плюшки оптимизации под размер бинарника
случайно нашел анализатор того что попадает в бинарник #rust
https://github.com/johnthagen/min-sized-rust а тут немного про все плюшки оптимизации под размер бинарника
GitHub
GitHub - RazrFalcon/cargo-bloat: Find out what takes most of the space in your executable.
Find out what takes most of the space in your executable. - RazrFalcon/cargo-bloat
https://mike42.me/blog/2018-06-make-better-cli-progress-bars-with-unicode-block-characters мелочь но не забыть бы. символы для прогрессбара
#terminal , #console , #color
#terminal , #console , #color
Mike's Software Blog
Make better CLI progress bars with Unicode block characters
As a programmer, you might add a progress bar so that the user has feedback while they wait for a slow task.
If you are writing a console (CLI) application, then you need to make your progress bars from text. A good command-line progress bar should update…
If you are writing a console (CLI) application, then you need to make your progress bars from text. A good command-line progress bar should update…
https://gist.github.com/amatellanes/a986f6babb9cf8556e36 так пусть просто полежит. список команд и методов celery #python
Gist
Celery handy commands
Celery handy commands. GitHub Gist: instantly share code, notes, and snippets.
Forwarded from 0x1337
Табличка с замерами Latency / Throughput, которой ну очень удобно пользоваться. Кстати, информация куда более полная чем у Агнера Фога:
https://uops.info/table.html
#optimization #asm
https://uops.info/table.html
#optimization #asm
Forwarded from 0x1337
Ребята, как я и обещал - радую годным, авторским контентом. Увы, скидывать целиковые статьи, а точнее читать их тут - дело не из простых. Поэтому, сами статьи публикую 'где-то', а сюда скидываю ссылку. Так вот, авторский контент подъехал:
https://habr.com/ru/post/468581/
#publication #asm #cxx #optimization
https://habr.com/ru/post/468581/
#publication #asm #cxx #optimization
Хабр
Делись, рыбка, быстро и нацело
Деление — одна из самых дорогих операций в современных процессорах. За доказательством далеко ходить не нужно: Agner Fog[ 1 ] вещает, что на процессорах Intel / AMD мы легко можем получить Latency в...
Forwarded from 0x1337
Данные в процессор загружаются из памяти. Дело это не быстрое:
https://www.7-cpu.com/
Вот тут^ выбери модель интересующего тебя процессора и посмотри, какова цена работы процессора с 'Голой' памятью. На Haswell, например, 90 clock cycles.
#measurments #ram #processor #link
https://www.7-cpu.com/
Вот тут^ выбери модель интересующего тебя процессора и посмотри, какова цена работы процессора с 'Голой' памятью. На Haswell, например, 90 clock cycles.
#measurments #ram #processor #link
Forwarded from 0x1337
Продолжая рассуждения на тему обмена данных между Процессором и Памятью:
Есть Out Of Order Execution процессор, есть кусочек кода который подгружает данные из Памяти в Кеш Процессора и как-либо обрабатывает их после, и есть код который отрабатывает ДО места где эти данные загружаются / используются.
Из поста выше мы знаем, что обмен данными между Памятью и Процессором - долог: если на момент пользования обмениваемыми данными, в Кеше Процессора их нету - работа встанет. Процессор, конечно, не дурак и просматривая Фреймы наперед, начнет загрузку данных в Кеш еще до того как они реально понадобятся, параллельно выполняя команды идущие ДО. То есть я к чему: нужно писать код так, чтобы до Работы с Памятью можно было сделать какую-либо полезную Память-Независимую работу, на фоне выполнения которой и будет происходить опережающая выгрузка данных из Памяти.
#memory #cache #prefetching
Есть Out Of Order Execution процессор, есть кусочек кода который подгружает данные из Памяти в Кеш Процессора и как-либо обрабатывает их после, и есть код который отрабатывает ДО места где эти данные загружаются / используются.
Из поста выше мы знаем, что обмен данными между Памятью и Процессором - долог: если на момент пользования обмениваемыми данными, в Кеше Процессора их нету - работа встанет. Процессор, конечно, не дурак и просматривая Фреймы наперед, начнет загрузку данных в Кеш еще до того как они реально понадобятся, параллельно выполняя команды идущие ДО. То есть я к чему: нужно писать код так, чтобы до Работы с Памятью можно было сделать какую-либо полезную Память-Независимую работу, на фоне выполнения которой и будет происходить опережающая выгрузка данных из Памяти.
#memory #cache #prefetching
Forwarded from 0x1337
Привет! Джем и Горячий чай уже ждут тебя:
https://habr.com/ru/post/470674/
Контент авторский, тут все по плану. Ну а утро бывает не только добрым, но и теплым, да.
#link #publication #cxx #allocator #data_structure #interesting
https://habr.com/ru/post/470674/
Контент авторский, тут все по плану. Ну а утро бывает не только добрым, но и теплым, да.
#link #publication #cxx #allocator #data_structure #interesting
Хабр
Inside The JeMalloc. Базовые Структуры Данных: Pairing Heap & Bitmap Tree
Тема Аллокаторов частенько всплывает на просторах интернета: действительно, аллокатор — эдакий краеугольный камень, сердце любого приложения. В этой серии постов я хочу в подробностях рассказать о...
https://www.youtube.com/watch?v=51lqHKVDoBE модули пельтье в охлаждении #pc фактически это реактивный буст охлаждения. как будто проц работает в комнате с -40 по цельсию
YouTube
Охлаждение на Пельтье. Часть 2. Увеличил эффективность в 2.1 раза
Кулеры для ПК - https://www.e-katalog.ru/u/nVGzj/a
Комплектующие - https://www.e-katalog.ru/u/qUrgE/a
В видео я рассказываю как сделать, возможно, самое лучшее охлаждение которое может поместиться в обычный компьютерный корпус на основе элементов Пельтье…
Комплектующие - https://www.e-katalog.ru/u/qUrgE/a
В видео я рассказываю как сделать, возможно, самое лучшее охлаждение которое может поместиться в обычный компьютерный корпус на основе элементов Пельтье…
Make LLVM fast again
https://nikic.github.io/2020/05/10/Make-LLVM-fast-again.html.html ускорение #llvm, просто отлично, что оно двигается в направлении ускорения компиляции
https://nikic.github.io/2020/05/10/Make-LLVM-fast-again.html.html ускорение #llvm, просто отлично, что оно двигается в направлении ускорения компиляции
https://joellaity.com/2020/01/25/linking.html статья про то как работает линковка в #cpp. впрочем в #rust и #swift тожесамое
Joel Laity
How linking works
I. Introduction