🚀 Параллельный код || Оптимизация || Concurrency || SIMD || GPGPU – Telegram
🚀 Параллельный код || Оптимизация || Concurrency || SIMD || GPGPU
238 subscribers
26 photos
16 files
41 links
Наш чат: @parallelcoding

1️⃣ Concurrency, параллельное и асинхронное программирование, высокопроизводительные вычисления, GPGPU, IPC…
2️⃣ Оптимизация кода, SIMD. Профилирование, бенчмарк.

Предложения, замечания: @jin_x
Download Telegram
Свеженькие мануалы по процессорам, оптимизации, библиотекам.

А также их машинные переводы на русский (если вдруг кому надо). Плюс машинные переводы некоторых книг и спецификаций.

#документация
5
В этом посте будут собираться обзоры новой микроархитектуры 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 с точки зрения пользователей (скорость в различных приложениях).
👍54
⚡️Видео When Nanoseconds Matter: Ultrafast Trading Systems

Довольно интересная лекция от David Gross из Optiver о том, какие фишки используются в проектировании комплексных торговых систем:

- как лучше представить L3 ордербук в памяти, и как искать в нем.

- немного о проектировании и коде SPMC bounded очереди в shared memory.

- идея spawn'ить perf прямо из своего процесса.

- немного о likely/unlikely/cold секциях в коде.

- упомнянул о том, какой выигрыш даёт kernel bypass при работе с сетью.

- использование clang xray для добавления профилирования в рантайме.
👍21🔥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.
👍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, но включаются опасные оптимизации. Например --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).
👍2🔥1
Лекция о микроархитектуре x86-процессоров на примере Intel Skylake.

Разбираются базовые принципы работы современного out-of-order CPU: конвейер, декодирование x86-инструкций в микрооперации (µops), внеочередное исполнение, переименование регистров и аппаратные механизмы повышения производительности.

Лектор: Мэтт Годболт
Создатель Compiler Explorer, C++-разработчик и популяризатор низкоуровневых аспектов работы процессоров.
👍2🍾2
Путеводитель C++ программиста по неопределенному поведению

Как известно, неопределённое поведение (UB) заложено в язык для того, чтобы дать компилятору простор для оптимизации. Вместе с тем, этот механизм бывает причиной экзотических ошибок, которые могут проявляться в зависимости от архитектуры целевого процессора, компилятора и его опций, а также положения спутников Юпитера.

Дмитрий Свиридкин собрал множество UB в книге на GitHub, чтобы помочь нам с вами не совершать подобных ошибок (для кинестетиков есть бумажная версия книги).
Как говорится, предупреждён — значит вооружён. Вооружайтесь 😉
7🤔1
Forwarded from GPGPU Russia
Недавно прошёл очередной курс "Вычисления на видеокартах" от Николая Полярного бесплатно без регистрации и смс (ну, при желании, можно и зарегистрироваться).

Из опыта прошлых таких постов, почему-то ссылки курсы (тоже открытые) про GPU от Nvidia набирают гораздо больше просмотров и пересылок, что странно, так как этот курс (и прошлые его версии) гораздо более глубокий, охватывает гораздо больше тем и вообще на русском языке.