Предкомпилированные заголовки в C++
При компиляции каждого cpp файла происходит перекомпиляция всех подключаемых заголовков, что занимает много времени.
Предкомпилированные заголовки (pch) позволяют скомпилировать их один раз и переиспользовать, что значительно ускорит компиляцию.
Остается только правильно их использовать.
Первый вариант - для каждой либы проекта сделать pch с входными .h, это обычно std и другие либы.
Минус - для каждой либы придется создавать свой pch с повторной компиляцией, что в итоге раздувает размер проекта.
У меня такой способ ускорил компиляцию в 2 раза и увеличил размер проекта до 100Гб.
Второй вариант - сложить все заголовки проекта в pch, тогда каждый .cpp файл будет обращаться к предкомпилированным заголовкам.
Скорость компиляции выросла еще в 2 раза, на старом ЦП даже в 5 раз. Размер проекта также уменьшился, ведь больше нет десятков pch.
Недостатки тоже есть - все зависимости и макросы придется вынести в один проект, чтобы pch компилировался со всем необходимыми макросами. Из-за этого не получится изолировать макросы в пределах одной либы. Изменение одного заголовка приводит к перекомпиляции всего проекта, что лучше подходит для CI, чем для разработки.
Третий вариант - сложить все заголовки отдельной либы в pch. Это решит проблему с макросами и чуть ускорит сборку, но останется слишком большой размер проекта.
Последний вариант - перейти на модули, но это требует рефакторинга всего кода.
#cpp
При компиляции каждого 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
С дискретными картами все просто - уже не новый 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