CG & C++ blog
57 subscribers
13 photos
2 files
129 links
Краткий обзор публикаций, презентаций, докладов по графике и C++
Download Telegram
Предкомпилированные заголовки в C++

При компиляции каждого cpp файла происходит перекомпиляция всех подключаемых заголовков, что занимает много времени.
Предкомпилированные заголовки (pch) позволяют скомпилировать их один раз и переиспользовать, что значительно ускорит компиляцию.
Остается только правильно их использовать.

Первый вариант - для каждой либы проекта сделать pch с входными .h, это обычно std и другие либы.
Минус - для каждой либы придется создавать свой pch с повторной компиляцией, что в итоге раздувает размер проекта.
У меня такой способ ускорил компиляцию в 2 раза и увеличил размер проекта до 100Гб.

Второй вариант - сложить все заголовки проекта в pch, тогда каждый .cpp файл будет обращаться к предкомпилированным заголовкам.
Скорость компиляции выросла еще в 2 раза, на старом ЦП даже в 5 раз. Размер проекта также уменьшился, ведь больше нет десятков pch.
Недостатки тоже есть - все зависимости и макросы придется вынести в один проект, чтобы pch компилировался со всем необходимыми макросами. Из-за этого не получится изолировать макросы в пределах одной либы. Изменение одного заголовка приводит к перекомпиляции всего проекта, что лучше подходит для CI, чем для разработки.

Третий вариант - сложить все заголовки отдельной либы в pch. Это решит проблему с макросами и чуть ускорит сборку, но останется слишком большой размер проекта.

Последний вариант - перейти на модули, но это требует рефакторинга всего кода.
#cpp
Новые GPU от Intel

С дискретными картами все просто - уже не новый Alchemist (Xe-HP) поддерживает все модные расширения типа рейтреса, меш шейдеров, асинхронные очереди. Но больше не поддерживает ASTC формат.
В Battlemage (Xe2-HP) добавили новые тензорные ядра, они же XMX engine.

Со встройками намного интереснее.
Xe-LP поддерживает fragment shading rate, fragment interlock, sampler feedback (только в dx), video decode, но лимиты для bindless остались в пределах 200 текстур. Для эмуляции мобилок оставили поддержку ASTC формата.

Дальше появился Xe+LP, например Arc 140T, где добавили все из Xe-HP, только урезали тензорные ядра и получилось так:
Arrow Lake-H: XeSS super resolution, frame generation, low latency
Arrow Lake-S, Meteor Lake: XeSS super resolution, low latency

Затем выпустили Xe2-LP и назвали его Arc 140V, но только на Ultra 200V серии, а остальная 200 серия осталась на Xe+.
Из новых расширений: fragment shader barycentric.

Подробнее в моих заметках: Xe1, Xe2