👍15🔥3
В этом посте будут собираться обзоры новой микроархитектуры Zen5.
Слайды от AMD с инфой о м/а и интервью главного архитектора, дающее чуть больше деталей.
Zen4's AVX512 Teardown от Mystical (автора y-cruncher).
Zen5's AVX512 Teardown + More... от него же. Кратко - все SIMD ALU были действительно расширены с 256 до 512 бит, поэтому на AVX-512 коде можно получить до 2-кратного ускорения, но увы на любом другом SIMD/FPU коде (скалярном, 128/256-битном) - в среднем несколько процентов. Плюс, латентность всех выполняемых в SIMD ALU 1-тактовых операций увеличилась до 2 тактов.
Здесь собраны обзоры Zen5 с точки зрения пользователей (скорость в различных приложениях).
Слайды от AMD с инфой о м/а и интервью главного архитектора, дающее чуть больше деталей.
Zen4's AVX512 Teardown от Mystical (автора y-cruncher).
Zen5's AVX512 Teardown + More... от него же. Кратко - все SIMD ALU были действительно расширены с 256 до 512 бит, поэтому на AVX-512 коде можно получить до 2-кратного ускорения, но увы на любом другом SIMD/FPU коде (скалярном, 128/256-битном) - в среднем несколько процентов. Плюс, латентность всех выполняемых в SIMD ALU 1-тактовых операций увеличилась до 2 тактов.
Здесь собраны обзоры Zen5 с точки зрения пользователей (скорость в различных приложениях).
👍5❤4
Forwarded from Один микросек - C++, low latency, concurrency, HFT
⚡️Видео When Nanoseconds Matter: Ultrafast Trading Systems
Довольно интересная лекция от David Gross из Optiver о том, какие фишки используются в проектировании комплексных торговых систем:
- как лучше представить L3 ордербук в памяти, и как искать в нем.
- немного о проектировании и коде SPMC bounded очереди в shared memory.
- идея spawn'ить perf прямо из своего процесса.
- немного о likely/unlikely/cold секциях в коде.
- упомнянул о том, какой выигрыш даёт kernel bypass при работе с сетью.
- использование clang xray для добавления профилирования в рантайме.
Довольно интересная лекция от David Gross из Optiver о том, какие фишки используются в проектировании комплексных торговых систем:
- как лучше представить L3 ордербук в памяти, и как искать в нем.
- немного о проектировании и коде SPMC bounded очереди в shared memory.
- идея spawn'ить perf прямо из своего процесса.
- немного о likely/unlikely/cold секциях в коде.
- упомнянул о том, какой выигрыш даёт kernel bypass при работе с сетью.
- использование clang xray для добавления профилирования в рантайме.
YouTube
When Nanoseconds Matter: Ultrafast Trading Systems in C++ - David Gross - CppCon 2024
https://cppcon.org
CppCon 2024 Early Access: https://cppcon.org/early-access
Access All 2024 Session Videos Ahead of Their Official Release To YouTube. At least 30 days exclusive access through the Early Access system. Videos will be released to the CppCon…
CppCon 2024 Early Access: https://cppcon.org/early-access
Access All 2024 Session Videos Ahead of Their Official Release To YouTube. At least 30 days exclusive access through the Early Access system. Videos will be released to the CppCon…
👍2❤1🔥1
Forwarded from Записки CPU designer'a (Николай)
Подборка микроархитектурных блок-диаграм ядер от Intel, AMD, ARM, Ampere.
Block Diagrams: http://bit.ly/32qLLew
μarch Cheat Sheet: http://bit.ly/2JTplfJ
Для бесполезного, но интересного упражнения, можно посравнивать ядро Apple A15 (или любое другое, представленное в подборке) с решениями на базе RISC-V от Sifive P870 например или Syntacore SCR7/9.
Block Diagrams: http://bit.ly/32qLLew
μarch Cheat Sheet: http://bit.ly/2JTplfJ
Для бесполезного, но интересного упражнения, можно посравнивать ядро Apple A15 (или любое другое, представленное в подборке) с решениями на базе RISC-V от Sifive P870 например или Syntacore SCR7/9.
👍4🔥2
Forwarded from this->notes.
#cpp
Время -- деньги.
Стандарт говорит [упрощая], что компиляторы должны поддерживать только наблюдаемое поведение. А как он там это делает, это уже его дело.
Есть несколько уровней оптимизаций.
O0 (о ноль)
База. Компилятор делает минимальный анализ и минимальное кол-во оптимизаций. Сохраняется полная семантика программы. Дефолтный вариант. Идеально для дебага.
O1
Компилятор применяет простые оптимизации без сложного анализа: dead code elimination, constant propagation, basic inlining.
У GCC тут уже 48 оптимизаций.
Используется редко, когда не хочется сильно замедлить компиляцию очень больших программ (друг отметил, что это нужно только маргиналам).
O2
Самый народный уровень.
Множество оптимизаций без speed-space трейдофа: unroll loops, vectorization, strict aliasing.
O3
Включаем максимальный перфоманс отдельной программы. Всё ради скорости. Более агрессивно оптимизируем циклы, больше инлайним, больше векторизируем. Из-за сильной векторизации и инлайнинга бинарник может сильно раздуваться. В том числе поэтому перф может падать, так что на практике не всегда является более оптимальным (при небольшом instruction cache вы станете чаще кешмиссить).
Если увлекаетесь, можно включать при компиляции отдельных файлов, код в которых точно в плюсе. Не задевая всё остальное.
Ofast
Как O3, но включаются опасные оптимизации. Например
Почему опасные? Потому что скорость получается за счёт точности. Про артефакты можно почитать в Beware of fast-math.
Og (оуджи)
Og = O0 + некоторые оптимизации из O1, не ухудшающие debug experience.
Os
Os = оптимизации из O2, не увеличивающие размер кода + некоторые дополнительные, позволяющие сократить размер исполняемого кода. Трейдофим немного, но в меру.
Oz
Когда у вас мощнейшие ограничения по размеру бинарника и использованию памяти, выбираем Oz. Заодно можно просадить и перф. Но иногда в embedded только так.
Может увеличить кол-во исполняемых инструкций, если их можно закодировать меньшим кол-вом байтов.
Дебагать может быть тоже уже нереально больно. Но как есть.
Мы не говорим про LTO (и ThinLTO) и PGO. Мы не говорим про -march=... и другие. Может когда-нибудь потом..
Доклад в тему: What GCC optimization level is best for you?
В докладе про сами оптимизации и много сравнения с LLVM в разных плоскостях по разным оптимизациям. Может быть полезно, если хотите осознать, какой компилятор лучше под ваши конкретные нужды, т.к. трейдофы выбирают разные.
Время -- деньги.
Стандарт говорит [упрощая], что компиляторы должны поддерживать только наблюдаемое поведение. А как он там это делает, это уже его дело.
Есть несколько уровней оптимизаций.
O0 (о ноль)
База. Компилятор делает минимальный анализ и минимальное кол-во оптимизаций. Сохраняется полная семантика программы. Дефолтный вариант. Идеально для дебага.
O1
Компилятор применяет простые оптимизации без сложного анализа: dead code elimination, constant propagation, basic inlining.
У GCC тут уже 48 оптимизаций.
Используется редко, когда не хочется сильно замедлить компиляцию очень больших программ (друг отметил, что это нужно только маргиналам).
O2
Самый народный уровень.
Множество оптимизаций без speed-space трейдофа: unroll loops, vectorization, strict aliasing.
O3
Включаем максимальный перфоманс отдельной программы. Всё ради скорости. Более агрессивно оптимизируем циклы, больше инлайним, больше векторизируем. Из-за сильной векторизации и инлайнинга бинарник может сильно раздуваться. В том числе поэтому перф может падать, так что на практике не всегда является более оптимальным (при небольшом instruction cache вы станете чаще кешмиссить).
Если увлекаетесь, можно включать при компиляции отдельных файлов, код в которых точно в плюсе. Не задевая всё остальное.
Ofast
Как O3, но включаются опасные оптимизации. Например
--ffast-math.Почему опасные? Потому что скорость получается за счёт точности. Про артефакты можно почитать в Beware of fast-math.
Og (оуджи)
Og = O0 + некоторые оптимизации из O1, не ухудшающие debug experience.
Os
Os = оптимизации из O2, не увеличивающие размер кода + некоторые дополнительные, позволяющие сократить размер исполняемого кода. Трейдофим немного, но в меру.
Oz
Когда у вас мощнейшие ограничения по размеру бинарника и использованию памяти, выбираем Oz. Заодно можно просадить и перф. Но иногда в embedded только так.
Может увеличить кол-во исполняемых инструкций, если их можно закодировать меньшим кол-вом байтов.
Дебагать может быть тоже уже нереально больно. Но как есть.
Мы не говорим про LTO (и ThinLTO) и PGO. Мы не говорим про -march=... и другие. Может когда-нибудь потом..
Доклад в тему: What GCC optimization level is best for you?
В докладе про сами оптимизации и много сравнения с LLVM в разных плоскостях по разным оптимизациям. Может быть полезно, если хотите осознать, какой компилятор лучше под ваши конкретные нужды, т.к. трейдофы выбирают разные.
❤1👍1
Forwarded from Блог*
#prog #article
Advent of compiler optimizations — сборник декабрьских статей, по одной в день (в обратном хронологическом порядке), демонстрирующих на отдельных небольших примерах различные оптимизации компиляторов. Написано Мэттом Годболтом (да-да, тот самый, который godbolt.org).
Advent of compiler optimizations — сборник декабрьских статей, по одной в день (в обратном хронологическом порядке), демонстрирующих на отдельных небольших примерах различные оптимизации компиляторов. Написано Мэттом Годболтом (да-да, тот самый, который godbolt.org).
👍2🔥1
Forwarded from Записки CPU designer'a
Лекция о микроархитектуре x86-процессоров на примере Intel Skylake.
Разбираются базовые принципы работы современного out-of-order CPU: конвейер, декодирование x86-инструкций в микрооперации (µops), внеочередное исполнение, переименование регистров и аппаратные механизмы повышения производительности.
Лектор: Мэтт Годболт
Создатель Compiler Explorer, C++-разработчик и популяризатор низкоуровневых аспектов работы процессоров.
Разбираются базовые принципы работы современного out-of-order CPU: конвейер, декодирование x86-инструкций в микрооперации (µops), внеочередное исполнение, переименование регистров и аппаратные механизмы повышения производительности.
Лектор: Мэтт Годболт
Создатель Compiler Explorer, C++-разработчик и популяризатор низкоуровневых аспектов работы процессоров.
👍2🍾2🔥1
Путеводитель C++ программиста по неопределенному поведению
Как известно, неопределённое поведение (UB) заложено в язык для того, чтобы дать компилятору простор для оптимизации. Вместе с тем, этот механизм бывает причиной экзотических ошибок, которые могут проявляться в зависимости от архитектуры целевого процессора, компилятора и его опций, а также положения спутников Юпитера.
Дмитрий Свиридкин собрал множество UB в книге на GitHub, чтобы помочь нам с вами не совершать подобных ошибок (для кинестетиков есть бумажная версия книги).
Как говорится, предупреждён — значит вооружён. Вооружайтесь 😉
Как известно, неопределённое поведение (UB) заложено в язык для того, чтобы дать компилятору простор для оптимизации. Вместе с тем, этот механизм бывает причиной экзотических ошибок, которые могут проявляться в зависимости от архитектуры целевого процессора, компилятора и его опций, а также положения спутников Юпитера.
Дмитрий Свиридкин собрал множество UB в книге на GitHub, чтобы помочь нам с вами не совершать подобных ошибок (для кинестетиков есть бумажная версия книги).
Как говорится, предупреждён — значит вооружён. Вооружайтесь 😉
❤7🤔1
Forwarded from GPGPU Russia
Недавно прошёл очередной курс "Вычисления на видеокартах" от Николая Полярного бесплатно без регистрации и смс (ну, при желании, можно и зарегистрироваться).
Из опыта прошлых таких постов, почему-то ссылки курсы (тоже открытые) про GPU от Nvidia набирают гораздо больше просмотров и пересылок, что странно, так как этот курс (и прошлые его версии) гораздо более глубокий, охватывает гораздо больше тем и вообще на русском языке.
Из опыта прошлых таких постов, почему-то ссылки курсы (тоже открытые) про GPU от Nvidia набирают гораздо больше просмотров и пересылок, что странно, так как этот курс (и прошлые его версии) гораздо более глубокий, охватывает гораздо больше тем и вообще на русском языке.
🔥4
Forwarded from GPGPU Russia (Michael Lukin)
Компилятор из CUDA в AMD RDNA 3 и 4 (видеокарты AMD Radeon 7xxx и 9ххх), написанный на С99 без зависимостей от других библиотек:
https://github.com/Zaneham/BarraCUDA
https://github.com/Zaneham/BarraCUDA
GitHub
GitHub - Zaneham/Booth: Open-source CUDA, Triton and HIP compiler targeting multiple GPU and CPU architectures.
Open-source CUDA, Triton and HIP compiler targeting multiple GPU and CPU architectures. - Zaneham/Booth
1👍2👎1🤯1
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Записки CPU designer'a
NVIDIA опубликовала 45-страничный whitepaper, подробно раскрывающий архитектуру Vera CPU
https://nvdam.widen.net/s/nmw5vblpqd/nvidia_vera_cpu_architecture_whitepaper
https://nvdam.widen.net/s/nmw5vblpqd/nvidia_vera_cpu_architecture_whitepaper
🔥3
Forwarded from C++ Russia — канал конференции
#видеозаписи #плюсочетверг
Детально разбираем эволюцию от ассемблерных вставок до
Юлий Тарасов — Векторизация в C++: от ассемблерных вставок к переносимой производительности со std::simd
😉 YouTube | 📺 VK Видео
Детально разбираем эволюцию от ассемблерных вставок до
std::simd и смотрим, как заставить один и тот же алгоритм идеально работать и на x86 с AVX2, и на RISC-V с RVV, и на ARM с SVE.Юлий Тарасов — Векторизация в C++: от ассемблерных вставок к переносимой производительности со std::simd
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Векторизация в C++: от ассемблерных вставок к переносимой производительности со std::simd
Подробнее о конференции C++ Russia: https://jrg.su/nbdpQS
— —
Скачать презентацию с сайта — https://jrg.su/qzX49M
Хватит ли вам терпения копировать код, заменяя _mm256 на _mm512? Надоело гадать, справится ли автовекторизатор с вашим циклом? Разработка векторизованного…
— —
Скачать презентацию с сайта — https://jrg.su/qzX49M
Хватит ли вам терпения копировать код, заменяя _mm256 на _mm512? Надоело гадать, справится ли автовекторизатор с вашим циклом? Разработка векторизованного…
👍1
Achieving Peak Performance for Matrix Multiplication in C++. Aliaksei Sala - C++Now 2025
Алексей рассказывает про постепенное улучшение умножения матриц, начиная от базового подхода и двигаясь через улучшение работы с кешами, simd, префетчингом и всякими другими финтифлюшками.
Алексей рассказывает про постепенное улучшение умножения матриц, начиная от базового подхода и двигаясь через улучшение работы с кешами, simd, префетчингом и всякими другими финтифлюшками.
🔥1
Forwarded from C++ Russia — канал конференции
#видеозаписи #плюсочетверг
В C++ модель алиасинга формируется сразу несколькими слоями:
1) strict aliasing,
2) оптимизационные модели компиляторов (TBAA, noalias, alias scopes),
3) нестандартные расширения компиляторов, такие как __restrict.
Доклад, который мы открываем сегодня — о том, как компиляторы (GCC, Clang, MSVC) принимают решения об алиасинге и что может сделать программист, чтобы сделать свой код более быстрым и, что также важно, безопасным.
Отдельное внимание спикер уделил современным обсуждениям в стандарте C++ (restrict-like семантика, alias sets, свойства доступа для span/mdspan, pointer provenance), в докладе разобраны примеры кода на C++23, выдержки из последнего стандарта C++, а также фрагменты LLVM IR для объяснения работы оптимизатора.
Владислав Белов — Алиасинг памяти в C++: прошлое, настоящее и будущее
😉 YouTube | 📺 VK Видео
В C++ модель алиасинга формируется сразу несколькими слоями:
1) strict aliasing,
2) оптимизационные модели компиляторов (TBAA, noalias, alias scopes),
3) нестандартные расширения компиляторов, такие как __restrict.
Доклад, который мы открываем сегодня — о том, как компиляторы (GCC, Clang, MSVC) принимают решения об алиасинге и что может сделать программист, чтобы сделать свой код более быстрым и, что также важно, безопасным.
Отдельное внимание спикер уделил современным обсуждениям в стандарте C++ (restrict-like семантика, alias sets, свойства доступа для span/mdspan, pointer provenance), в докладе разобраны примеры кода на C++23, выдержки из последнего стандарта C++, а также фрагменты LLVM IR для объяснения работы оптимизатора.
Владислав Белов — Алиасинг памяти в C++: прошлое, настоящее и будущее
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Владислав Белов — Алиасинг памяти в C++: прошлое, настоящее и будущее
Подробнее о конференции C++ Russia: https://jrg.su/nbdpQS
— —
Алиасинг — одна из самых важных и при этом до сих пор недостаточно хорошо понимаемых тем в системном программировании. Проблема контроля алиасинга существует во всех языках программирования, работающих…
— —
Алиасинг — одна из самых важных и при этом до сих пор недостаточно хорошо понимаемых тем в системном программировании. Проблема контроля алиасинга существует во всех языках программирования, работающих…
👍1👎1