🏎️ Сравнение производительности C++20
ComPPare — это инструмент для бенчмаркинга и валидации производительности различных реализаций функций на C++20. Он позволяет сравнивать время выполнения и проверять результаты для разных платформ, таких как CPU, OpenMP и CUDA, что упрощает портирование функций.
🚀 Основные моменты:
- Заголовочный файл, легко интегрируется в проекты.
- Поддержка любых функций, работающих на хосте.
- Подробная информация о времени выполнения и накладных расходах.
- Встроенная проверка ошибок для распространенных типов данных.
📌 GitHub: https://github.com/funglf/ComPPare
#cpp
ComPPare — это инструмент для бенчмаркинга и валидации производительности различных реализаций функций на C++20. Он позволяет сравнивать время выполнения и проверять результаты для разных платформ, таких как CPU, OpenMP и CUDA, что упрощает портирование функций.
🚀 Основные моменты:
- Заголовочный файл, легко интегрируется в проекты.
- Поддержка любых функций, работающих на хосте.
- Подробная информация о времени выполнения и накладных расходах.
- Встроенная проверка ошибок для распространенных типов данных.
📌 GitHub: https://github.com/funglf/ComPPare
#cpp
GitHub
GitHub - funglf/ComPPare: Compare performance & correctness of reference vs. optimized functions (CPU, GPU, parallel). Written…
Compare performance & correctness of reference vs. optimized functions (CPU, GPU, parallel). Written in C++20. - funglf/ComPPare
🔥3👍1
Forwarded from C++ Academy
@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥1
⚡ 📬 Как построить лёгкую in-memory шину сообщений на .NET Channels - отличный разбор.
В статье показано, как без внешних брокеров организовать событийную архитектуру внутри приложения, используя
🔗 Читать здесь: milanjovanovic.tech/blog/lightweight-in-memory-message-bus-using-dotnet-channels
#dotnet #csharp #architecture #messaging #inmemory```
В статье показано, как без внешних брокеров организовать событийную архитектуру внутри приложения, используя
System.Threading.Channels. Быстро, минималистично и эффективно. 🔗 Читать здесь: milanjovanovic.tech/blog/lightweight-in-memory-message-bus-using-dotnet-channels
#dotnet #csharp #architecture #messaging #inmemory```
❤3🔥1
И эти нестандартные проблемы требуют нестандартных решений.
Вот о таких решениях мы сегодня и поговорим.
А именно:
▪Посмотрим, как работают исключения на платформе Linux x86, и сделаем с ними что‑то интересное.
▪Залезем ещё глубже под капот исключений и сделаем их ещё быстрее.
▪Сделаем висячую ссылку на невалидный объект, и всё будет хорошо.
▪А под конец то, что все любим, — погрузимся в шаблонное метапрограммирование.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍1
Готовы с нуля создавать телекоммуникационные решения для беспроводных мобильных сетей и сопутствующих услуг? 🧑💻
Отправляйте резюме до 19 октября и присоединяйтесь к команде YADRO Телеком!
Как получить оффер за 3 дня? Листайте карточки выше — все подробности там!
💙 Оставляйте заявку — мы ждём именно вас!
Отправляйте резюме до 19 октября и присоединяйтесь к команде YADRO Телеком!
Как получить оффер за 3 дня? Листайте карточки выше — все подробности там!
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
🎶 Библиотека для музыкальных векторов и алгоритмов
Vectors — это C++ библиотека для представления и манипуляции музыкальными структурами, такими как гаммы, аккорды и ритмы. Она предлагает мощные инструменты для музыкальных теоретиков и разработчиков, интересующихся алгоритмической музыкой.
🚀 Основные моменты:
- Унифицированные классы векторов для позиций, интервалов и бинарных паттернов
- Генераторы ритмов и мета-операторы для музыкальных объектов
- Матричные операции для анализа музыкальных структур
- Поддержка циклической и модульной арифметики
- Расчеты расстояний и схожести между музыкальными векторами
📌 GitHub: https://github.com/sivabenepoivediamo/vectors
Vectors — это C++ библиотека для представления и манипуляции музыкальными структурами, такими как гаммы, аккорды и ритмы. Она предлагает мощные инструменты для музыкальных теоретиков и разработчиков, интересующихся алгоритмической музыкой.
🚀 Основные моменты:
- Унифицированные классы векторов для позиций, интервалов и бинарных паттернов
- Генераторы ритмов и мета-операторы для музыкальных объектов
- Матричные операции для анализа музыкальных структур
- Поддержка циклической и модульной арифметики
- Расчеты расстояний и схожести между музыкальными векторами
📌 GitHub: https://github.com/sivabenepoivediamo/vectors
❤2
Прочитал у Вани Ходора, бэкендера из Лавки, пост про спекулятивное исполнение. Speculative execution — это мощный паттерн, где система предугадывает ваше следующее действие, заранее выполняя вычисления или подгружая данные.
В системном мире мы с этим живём постоянно. Процессоры уже десятилетиями предсказывают ветки кода, чтобы не простаивать. И именно поэтому они такие быстрые. Однако за эту высокую скорость пришлось платить — именно такой ценой появились уязвимости вроде Spectre. Даже железо может переусердствовать с догадками.
В прикладных системах то же самое:
спекуляция делает интерфейсы «мгновенными», но за кулисами идёт реальный перерасход. Предзагрузил слишком много — серверы греются, а пользователи даже не дошли до этой функции.
Я бы сказал так:
> спекулятивное исполнение — это ставка на интуицию машины.
> хорошо, когда она угадывает желания пользователя, плохо — когда начинает гадать.
В C++ подобные вещи ощущаются буквально: лишние вычисления, преждевременные аллокации, работа с кэшем — всё это цена «догадок». Если не знаешь, ради чего ускоряешь, то, скорее всего, просто сжигаешь ресурсы.
Speculative execution — крутой инструмент, но использовать его стоит только там, где задержка реально убивает UX или бизнес-метрику. В остальных случаях лучше просто сделать код лаконичным и быстрым.
В системном мире мы с этим живём постоянно. Процессоры уже десятилетиями предсказывают ветки кода, чтобы не простаивать. И именно поэтому они такие быстрые. Однако за эту высокую скорость пришлось платить — именно такой ценой появились уязвимости вроде Spectre. Даже железо может переусердствовать с догадками.
В прикладных системах то же самое:
спекуляция делает интерфейсы «мгновенными», но за кулисами идёт реальный перерасход. Предзагрузил слишком много — серверы греются, а пользователи даже не дошли до этой функции.
Я бы сказал так:
> спекулятивное исполнение — это ставка на интуицию машины.
> хорошо, когда она угадывает желания пользователя, плохо — когда начинает гадать.
В C++ подобные вещи ощущаются буквально: лишние вычисления, преждевременные аллокации, работа с кэшем — всё это цена «догадок». Если не знаешь, ради чего ускоряешь, то, скорее всего, просто сжигаешь ресурсы.
Speculative execution — крутой инструмент, но использовать его стоит только там, где задержка реально убивает UX или бизнес-метрику. В остальных случаях лучше просто сделать код лаконичным и быстрым.
Telegram
this->notes.
#highload
Есть такой паттерн speculative execution (⢄⠣⠌ ⠅⡠⢆⠒⢔⢄⢢⣀⠍ ⢃⠎⠚⡐⢰⡰⡰⡢⠲ ⢌⠥⠜⢅⠊⠃⡌⢈⡂⠰⡃ ⠡⡢ ⡅⠍ ⣄⡔⡘⡠⠉⠃⡆⢂⠓⠪⠩⢐⡠ ⡢⠩⢆⠱⠚⡡⢈⠦⡢⠕). Паттерн заключается в том, чтобы делать префетч данных ещё до того, как пользователь захочет что-то увидеть, чтобы в момент, когда он…
Есть такой паттерн speculative execution (⢄⠣⠌ ⠅⡠⢆⠒⢔⢄⢢⣀⠍ ⢃⠎⠚⡐⢰⡰⡰⡢⠲ ⢌⠥⠜⢅⠊⠃⡌⢈⡂⠰⡃ ⠡⡢ ⡅⠍ ⣄⡔⡘⡠⠉⠃⡆⢂⠓⠪⠩⢐⡠ ⡢⠩⢆⠱⠚⡡⢈⠦⡢⠕). Паттерн заключается в том, чтобы делать префетч данных ещё до того, как пользователь захочет что-то увидеть, чтобы в момент, когда он…
❤3
Forwarded from Machinelearning
Ошеломляющий контраст: одна NVIDIA ($4.6 трлн) сейчас стоит дороже, чем все банки США и Канады вместе ($4.2 трлн) 🫧
@ai_machinelearning_big_data
#nvidia
@ai_machinelearning_big_data
#nvidia
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🔥3🥰1
🧩 Почему Databento не переписали feed-handler на Rust
Кратко:
- Контекст: реальный поток 14 млн сообщений/с и задержки <100 мкс. Требовались native-язык, простая параллельность и минимум общей памяти.
- Итог: для переписывания feed-handler выбрали C++23, а не Rust — из-за нескольких «больно на практике» паттернов.
Где Rust мешал именно под их кейс:
1) Повторное использование буфера
Хотели выделять буфер вне цикла и переиспользовать на итерациях без копий. Ссылки + времена жизни → конфликт с borrow-checker, хотя логически данные не переживают итерацию.
2) Самоссылочные структуры (self-referential structs)
Базовый паттерн «владение состоянием в объекте + подкомпоненты держат ссылки» в Rust упирается в модель заимствования. Обходные пути — RC/Arc или протаскивать ссылки аргументами — добавляют оверхед/шум. В C++ — просто порядок полей и правила перемещения/копирования.
3) Компиляционные дженерики
Шаблоны C++ гибче (partial specialization, fold-expr, constexpr). В Rust те же идеи требуют trait-интерфейсов и шаблонного «лесовоздства». На десятках версий структур получается много шаблонного кода или макросов.
Нет, это не «Rust плох»:
- У Databento уже много Rust в проде: кодеки DBN, realtime-шлюзы, клиентская библиотека. Инструменты cargo, диагностика компилятора и безопасность — огромный плюс.
- Но под данный «узкий» участок C++ дал:
кодо-реюз со старой базы, тонкий контроль ресурсов, гибкие шаблоны и прямая экспертиза команды.
Вывод:
- В их финтех-стеке оба языка уместны: Rust — где важны безопасность и современная экосистема, C++ — где критичны сам паттерн владения/памяти и совместимость с существующим кодом. Поле меняется: C++ получает compile-time reflection, Rust развивает Polonius — решения всегда прагматичны под задачу.
https://databento.com/blog/why-we-didnt-rewrite-our-feed-handler-in-rust
Кратко:
- Контекст: реальный поток 14 млн сообщений/с и задержки <100 мкс. Требовались native-язык, простая параллельность и минимум общей памяти.
- Итог: для переписывания feed-handler выбрали C++23, а не Rust — из-за нескольких «больно на практике» паттернов.
Где Rust мешал именно под их кейс:
1) Повторное использование буфера
Хотели выделять буфер вне цикла и переиспользовать на итерациях без копий. Ссылки + времена жизни → конфликт с borrow-checker, хотя логически данные не переживают итерацию.
2) Самоссылочные структуры (self-referential structs)
Базовый паттерн «владение состоянием в объекте + подкомпоненты держат ссылки» в Rust упирается в модель заимствования. Обходные пути — RC/Arc или протаскивать ссылки аргументами — добавляют оверхед/шум. В C++ — просто порядок полей и правила перемещения/копирования.
3) Компиляционные дженерики
Шаблоны C++ гибче (partial specialization, fold-expr, constexpr). В Rust те же идеи требуют trait-интерфейсов и шаблонного «лесовоздства». На десятках версий структур получается много шаблонного кода или макросов.
Нет, это не «Rust плох»:
- У Databento уже много Rust в проде: кодеки DBN, realtime-шлюзы, клиентская библиотека. Инструменты cargo, диагностика компилятора и безопасность — огромный плюс.
- Но под данный «узкий» участок C++ дал:
кодо-реюз со старой базы, тонкий контроль ресурсов, гибкие шаблоны и прямая экспертиза команды.
Вывод:
- В их финтех-стеке оба языка уместны: Rust — где важны безопасность и современная экосистема, C++ — где критичны сам паттерн владения/памяти и совместимость с существующим кодом. Поле меняется: C++ получает compile-time reflection, Rust развивает Polonius — решения всегда прагматичны под задачу.
https://databento.com/blog/why-we-didnt-rewrite-our-feed-handler-in-rust
❤3